chiark / gitweb /
devscripts (2.10.69+squeeze4) stable-security; urgency=high
authorJames McCoy <jamessan@debian.org>
Sat, 15 Sep 2012 01:32:38 +0000 (02:32 +0100)
committerJames McCoy <jamessan@debian.org>
Sat, 15 Sep 2012 01:32:38 +0000 (02:32 +0100)
  * dget:
    + Fix CVE-2012-2241 (arbitrary file deletion)
    + Fix CVE-2012-2242 (arbitrary code execution)
  * dscverify: Fix CVE-2012-2240 (arbitrary code execution)
  * debdiff: Fix regression in exit code, introduced in 2.10.69+squeeze2
    (Closes: 686247)

# imported from the archive

151 files changed:
COPYING [new file with mode: 0644]
Devscripts/DB_File_Lock.pm [new file with mode: 0644]
Devscripts/Debbugs.pm [new file with mode: 0644]
Devscripts/PackageDeps.pm [new file with mode: 0644]
Devscripts/Packages.pm [new file with mode: 0644]
Devscripts/Set.pm [new file with mode: 0644]
Devscripts/URI.pm [new file with mode: 0644]
Devscripts/Versort.pm [new file with mode: 0644]
Makefile [new file with mode: 0644]
Makefile.common [new file with mode: 0644]
README [new file with mode: 0644]
README.newscripts [new file with mode: 0644]
conf.default.in [new file with mode: 0644]
cowpoke.conf [new file with mode: 0644]
debian/NEWS [new file with mode: 0644]
debian/TODO [new file with mode: 0644]
debian/bug/presubj [new file with mode: 0644]
debian/bug/script [new file with mode: 0644]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/dirs [new file with mode: 0644]
debian/examples [new file with mode: 0644]
debian/genmanpage.pl [new file with mode: 0644]
debian/install [new file with mode: 0644]
debian/links [new file with mode: 0644]
debian/lintian.overrides [new file with mode: 0644]
debian/manpages [new file with mode: 0644]
debian/postinst [new file with mode: 0644]
debian/postrm [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/source/format [new file with mode: 0644]
debian/svn-deblayout [new file with mode: 0644]
examples/bts_autosubscription.procmail [new file with mode: 0644]
examples/debian.procmail [new file with mode: 0644]
examples/forward.exim [new file with mode: 0644]
examples/forward.procmail [new file with mode: 0644]
examples/master.procmail [new file with mode: 0644]
po4a/Makefile [new file with mode: 0644]
po4a/add_fr/translator_dbk.add [new file with mode: 0644]
po4a/add_fr/translator_man.add [new file with mode: 0644]
po4a/add_fr/translator_pod.add [new file with mode: 0644]
po4a/devscripts-po4a.conf [new file with mode: 0644]
po4a/fr/translator_man.add [new file with mode: 0644]
po4a/po/devscripts.pot [new file with mode: 0644]
po4a/po/fr.po [new file with mode: 0644]
scripts/Makefile [new file with mode: 0644]
scripts/annotate-output.1 [new file with mode: 0644]
scripts/annotate-output.sh [new file with mode: 0755]
scripts/archpath.1 [new file with mode: 0644]
scripts/archpath.sh [new file with mode: 0755]
scripts/bts.pl [new file with mode: 0755]
scripts/build-rdeps.pl [new file with mode: 0755]
scripts/chdist.bash_completion [new file with mode: 0644]
scripts/chdist.pl [new file with mode: 0755]
scripts/checkbashisms.1 [new file with mode: 0644]
scripts/checkbashisms.pl [new file with mode: 0755]
scripts/cowpoke.1 [new file with mode: 0644]
scripts/cowpoke.sh [new file with mode: 0755]
scripts/cvs-debc.1 [new file with mode: 0644]
scripts/cvs-debi.1 [new file with mode: 0644]
scripts/cvs-debi.sh [new file with mode: 0755]
scripts/cvs-debrelease.1 [new file with mode: 0644]
scripts/cvs-debrelease.sh [new file with mode: 0755]
scripts/cvs-debuild.1 [new file with mode: 0644]
scripts/cvs-debuild.pl [new file with mode: 0755]
scripts/dcmd.1 [new file with mode: 0644]
scripts/dcmd.sh [new file with mode: 0755]
scripts/dcontrol.pl [new file with mode: 0755]
scripts/dd-list.1 [new file with mode: 0644]
scripts/dd-list.pl [new file with mode: 0755]
scripts/deb-reversion.dbk [new file with mode: 0644]
scripts/deb-reversion.sh [new file with mode: 0755]
scripts/debc.1 [new file with mode: 0644]
scripts/debchange.1 [new file with mode: 0644]
scripts/debchange.pl [new file with mode: 0755]
scripts/debcheckout.pl [new file with mode: 0755]
scripts/debclean.1 [new file with mode: 0644]
scripts/debclean.sh [new file with mode: 0755]
scripts/debcommit.pl [new file with mode: 0755]
scripts/debdiff.1 [new file with mode: 0644]
scripts/debdiff.pl [new file with mode: 0755]
scripts/debi.1 [new file with mode: 0644]
scripts/debi.pl [new file with mode: 0755]
scripts/debpkg-wrapper.c [new file with mode: 0644]
scripts/debpkg.1 [new file with mode: 0644]
scripts/debpkg.pl [new file with mode: 0755]
scripts/debrelease.1 [new file with mode: 0644]
scripts/debrelease.sh [new file with mode: 0755]
scripts/debrsign.1 [new file with mode: 0644]
scripts/debrsign.sh [new file with mode: 0755]
scripts/debsign.1 [new file with mode: 0644]
scripts/debsign.sh [new file with mode: 0755]
scripts/debsnap.1 [new file with mode: 0644]
scripts/debsnap.pl [new file with mode: 0755]
scripts/debuild.1 [new file with mode: 0644]
scripts/debuild.pl [new file with mode: 0755]
scripts/desktop2menu.pl [new file with mode: 0755]
scripts/devscripts.1.in [new file with mode: 0644]
scripts/devscripts.conf.5 [new file with mode: 0644]
scripts/dget.pl [new file with mode: 0755]
scripts/diff2patches.1 [new file with mode: 0644]
scripts/diff2patches.sh [new file with mode: 0755]
scripts/dpkg-buildpackage-snapshot [new file with mode: 0755]
scripts/dpkg-depcheck.1 [new file with mode: 0644]
scripts/dpkg-depcheck.pl [new file with mode: 0755]
scripts/dpkg-genbuilddeps.1 [new file with mode: 0644]
scripts/dpkg-genbuilddeps.sh [new file with mode: 0755]
scripts/dscverify.1 [new file with mode: 0644]
scripts/dscverify.pl [new file with mode: 0755]
scripts/getbuildlog.1 [new file with mode: 0644]
scripts/getbuildlog.sh [new file with mode: 0644]
scripts/grep-excuses.1 [new file with mode: 0644]
scripts/grep-excuses.pl [new file with mode: 0755]
scripts/libvfork.c [new file with mode: 0644]
scripts/licensecheck.pl [new file with mode: 0755]
scripts/list-unreleased.1 [new file with mode: 0644]
scripts/list-unreleased.sh [new file with mode: 0755]
scripts/manpage-alert.1 [new file with mode: 0644]
scripts/manpage-alert.sh [new file with mode: 0755]
scripts/mass-bug.pl [new file with mode: 0755]
scripts/mergechanges.1 [new file with mode: 0644]
scripts/mergechanges.sh [new file with mode: 0755]
scripts/mk-build-deps.pl [new file with mode: 0755]
scripts/namecheck.pl [new file with mode: 0644]
scripts/nmudiff.1 [new file with mode: 0644]
scripts/nmudiff.sh [new file with mode: 0755]
scripts/pkgnames.bash_completion [new file with mode: 0644]
scripts/plotchangelog.1 [new file with mode: 0644]
scripts/plotchangelog.pl [new file with mode: 0755]
scripts/pts-subscribe.1 [new file with mode: 0644]
scripts/pts-subscribe.sh [new file with mode: 0755]
scripts/rc-alert.1 [new file with mode: 0644]
scripts/rc-alert.pl [new file with mode: 0755]
scripts/rmadison.pl [new file with mode: 0755]
scripts/svnpath.pl [new file with mode: 0755]
scripts/tagpending.pl [new file with mode: 0755]
scripts/transition-check.pl [new file with mode: 0755]
scripts/uscan.1 [new file with mode: 0644]
scripts/uscan.pl [new file with mode: 0755]
scripts/uupdate.1 [new file with mode: 0644]
scripts/uupdate.sh [new file with mode: 0755]
scripts/who-uploads.1 [new file with mode: 0644]
scripts/who-uploads.sh [new file with mode: 0755]
scripts/whodepends.1 [new file with mode: 0644]
scripts/whodepends.sh [new file with mode: 0755]
scripts/wnpp-alert.1 [new file with mode: 0644]
scripts/wnpp-alert.sh [new file with mode: 0755]
scripts/wnpp-check.1 [new file with mode: 0644]
scripts/wnpp-check.sh [new file with mode: 0755]

diff --git a/COPYING b/COPYING
new file mode 100644 (file)
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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           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/Devscripts/DB_File_Lock.pm b/Devscripts/DB_File_Lock.pm
new file mode 100644 (file)
index 0000000..d4ceefd
--- /dev/null
@@ -0,0 +1,366 @@
+#
+# 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/Devscripts/Debbugs.pm b/Devscripts/Debbugs.pm
new file mode 100644 (file)
index 0000000..7e88301
--- /dev/null
@@ -0,0 +1,454 @@
+# 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
+
+=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")
+
+=cut
+
+use strict;
+use warnings;
+
+my $soapurl='Debbugs/SOAP/1';
+our $btsurl='http://bugs.debian.org/';
+my @errors;
+
+sub init_soap {
+    my $soapproxyurl;
+    if ($btsurl =~ m%^https?://(.*)/?$%) {
+       $soapproxyurl = $btsurl . '/';
+    } else {
+       $soapproxyurl = 'http://' . $btsurl . '/';
+    }
+    $soapproxyurl =~ s%//$%/%;
+    $soapproxyurl .= 'cgi-bin/soap.cgi';
+    my $soap = SOAP::Lite->uri($soapurl)->proxy($soapproxyurl);
+
+    $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 $bugs = $soap->get_status(@args);
+
+    if (@errors or not defined $bugs) {
+       my $error = join("\n", @errors);
+       die "Error while retrieving bug statuses from SOAP server: $error\n";
+    }
+
+    my $result = $bugs->result();
+
+    if (@errors or not defined $result) {
+       my $error = join("\n", @errors);
+       die "Error while retrieving bug statuses from SOAP server: $error\n";
+    }
+
+    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/Devscripts/PackageDeps.pm b/Devscripts/PackageDeps.pm
new file mode 100644 (file)
index 0000000..d3b8bfb
--- /dev/null
@@ -0,0 +1,280 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use Carp;
+require 5.006_000;
+
+package Devscripts::PackageDeps;
+
+# This reads in a package file list, such as /var/lib/dpkg/status,
+# and parses it.
+
+# Syntax: new Devscripts::PackageDeps($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);
+    $self->parse ($filename);
+    return $self;
+}
+
+
+# Internal function
+
+sub parse ($$)
+{
+    my $self = shift;
+    my $filename = shift;
+
+    if (! defined $filename) { 
+       croak("requires filename as parameter"); 
+    }
+    open PACKAGE_FILE, $filename or
+       croak("Unable to load $filename: $!");
+
+    local $/;
+    $/="";  # Split on blank lines
+
+ PACKAGE_ENTRY:
+    while (<PACKAGE_FILE>) {
+       if (/^\s*$/) { next; }
+
+       # So we've got a package
+       my $pkg;
+       my @deps = ();
+
+       chomp;
+       s/\n\s+/\376\377/g; # fix continuation lines
+       s/\376\377\s*\376\377/\376\377/og;
+
+       while (/^(\S+):\s*(.*?)\s*$/mg) {
+           my ($key, $value) = (lc $1, $2);
+           $value =~ s/\376\377/\n /g;
+           if ($key eq 'package') { $pkg = $value; }
+           elsif ($key =~ /^(pre-)?depends$/) {
+               $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; }
+               }
+           }
+           elsif ($key eq 'status') {
+               unless ($value =~ /^\S+\s+\S+\s+(\S+)$/) {
+                   warn "Unrecognised Status line in $filename:\nStatus: $value\n";
+               }
+               my $status = $1;
+               # Hopefully, the system is in a nice state...
+               # Ignore broken packages and removed but not purged packages
+               next PACKAGE_ENTRY unless
+                   $status eq 'installed' or $status eq 'unpacked';
+           }
+       }
+
+       $self->{$pkg} = \@deps;
+    }
+    close PACKAGE_FILE or
+       croak("Problems encountered reading $filename: $!");
+}
+
+
+# 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/Devscripts/Packages.pm b/Devscripts/Packages.pm
new file mode 100644 (file)
index 0000000..321938d
--- /dev/null
@@ -0,0 +1,275 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+package Devscripts::Packages;
+
+use Carp;
+
+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
+
+# 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=();
+    my ($curfile, $pkgfrom);
+    undef $pkgfrom;
+    $curfile = shift;
+    
+    foreach (@dpkg_out) {
+       # We want to handle diversions nicely.
+       # Ignore local diversions
+       if (/^local diversion from: /) {
+           # Do nothing
+       }
+       elsif (/^local diversion to: (.+)$/) {
+           if ($curfile eq $1) {
+               $curfile = shift;
+           }
+       }
+       elsif (/^diversion by (\S+) from: (.+)$/) {
+           if ($curfile eq $2) {
+               # So the file we're looking has been diverted
+               $pkgfrom=$1;
+           }
+       }
+       elsif (/^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;
+               $curfile = shift;
+           }
+       }
+       elsif (/^dpkg: \Q$curfile\E not found\.$/) {
+           $curfile = shift;
+       }
+       elsif (/^(.*): \Q$curfile\E$/) {
+           my @pkgs = split /, /, $1;
+           if (@pkgs==1) { $packages{$pkgs[0]} = 1; }
+           else {
+               # We've got a file which has been diverted by some package
+               # and so is listed in two packages.  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
+           $curfile = shift;
+           undef $pkgfrom;
+       }
+
+    }
+
+    return keys %packages;
+}
+
+
+# Return a list of packages whose status entries match a given pattern
+
+sub PackagesMatch ($)
+{
+    my $package;
+    my $match=$_[0];
+    my @matches=();
+
+    open STATUS, '/var/lib/dpkg/status'
+       or croak("Can't read /var/lib/dpkg/status: $!");
+
+    while(<STATUS>) {
+       chomp;
+       s/\s+$//;
+       if (/^Package: (.+)$/) { $package=$1; next; }
+       /$match/ or next;
+       push @matches, $package if $package;
+       # So we only pick up each package at most once
+       undef $package;
+    }
+
+    close STATUS or croak("Problem reading /var/lib/dpkg/status: $!");
+    return @matches;
+}
+
+
+# Which packages are installed (Package and Source)?
+# This uses internal knowledge about the /var/lib/dpkg/status file
+# for efficiency - it runs 3 times faster than if it didn't use this
+# info....  And calling a shell script is faster still: thanks to
+# Arthur Korn <arthur@korn.ch> for this one ;-)
+# For the correct settings of -B# -A#, keep up-to-date with
+# the dpkg source, defn of fieldinfos[] in lib/parse.c
+# (and should match wnpp-alert.sh)
+
+sub InstalledPackages ($)
+{
+    my $grep_pattern = $_[0] ? '^\(Package\|Source\):' : '^Package:';
+
+    open (PKG, qq[grep -B2 -A7 'Status: install ok installed' /var/lib/dpkg/status | grep '$grep_pattern' | cut -f2 -d' ' |])
+       or croak("Problem opening grep pipe: $!");
+
+    my %matches = map { chomp; $_ => 1 } <PKG>;
+
+    close PKG or croak("Problem reading grep pipe: $!");
+
+    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/Devscripts/Set.pm b/Devscripts/Set.pm
new file mode 100644 (file)
index 0000000..041288e
--- /dev/null
@@ -0,0 +1,133 @@
+# 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 <http://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/Devscripts/URI.pm b/Devscripts/URI.pm
new file mode 100644 (file)
index 0000000..49a4c7a
--- /dev/null
@@ -0,0 +1,106 @@
+# This module is stolen from debbugs until the real
+# URI::query_form properly handles ; and is released
+# under the terms of the GPL version 2, or any later
+# version at your option.
+# See the file README and COPYING for more information.
+#
+# Copyright 2007 by Don Armstrong <don@donarmstrong.com>.
+# query_form is
+# Copyright 1995-2003 Gisle Aas.
+# Copyright 1995 Martijn Koster.
+
+
+package Devscripts::URI;
+
+=head1 NAME
+
+Devscripts::URI -- Derivative of URI which overrides the query_param
+ method to use ';' instead of '&' for separators.
+
+=head1 SYNOPSIS
+
+use Devscripts::URI;
+
+=head1 DESCRIPTION
+
+See L<URI> for more information.
+
+=head1 BUGS
+
+None known.
+
+=cut
+
+use warnings;
+use strict;
+use base qw(URI URI::_query);
+
+=head2 query_param
+
+     $uri->query_form( $key1 => $val1, $key2 => $val2, ... )
+
+Exactly like query_param in L<URI> except query elements are joined by
+; instead of &.
+
+=cut
+
+{
+
+     package URI::_query;
+
+     no warnings 'redefine';
+     # Handle ...?foo=bar&bar=foo type of query
+     sub URI::_query::query_form {
+         my $self = shift;
+         my $old = $self->query;
+         if (@_) {
+              # Try to set query string
+              my @new = @_;
+              if (@new == 1) {
+                   my $n = $new[0];
+                   if (ref($n) eq "ARRAY") {
+                        @new = @$n;
+                   }
+                   elsif (ref($n) eq "HASH") {
+                        @new = %$n;
+                   }
+              }
+              my @query;
+              while (my($key,$vals) = splice(@new, 0, 2)) {
+                   $key = '' unless defined $key;
+                   $key =~ s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
+                   $key =~ s/ /+/g;
+                   $vals = [ref($vals) eq "ARRAY" ? @$vals : $vals];
+                   for my $val (@$vals) {
+                        $val = '' unless defined $val;
+                        $val =~ s/([;\/?:@&=+,\$\[\]%])/$URI::Escape::escapes{$1}/g;
+                        $val =~ s/ /+/g;
+                        push(@query, "$key=$val");
+                   }
+              }
+              # We've changed & to a ; here.
+              $self->query(@query ? join(';', @query) : undef);
+         }
+         return if !defined($old) || !length($old) || !defined(wantarray);
+         return unless $old =~ /=/; # not a form
+         map { s/\+/ /g; uri_unescape($_) }
+              # We've also changed the split here to split on ; as well as &
+              map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/[&;]/, $old);
+     }
+}
+
+
+
+
+
+
+1;
+
+
+__END__
+
+
+
+
+
+
diff --git a/Devscripts/Versort.pm b/Devscripts/Versort.pm
new file mode 100644 (file)
index 0000000..dbf3bd0
--- /dev/null
@@ -0,0 +1,56 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+# The functions in this Perl module are 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
+# 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.
+# 
+# The returned array has the greatest version as the 0th array element.
+
+package Devscripts::Versort;
+use Dpkg::Version;
+
+sub versort (@)
+{
+    return _versort(0, @_);
+}
+
+sub deb_versort (@)
+{
+    return _versort(1, @_);
+}
+
+sub _versort ($@)
+{
+    my ($check, @namever_pairs) = @_;
+
+    foreach my $pair (@namever_pairs) {
+       unshift(@$pair, Dpkg::Version->new($pair->[0], check => $check));
+    }
+
+    my @sorted = sort { $b->[0] <=> $a->[0] } @namever_pairs;
+
+    foreach my $pair (@sorted) {
+       shift @$pair;
+    }
+
+    return @sorted;
+}
+
+1;
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..2d382ea
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,45 @@
+# Simplified Makefile for devscripts
+
+include Makefile.common
+
+DESTDIR =
+
+PERL_MODULES = Devscripts
+EXAMPLES = conf.default
+
+all: version make_scripts $(EXAMPLES) translated_manpages
+
+version:
+       rm -f version
+       dpkg-parsechangelog | perl -ne '/^Version: (.*)/ && print $$1' \
+           > 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_translated_manpages
+       rm -f version conf.default make_scripts
+
+install: all install_scripts
+       cp -a $(PERL_MODULES) $(DESTDIR)$(PERLMOD_DIR)
+       cp $(EXAMPLES) $(DESTDIR)$(EXAMPLES_DIR)
+
+make_scripts:
+       $(MAKE) -C scripts/
+       touch $@
+clean_scripts: clean_translated_manpages
+       $(MAKE) -C scripts/ clean
+install_scripts:
+       $(MAKE) -C scripts/ install DESTDIR=$(DESTDIR)
+
diff --git a/Makefile.common b/Makefile.common
new file mode 100644 (file)
index 0000000..3ffa4b4
--- /dev/null
@@ -0,0 +1,8 @@
+GEN_MAN1S := bts.1 build-rdeps.1 chdist.1 dcontrol.1 debcheckout.1 debcommit.1 \
+            deb-reversion.1 desktop2menu.1 dget.1 licensecheck.1 mass-bug.1 \
+            mk-build-deps.1 namecheck.1 rmadison.1 svnpath.1 tagpending.1 \
+            transition-check.1
+
+PERLMOD_DIR = /usr/share/devscripts
+EXAMPLES_DIR = /usr/share/devscripts
+
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..4841724
--- /dev/null
+++ b/README
@@ -0,0 +1,311 @@
+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.  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.
+
+And now, in mostly alphabetical order, the scripts:
+
+- annotate-output: prepend time and stream (O for stdout E for sterr)
+  for every line of output
+
+- archpath: Prints arch (tla/Bazaar) package names. Also supports
+  calculating the package names for other branches.
+
+- bts: A command-line tool for accessing the BTS, 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, 
+  libnet-smtp-ssl-perl, libsoap-lite-perl, libwww-perl, bsd-mailx | mailx]
+
+- build-rdeps: Searches for all packages that build-depend on a given package
+  [dctrl-tools]
+
+- chdist: A tool to easily play with several distributions. [dctrl-tools]
+
+- checkbashisms: checks whether a /bin/sh script uses any common
+  bash-specific features
+
+- 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]
+
+- dcmd: Run a given command replacing the name of a .changes or .dsc
+  file with each of the files referenced therein 
+
+- dcontrol: Remotely query package and source control files for all Debian
+  distributions. [liburl-perl, libwww-perl]
+
+- dd-list: Given a list of packages, pretty-print it ordered by maintainer.
+
+- 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 a
+  entry for the current version, depending upon the options given to it.
+  [libparse-debcontrol-perl, libsoap-lite-perl,  lsb-release]
+
+- 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]
+
+- 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 inadvertantly lost between versions.  Can also examine
+  two .dsc files and report on the changes between source versions.
+  [wdiff, patchutils]
+
+- 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.
+
+- 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 inadvertant 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]
+
+- 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, 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, debian-keyring, 
+  ssh-client]
+
+- debsnap: Grabs packages from http://snapshot.debian.net [wget]
+
+- 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]
+
+- deb-reversion: Increases a binary package version number and repacks
+  the package, useful for porters and the like.
+
+- 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]
+
+- dscverify: check the signature and MD5 sums of a dsc file against the most
+  current Debian keyring on your system. [gnupg, debian-keyring, 
+  libdigest-md5-perl]
+
+- getbuildlog: Download package build logs from Debian auto-builders. [wget]
+
+- grep-excuses: grep the update_excuses.html file to find out what is
+  happening to your packages. [libterm-size-perl, wget, w3m]
+
+- licensecheck: given a list of source files, attempt to determine which
+  license (or combination of licenses) each file is placed under.
+
+- list-unreleased: searches for packages marked UNRELEASED in their
+  changelog
+
+- 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]
+
+- 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]
+
+- 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]
+
+- rmadison: Remotely query the Debian archive database about packages.
+  [liburi-perl, wget | curl]
+
+- svnpath: Prints the path to the suversion 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. [libcrypt-ssleay-perl, libwww-perl, unzip, lzma, 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]
+
+- whodepends: check which maintainers' packages depend on a package
+
+- who-uploads: determine the most recent uploaders of a package to the
+  Debian archive [gnupg, debian-keyring, debian-maintainers, wget]
+
+- wnpp-alert: list installed packages which are orphaned or up for adoption
+  [wget]
+
+- wnpp-check: check whether there is an open request for packaging or
+  intention to package bug for a package [wget]
+
+- /usr/share/doc/devscripts/examples: This directory contains examples of
+  procmail and exim scripts 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 (file)
index 0000000..67c7676
--- /dev/null
@@ -0,0 +1,20 @@
+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 scripts/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 neccessary
+8. Make the script executable
+   - "svn propset svn:executable '*' scripts/newscript" so that the
+     permissions are correct in a copy of the repository
+9. Add a changelog entry
+
+last modified: $Id$
diff --git a/conf.default.in b/conf.default.in
new file mode 100644 (file)
index 0000000..1bc74ce
--- /dev/null
@@ -0,0 +1,612 @@
+# 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=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
+
+##### dcontrol
+#
+# URL to query
+# DCONTROL_URL="http://qa.debian.org/cgi-bin/dcontrol"
+
+##### 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.
+# See debcheckout(1) for a more precise description of syntax and
+# semantics of this setting.
+# DEBCHECKOUT_AUTH_URLS=''
+
+##### 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
+
+##### 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
+
+##### 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.
+#
+# 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=http://snapshot.debian.net/archive
+#
+# 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
+
+##### licensecheck
+#
+# Print the file header being parsed before the corresponding license
+# information?
+# LICENSECHECK_VERBOSE=no
+#
+# How many lines of each file should be parsed for license information?
+# LICENSECHECK_PARSELINES=60
+
+##### 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
+#
+# Remove package files after install?
+# MKBUILDDEPS_REMOVE_AFTER_INSTALL=yes
+
+##### 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
+
+##### 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
+
+##### 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
+# 
+# Corresonds 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
+
+##### wnpp-alert
+# 
+# No variables currently
+
+##### wnpp-check
+#
+# No variables currently
diff --git a/cowpoke.conf b/cowpoke.conf
new file mode 100644 (file)
index 0000000..7a80a7f
--- /dev/null
@@ -0,0 +1,86 @@
+# 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.com"
+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"
+
+
+# =============================================================================
+#
+# 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.
+#
+# -----------------------------------------------------------------------------
+
+#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"
+
diff --git a/debian/NEWS b/debian/NEWS
new file mode 100644 (file)
index 0000000..b22f9d7
--- /dev/null
@@ -0,0 +1,49 @@
+devscripts (2.10.54) unstable; urgency=low
+
+    manpage-alert now, as originally intended, prints out the full path to the
+    binary which is lacking a manpage instead of simply the binary name.
+
+    Before:
+      No manual entry for somebinary
+
+    After:
+      No manual entry for /usr/bin/somebinary
+
+ -- James Vega <jamessan@debian.org>  Thu, 06 Aug 2009 18:03:41 -0400
+
+devscripts (2.10.24) unstable; urgency=low
+
+    Starting with devscripts 2.10.21, debchange attempts to
+    automatically determine whether an NMU changelog should be
+    started, by comparing DEBEMAIL and DEBFULLNAME to the
+    package's Maintainer and Uploaders fields.
+
+    This behaviour may now be disabled using the DEBCHANGE_AUTO_NMU
+    configuration file variable.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 07 Apr 2008 14:38:08 +0100
+
+devscripts (2.10.20) unstable; urgency=low
+
+    devscripts 2.10.19 modified debcommit's --release option to use the
+    uncommitted changes (if any) in the changelog to derive the commit
+    message.
+
+    This behaviour is now optional and can be enabled using the -R /
+    --release-use-changelog command line option or by setting the
+    DEBCOMMIT_RELEASE_USE_CHANGELOG configuration option to "yes".
+
+    The default is to use the previous (i.e. pre-2.10.19) behaviour.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 19 Mar 2008 20:31:20 +0000
+
+devscripts (2.10.19) unstable; urgency=low
+
+    In devscripts 2.10.17, dget was modified to unpack source packages by
+    default.  The new -d switch or the DGET_UNPACK configuration file option
+    may be used to indicate that the unpacking should not occur.
+
+    As linda has been removed from both unstable and testing, support for
+    it has been removed from debuild and cvs-debuild.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Thu, 13 Mar 2008 19:33:38 +0000
diff --git a/debian/TODO b/debian/TODO
new file mode 100644 (file)
index 0000000..28ece0c
--- /dev/null
@@ -0,0 +1 @@
+- Fix translations for the new auto-generated devscripts.1
diff --git a/debian/bug/presubj b/debian/bug/presubj
new file mode 100644 (file)
index 0000000..6e30a34
--- /dev/null
@@ -0,0 +1,4 @@
+Please  do *not*  report bugs  about  devscripts not  depending on  some
+package it is already recommending.  As devscripts contains many  tools,
+it recommends many  packages but does  not depend  on them so that  they
+are installed by default but may be removed if desired.
diff --git a/debian/bug/script b/debian/bug/script
new file mode 100644 (file)
index 0000000..5f2298e
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+printf "\n--- /etc/devscripts.conf ---\n" >&3
+
+if [ -f /etc/devscripts.conf ]; then
+    egrep '^[^#]' /etc/devscripts.conf | \
+       egrep -v "^\s*BTS_SMTP_AUTH_" >&3
+else
+    echo "Not present" >&3
+fi
+
+printf "\n--- ~/.devscripts ---\n" >&3
+
+if [ -f ~/.devscripts ]; then
+    egrep '^[^#]' ~/.devscripts | \
+       egrep -v "^\s*BTS_SMTP_AUTH_" >&3
+else
+    echo "Not present" >&3
+fi
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..4dd7735
--- /dev/null
@@ -0,0 +1,4958 @@
+devscripts (2.10.69+squeeze4) stable-security; urgency=high
+
+  * dget:
+    + Fix CVE-2012-2241 (arbitrary file deletion)
+    + Fix CVE-2012-2242 (arbitrary code execution)
+  * dscverify: Fix CVE-2012-2240 (arbitrary code execution)
+  * debdiff: Fix regression in exit code, introduced in 2.10.69+squeeze2
+    (Closes: 686247)
+
+ -- James McCoy <jamessan@debian.org>  Fri, 14 Sep 2012 21:32:38 -0400
+
+devscripts (2.10.69+squeeze3) stable-security; urgency=high
+
+  * annotate-output: Fix to prevent symlink attack: don't delete
+    safely-created file and reuse its name.  Instead, create temporary
+    directory and create FIFOs therein.  Also, be sure to remove temporaries
+    upon catchable signal.  Thanks to Jim Meyering for the patch.  Fixes
+    CVE-2012-3500.
+
+ -- James McCoy <jamessan@debian.org>  Sun, 26 Aug 2012 11:38:43 -0400
+
+devscripts (2.10.69+squeeze2) squeeze-security; urgency=high
+
+  [ Adam D. Barratt ]
+  * debdiff: Fix CVE-2012-0211 and CVE-2012-0212 (argument injection /
+    modification)
+
+  [ Raphael Geissert ]
+  * debdiff:
+    + Fix CVE-2012-0210 (insufficient input sanitising reading .dsc
+      and .changes files)
+    + Remove undocumented feature treating extensionless files as if
+      they were packages (Closes: #659559)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Tue, 14 Feb 2012 10:26:14 +0000
+
+devscripts (2.10.69+squeeze1) stable; urgency=low
+
+  * bts: Accept the "wheezy" and "wheezy-ignore" tags.
+  * debchange:
+    + Set Squeeze as the default backports target.
+    + Recognize "lenny-backports-sloppy" and "squeeze-backports"
+      distributions.
+    + Remove "etch-backports" and "etch-volatile" distributions.
+
+ -- James Vega <jamessan@debian.org>  Sun, 06 Feb 2011 01:01:14 -0500
+
+devscripts (2.10.69) unstable; urgency=low
+
+  [ James Vega ]
+  * po4a: Add targets to transform translated POD/DocBook files into man
+    pages.  (Closes: #597782)
+  * Include command list in localized devscripts.1.  (Closes: #597906)
+  * Fix a couple markup issues in source files for generated man pages.
+  * bts: Don't send an empty email when --no-action is given.  (Closes:
+    #600822)
+
+  [ David Prévot ]
+  * Update French translation.  (Closes: #599234, #600033)
+
+  [ Patrick Schoenfeld ]
+  * Replace occurences of old FSF address with the FSF recommendation
+    what should be written inside of source files.
+    (Closes: #502512) 
+
+ -- James Vega <jamessan@debian.org>  Thu, 21 Oct 2010 07:36:42 -0400
+
+devscripts (2.10.68) unstable; urgency=low
+
+  [ James Vega ]
+  * dget: Fix parsing of apt-cache and sources.list when given only a package
+    name.  (Closes: #594904)
+  * debchange:
+    + Remove EOL Ubuntu release Intrepid.  Add new development release Natty.
+      (Closes: #593659)
+    + Remove Etch and add Squeeze as backports targets.  Lenny is still the
+      default bpo target.
+  * rmadison: Change Backports URL to backports.debian.org. (Closes: #595714)
+
+  [ Luk Claes ]
+  * Adjust rmadison documentation for move of accessible projectb mirror
+    from merkel to ries.
+
+ -- James Vega <jamessan@debian.org>  Wed, 08 Sep 2010 18:46:35 -0400
+
+devscripts (2.10.67) unstable; urgency=low
+
+  * debcommit: Use the first detected changelog instead of the last.  (Closes:
+    #591368)
+  * debsnap: Remove use of pure-perl specific functions from JSON module.
+    (Closes: #591392)
+  * debchange: Clarify how the TZ environment variable affects debchange.
+    Based on a patch by Rolf Leggewie.  (LP: #330430)
+
+ -- James Vega <jamessan@debian.org>  Sat, 14 Aug 2010 12:02:17 -0400
+
+devscripts (2.10.66) unstable; urgency=low
+
+  [ James Vega ]
+  * bts:
+    + Fix ability to clear all tags on a bug.  (Closes: #539688)
+    + Detect invalid characters in usertags.  (Closes: #590930)
+    + Allow specifying multiple tag modifiers (+, -, =) in one usertag stanza.
+  * rc-alert: Add missing hyphens and correct formatting in the man page.
+    Based on a patch by Salvatore Bonaccorso.  (Closes: #589607)
+  * checkbashisms: Allow kill & trap XSI-isms unless --posix is given, as per
+    Policy 3.9.1.0.  (Closes: #486823)
+  * debchange: Add --[no]multimaint-merge option, corresponding to the
+    DEBCHANGE_MULTIMAINT_MERGE configuration variable.  (Closes: #590842)
+  * licensecheck: Add .pas, .inc, .dtd., .xsl, and .mod files to the default
+    check list.  (Closes: #534988, #591305)
+  * build-rdeps: Escape regular expression metacharacters in package names.
+    (Closes: #590832)
+  * Build-Depends on po4a (>= 0.40) so po4a recognizes .TQ macro.
+
+  [ Cyril Brulebois ]
+  * uscan: Get rid of extra quoting in dpkg --compare-versions calls.
+    (Closes: #590178)
+
+  [ Carsten Hey ]
+  * debsign: Add options --re-sign and --no-re-sign to let the user choose
+    whether an already signed file should be resigned.  (Closes: #580821)
+
+ -- James Vega <jamessan@debian.org>  Mon, 02 Aug 2010 01:31:38 -0400
+
+devscripts (2.10.65.1) unstable; urgency=low
+
+  * debc:
+    + Call changelog_parse correctly.  (Closes: #588947)
+    + Update bash completion to complete *.changes files and package names.
+      Thanks to Stefano Rivera for the patch.  (Closes: #584703)
+
+ -- James Vega <jamessan@debian.org>  Tue, 13 Jul 2010 20:10:09 -0400
+
+devscripts (2.10.65) unstable; urgency=low
+
+  [ James Vega ]
+  * Remove mergechanges from the set of commands which use completion of
+    package names.  (Closes: #578167)
+  * bts:
+    + Use sendmail to send mails with extra headers when $(DEB)EMAIL aren't
+      present.  (Closes: #577564)
+    + Document that $(DEB)EMAIL must be in the environment to send email using
+      either --mutt or --smtp-host.  (Closes: #578334)
+    + Cleanup the help output and add some options which were only documented
+      in the man page.
+    + Allow specifying multiple tag modifiers (+, -, =) in one tag stanza.
+      (Closes: #578118)
+    + Document the valid values for the status key in the select command.
+      (Closes: #583067)
+  * debsnap:
+    + Iterate over the list of files listed for a hash until we find one that
+      matches the requested package.  (Closes: #584734)
+    + Warn and move on to the next file if no files are present for a given
+      hash or none match the requested package.  (Closes: #587265)
+    + Handle error responses from snapshot.debian.org.  (Closes: #587217)
+    + Use the basename of the file being downloaded as the name under which to
+      save it.  (Closes: #584735)
+    + Do not remove the destination directory when --force is given.  (Closes:
+      #587517)
+  * Remove --ignore-dirname options (and deprecation notices) from all
+    scripts.  6.5 years is long enough to stop using that option.
+  * diff2patches: Document the patch naming scheme and use of “debian/” as the
+    destination directory when “debian/patches/” doesn't exist.  (Closes:
+    #552693)
+  * mk-build-deps:
+    + Add options to build packages which depend on solely Build-Depends or
+      Build-Depends-Indep.  (Closes: #498898)
+    + Include build-essential in Depends.  (Closes: #565889)
+  * debi: Use “dpkg -O” instead of parsing dpkg-query's output to upgrade only
+    packages which are already installed.  (Closes: #563390)
+  * debcheckout: Specifically call out that Debian hosts are already handled
+    in DEBCHECKOUT_AUTH_URLS' description.  Thanks to martin f. krafft for the
+    suggested wording.  (Closes: #530581)
+  * debchange: When running “dch -r”, use <dist>-backports if a backports
+    upload is detected.  (Closes: #588502)
+  * uupdate: Use “0ubuntu1” for the Debian revision of the version number when
+    running uupdate on Ubuntu systems.  Based on a patch by Guillaume Martres.
+    (Closes: #577998)
+  * Ship French man pages in UTF-8 now that #196762 is fixed.
+
+  [ Martin Zobel-Helas ]
+  * Remove svk from Recommends, it is no longer in the archive. (Closes:
+    #581224)
+
+  [ Raphael Geissert ]
+  * checkbashisms:
+    + Makefile handling:
+      - Simplify make variables as shell variables.  (Closes: #535368)
+      - Convert all $$ to $.
+      - Recognize SHELL setting in Makefile when being set as an override.
+      - Ignore make's '-' for ignore errors.
+      - Fix some false positives due to target names.
+    + Detect incorrect use of ^ instead of ! for negation in pattern matching
+      collections.  (Closes: #497489)
+    + Detect use of {post,pre}{increment,decrement} in arithmetic expansion.
+      (Closes: #572006)
+    + Detect use of Bash's “printf -v var ...” or the %b and %q format
+      specifiers.
+    + Detect use of the Bash's “coproc” keyword.
+    + Detect use of Bash's “;;&” and ”;&” operators.
+    + Add support for handling line continuations.  (Closes: #531327)
+    + Fix a false positive with file redirection.
+    + Fix handling of indented heredoc delimiters.
+    + Fix some parsing of quoted strings.
+    + Detect use of exponentiation.
+    + Detect use of the 'jobs' built-in.
+    + Detect use of command with options other than “-p”.
+    + Fix a false positive with redirection to an fd specified via a variable.
+    + Detect unexpected EOF for unclosed heredocs, quoted strings, and line
+      continuations.
+
+  [ Simon McVittie ]
+  * mk-build-deps:
+    + Build an Arch: any package if any of the Build-Depends have architecture
+      requirements.  (Closes: #580600)
+    + Allow specifying for which architecture to build the package.
+
+  [ Charles Plessy ]
+  * debchange: Add “--team” support.  (Closes: #588714)
+
+ -- James Vega <jamessan@debian.org>  Mon, 12 Jul 2010 23:22:08 -0400
+
+devscripts (2.10.64) unstable; urgency=low
+
+  [ Stefano Zacchiroli ]
+  * devscripts.1: generic documentation for $DEBEMAIL and $DEBFULLNAME
+
+  [ James Vega ]
+  * Devscripts::Versort: Correct _versort so the lists it returns aren't
+    shorter than the ones passed in to _versort.  (Closes: #577654)
+  * debcheckout: Switch from using the Switch module to Perl 5.10's switch
+    feature.
+
+ -- James Vega <jamessan@debian.org>  Tue, 13 Apr 2010 23:46:10 -0400
+
+devscripts (2.10.63) unstable; urgency=low
+
+  [ Christoph Berg ]
+  * debcheckout: inject extra slash in "hg ssh://hg.debian.org//" URLs so
+    paths are not based in the user's $HOME.
+
+  [ James Vega ]
+  * Devscripts::Versort:
+    + Restore previous behavior of versort not performing a check on whether
+      the version is a valid Debian version.  (Closes: #577043)
+    + Re-add deb_versort which ensures the versions are valid Debian versions.
+  * debian/control:
+    + Require dpkg-dev >= 1.15.4.1 since we're using bits of the new Perl API.
+    + Add libjson-perl to Build-Depends so we can syntax check debsnap.
+  * debcheckout: Use $DEBEMAIL/$DEBFULLNAME to set username in .hg/hgrc.
+
+  [ David Paleino ]
+  * debsnap: rewritten from scratch in Perl, use snapshot.debian.org
+    and its JSON API (Closes: #530416)
+
+  [ Thorsten Glaser ]
+  * debsign: Convert to a Debian Policy §10.4 shell script. (Closes: #577251)
+
+ -- James Vega <jamessan@debian.org>  Mon, 12 Apr 2010 23:56:40 -0400
+
+devscripts (2.10.62) unstable; urgency=low
+
+  [ James Vega ]
+  * debcommit:
+    + Fix a regression where only debian/ changes were being committed in CVS
+      repos.  Thanks to Thomas Parmelan for the patch.  (Closes: #563918)
+    + Change '~' in version numbers to '.' when tagging in git.  Thanks to
+      Damyan Ivanov.  (Closes: #564075)
+    + Treat darcs similar to hg with respect to determining the commit
+      message.  Fold a single change into one line and spawn an editor if
+      multiple changes are detected.  (Closes: #563901)
+    + Ensure the commit message presented to the user for editing always has
+      an EOL on the last line.
+  * rmadison:
+    + Add http://qa.debian.org/cgi-madison/madison.cgi, shorthand "udd", as a
+      known madison URL.
+    + Detect an existing '?' in a URL and use '&' to append more cgi
+      parameters.  Thanks to Raphael Geissert.
+  * chdist:
+    + Add "use strict" and update for compliance.
+    + Use Dpkg::Version to perform version comparisons.
+  * Devscripts::Versort: Use Dpkg::Version::version_compare instead of
+    invoking “dpkg --compare-versions”.
+  * debian/control:
+    + Update Vcs-* to point to the new Git repository.
+    + Remove Conflicts on kdesdk-scripts from Etch.
+    + Bump Standards-Version to 3.8.4 -- no changes necessary.
+  * dcmd: Allow capital letters for the section and priority fields.  (Closes:
+    #565159)
+  * debcheckout: Ensure "/git/" is at the start of the URL's path when
+    performing an authenticated clone of an Alioth git repo.
+  * uupdate:
+    + Fix a typo which caused redirection of stdout to a file name "@".
+      (Closes: #569062)
+    + Add support for xz compressed archives/patches and 7z archives.  Thanks
+      to Hideki Yamane for the patch.  (Closes: #568615)
+    + Clarify wording when neither a diff nor a debian.tar is found.  (Closes:
+      #575820)
+  * Update descriptions of debcommit to include darcs as a supported VCS.
+    (Closes: #570138)
+  * debchange:
+    + Add maverick as a valid distribution.  Thanks to Benjamin Drung for the
+      patch.  (Closes: #576287)
+    + Treat a trailing '+' like a trailing '~' when incrementing the version
+      number.  (Closes: #521642)
+  * debuild: Expose two new variables (epoch-less source version, and upstream
+    version) to hooks.  Thanks to gregor herrmann for the patch.  (Closes:
+    573092)
+  * checkbashisms: Detect more Bash builtins -- readarray, mapfile, enable.
+    (Closes: #568473)
+  * dd-list: Clarify that --dctrl simply changes the expected format of the
+    list of packages.  Thanks to Adeodato Simó for the suggestion.  (Partially
+    addresses #509983)
+  * Add bash completion of package names for various Devscripts commands.
+    Thanks to Simon Paillard for the patch.  (Closes: #507776)
+  * Document in dscverify(1) that /usr/share/keyrings/debian-maintainers.gpg
+    is one of the default keyrings.
+  * dget: Add description of the use of dscverify to the description in the
+    man page.  (Closes: #537367)
+  * Add support for working with/recognizing xz archives to debchange,
+    debdiff, debuild, uscan.
+  * Use standalone “set -e” lines in maintainer scripts.
+  * Add debian/source/format with "3.0 (native)".
+
+  [ Patrick Schoenfeld ]
+  * nmudiff: Fix "[nmudiff] please include --tagpending option" by applying the
+    patch from Gregor Herrmann. Thanks. (Closes: #559549)
+  * build-rdeps:
+    + Add some documentation to the manpage, which emphasizes on the fact that
+      the tool has some external dependencies (namely apt Sources files)
+    + Add a proper argument passing to test_for_valid_component() so that
+      it really gets the filename and not the Release file entry.
+    + Add a check to test_for_valid_component() to test if a given Sources
+      file actually exists and otherwise print a more meaningful warning.
+      (Closes: #564443)
+
+  [ Adam D. Barratt ]
+  * debchange: Sanitise list of distributions.  Remove {sarge,etch}-backports
+    and sarge-volatile, none of which accept uploads any more.
+
+  [ Martin Zobel-Helas ]
+  * checkbashisms: Fix typo spotted by Dann Frazier. (Closes: #575554)
+
+ -- James Vega <jamessan@debian.org>  Mon, 05 Apr 2010 23:00:39 -0400
+
+devscripts (2.10.61) unstable; urgency=low
+
+  * bts: Correct the address used to email the submitter when using the "bts
+    done" command.
+
+ -- James Vega <jamessan@debian.org>  Sat, 02 Jan 2010 22:20:19 -0500
+
+devscripts (2.10.60) unstable; urgency=low
+
+  The "Welcome to the New Year" release.
+
+  [ James Vega ]
+  * checkbashisms: Detect use of {x..z} expansion.  Thanks to Raphael
+    Geissert.  (Closes: #560774)
+  * who-uploads: Show usage if no arguments are given.  Thanks to Kumar
+    Appaiah.  (Closes: #560955)
+  * uscan:
+    + Add missing escape of '\' in man page.  Thanks to Marco Túlio Gontijo
+      for the patch.  (Closes: #562587)
+    + Add missing verb in description of FTP syntax.  Thanks to Marco Túlio
+      Gontijo for the patch.  (Closes: #562586)
+  * annotate-output: Allow specifying a timestamp format.  (Closes: #539720)
+  * bts:
+    + Always include "thanks" at the end of the control block.  (Closes:
+      #542962)
+    + Allow specifying which fields will be shown by "bts status".  (Closes:
+      #499283, #323782)
+    + Add "verbose" option to "bts status", which will also show fields that
+      don't have a set value.
+    + Add "done" command which sends a close command as well as Ccing the bug
+      submitter.  (Closes: #482751)
+  * build-rdeps:
+    + Add --origin option to specify which origin to use.
+    + Use the Release file to determine which Sources file(s) to search for
+      the given origin.  Thanks to Michael Schutte for the patch.  (Closes:
+      #545115)
+
+  [ Patrick Schoenfeld ]
+  * licensecheck: Add support for some common variants of the WTFPL
+
+  [ Ryan Niebur ]
+  * deb-reversion: Fix use with recent dpkg-dev, thanks to Salvatore
+    Bonaccorso (Closes: #559702)
+
+  [ Adam D. Barratt ]
+  * Bump Standards-Version to 3.8.3.  No changes required.
+  * build-rdeps: Correct spelling error in manpage ("ommitted" -> "omitted").
+  * checkbashisms: Correct spelling error in manpage ("preceeded" ->
+    "preceded").
+  * decbommit: Correct spelling error in manpage ("commiting" ->
+    "committing").
+
+ -- James Vega <jamessan@debian.org>  Fri, 01 Jan 2010 23:30:33 -0500
+
+devscripts (2.10.59) unstable; urgency=low
+
+  [ James Vega ]
+  * debrelease: Do not use .svn/deb-layout to determine debsdir if --debs-dir
+    was used.  (Closes: #558172)
+  * checkbashisms: Fix a false positive detection of ". $(foo bar)/baz" as
+    attempting to pass arguments to a sourced script.  (Closes: #557639)
+
+  [ Joachim Breitner ]
+  * debcommit: Add support for having only debian/ under a svn, cvs or darcs
+    VCS (Closes: #450878)
+
+ -- James Vega <jamessan@debian.org>  Tue, 01 Dec 2009 00:16:53 -0500
+
+devscripts (2.10.58) unstable; urgency=low
+
+  * who-uploads: Correct the argument to wget's -O option.  Thanks to
+    Yves-Alexis Perez for the patch.  (Closes: #557507)
+
+ -- James Vega <jamessan@debian.org>  Sun, 22 Nov 2009 09:16:03 -0500
+
+devscripts (2.10.57) unstable; urgency=low
+
+  [ James Vega ]
+  * debcommit: Fix gathering of "Closes" with dpkg >= 1.15.5.2.  (Closes:
+    #557318)
+
+  [ Ben Finney ]
+  * Tighten default dirname regex to match a version only if it contains
+    at least one character: ‘PACKAGE(-.+)?’.  (Closes: #521126)
+
+ -- James Vega <jamessan@debian.org>  Sat, 21 Nov 2009 18:01:28 -0500
+
+devscripts (2.10.56) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * debchange: Update the list of known Ubuntu distributions, adding
+    lucid (lynx) and removing gutsy.
+
+  [ James Vega ]
+  * mk-build-deps:
+    + Use Pod::Usage to generate the --help message.  This keeps the message
+      in sync with the POD instead of keeping two different texts in sync.
+      (Closes: #548245)
+    + Skip comment/blank lines when parsing the control file.  (Closes:
+      #549402)
+  * debchange:
+    + Based on a scan of the lintian lab, add '.', '!', and ':' to the set of
+      punctuation characters we strip from the distribution name when we parse
+      an "Upload to ..." line.  (Closes: #548171)
+    + Consistently use “--nomainttrailer” in the manpage.  (Closes: #544351)
+  * debuild:
+    + Recognize dpkg-source's -z/-Z options.  (Closes: #553205)
+    + Remove references to pbuilder-satisfydepends.  Suggest mk-build-deps
+      instead.  (Closes: #446318)
+  * debcommit:
+    + Handle the split up of Dpkg::Changelog in Dpkg 1.15.5.2.
+    + Use Dpkg::Changelog::Parse, if available, instead of shelling out to
+      dpkg-parsechangelog.
+    + Remove use of deprecated L<> markup for pod2man.
+  * who-uploads: Set a 30 second timeout when invoking wget instead of using
+    wget's default 900 second timeout.  (Closes: #541732)
+  * debsign: Update the dcut reference to point to ftp.upload.debian.org
+    instead of ftp-master.debian.org.
+  * debrelease:
+    + Support using buildArea from .svn/deb-layout.  (Closes: #456226)
+    + Change to the package root directory before verifying the existence of
+      debsdir.
+  * bts: Remove use of deprecated L<> markup for pod2man.
+
+  [ Ryan Niebur ]
+  * add w3m to suggests for grep-excuses -w, check for it at runtime too
+    (Closes: #551516)
+  * mk-build-deps: allow passing options to the command in
+    MKBUILDDEPS_TOOL. Setting MKBUILDDEPS_TOOL="aptitude --schedule-
+    only" in ~/.devscripts should work now. (Closes: #547164)
+  * mergechanges:
+    + if both input files have the same file listed but with
+      different checksums, keep the first and get rid of the one from the
+      second.
+    + make trailing whitespace consistent with how 'normal'
+      .changes file are
+
+  [ Patrick Schoenfeld ]
+  * debchange:
+    + Include patch from Mathieu Parent to allow --newversion to be mixed
+      together with --package. (Closes: #549469)
+
+  [ Stefano Zacchiroli ]
+  * debcheckout: Set user.name and user.email in the checked out repository if
+    it is a git repo.  (Closes: #555025)
+
+ -- James Vega <jamessan@debian.org>  Fri, 20 Nov 2009 00:28:13 -0500
+
+devscripts (2.10.55) unstable; urgency=high
+
+  * Urgency "high" for security fix fix
+
+  [ Ryan Niebur ]
+  * uscan: fix a regression from the security fix when the command is
+    given parameters. use Text::ParseWords::shellwords to parse the
+    given command.
+  * dch: fix comparison of versions when the new and current version are
+    the same (Closes: #545099)
+
+  [ Adam D. Barratt ]
+  * bts: Refer to the "--no-ack" option rather than the incorrect "--no-acks"
+    in the description of the BTS_SUPPRESS_ACKS variable.  Thanks, Jakub
+    Wilk.  (Closes: #542961)
+  * licensecheck: Add missing blank line in POD.  Thanks, Nicolas Francois.
+  * uscan: Fix regressions introduced by the security fix in the previous
+    upload.  The parser now correctly keeps track of the last match when /g
+    is used to avoid infinite loops.  Thanks, Raphael Geissert and Martín
+    Ferrari.  (Closes: #544931)
+  * l10n updates; thanks, Nicolas Francois:  (Closes: #545327)
+    + Update French manpage translations
+    + Fix addendum format for dcontrol in po4a/devscripts-po4a.conf
+    + Use --previous when invoking po4a
+  * debian/control: Bump version of po4a build-dependency to 0.31 to ensure
+    support for --previous.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Fri, 11 Sep 2009 10:02:52 +0100
+
+devscripts (2.10.54) unstable; urgency=high
+
+  * Urgency "high" for security update
+
+  [ James Vega ]
+  * debchange: Clarify the wording for the explanation of
+    --force-save-on-release.  (Closes: #539155)
+  * grep-excuses: Document that -w only works with a package name.
+  * manpage-alert: Fix handling of commands which start with non-word
+    characters.  Based on a patch from Ville Skyttä.
+  * bts: Add support for the limit command.  (Closes: #541698)
+  * tagpending: Use 'bts limit source ...' instead of 'bts package ...' and
+    listing every binary package the source produces.  This will prevent
+    tagpending emails from exceeding the 998 characters per line limit of
+    email.
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Make "tags NNNNNN =" operate correctly again.  (Closes: #539688)
+    + Use >& rather than writing to filehandles under /dev/fd.
+      (Closes: #517917)
+  * cowpoke:
+    + Update to new upstream version
+      - Run with reduced privileges and only elevate them when needed to
+        run cowbuilder.
+      - Don't explicitly pass a buildd username unless it is set, this allows
+        people to configure the remote username in their ssh config or
+        similar.  (Closes: #538191)
+      - Supply pbuilder with the --buildplace and --aptcache options to
+        enable use with reduced privileges.
+      - Relative paths are all relative to the BUILDD_USER's home directory
+        now, not the incoming dir.
+      - Add --dpkg-opts support for passing options on to dpkg.
+      - Autoclean the apt-cache so it doesn't grow unbounded.
+  * dcmd: Add filtering options for udebs.  (Closes: #541827)
+  * debchange: Don't output spurious characters when extended Unicode
+    characters are passed on the command line.  (Closes: #542484)
+  * dget: Update the dpkg-source output matching to enable --build to work
+    again.  (Closes: #541409)
+  * uscan: Evaluate mangle rules without evaluating them directly as Perl
+    code to avoid the possibility of remote code execution.  This is
+    CVE-2009-2946.  As a side effect, (Closes: #515209)
+  * Packaging changes: Add sensible-utils to Recommends.  Several scripts
+    make use of sensible-editor and it has moved from debianutils so is
+    no longer essential.  (Closes: #541846)
+
+  [ Patrick Schoenfeld ]
+  * Add an example for githubredir.debian.net to the uscan manpage
+    (Closes: #539923)
+
+  [ Christoph Berg ]
+  * debdiff: New option --no-unpack-tarballs to skip unpacking tarballs
+    contained in source packages.
+
+  [ Ryan Niebur ]
+  * uscan: add --download-current-version option (Closes: #539724)
+  * Add myself to Uploaders
+  * debchange: add support for using --package with -i to change the
+    source package name (Closes: #515885)
+  * debcheckout: use bzr+ssh instead of sftp, thanks to Colin Watson for
+    the patch (Closes: #526068)
+  * debchange: remove NMU version when -i is ran without -n or auto nmu
+    (Closes: 487323)
+  * uscan: add support for repacking lzma compressed tarballs, thanks to
+    Michal Čihař for the patch (Closes: #514504)
+  * namecheck: use comments instead of pod blocks so that they don't get
+    translated, thanks to Florentin Duneau for the patch (Closes:
+    #529062)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 02 Sep 2009 20:22:29 +0100
+
+devscripts (2.10.53) unstable; urgency=low
+
+  The "Debconf fish!" upload
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Add a missing "use IO::File" to make "bts select file:foo" work.
+      Thanks, Raphaël Hertzog.  (Closes: #538288)
+    + Add the "affects" command to mark a bug as affecting packages other
+      than the package it was filed against.
+  * checkbashisms: Detect the use of "source" when the sourced filename
+    contains a tilde (Closes: #528592) or consists of a single character
+    (Closes: #535252).  Thanks, Raphael Geissert and Ryan Niebur.
+  * debcommit: Add darcs support.  Thanks to Joachim Breitner for the patch.
+    (Closes: #536037)
+  * nmudiff:
+    + Fix specification of BCc to control@bugs so that it's interpreted
+      as an option to mutt and not as a recipient address.  Thanks, Filippo
+      Giunchedi.  (Closes: #534585)
+    + Add a missing "feel" to the delayed/XX template.  Thanks, Raphael
+      Geissert.
+  * rmadison:
+    + Add patch from Ubuntu to make lookups against their database work again.
+      (The server moved from people.ubuntu.com to people.canonical.com)
+      (Closes: #537302)
+    + When using curl, follow redirects by default.  (Also from the Ubuntu
+      patch).
+  * debian/control: Replace descriptions of cvs-* with those from README,
+    because they're better.
+
+  [ Patrick Schoenfeld ]
+  * bts: Implement a --mutt parameter, which allows mails to be sent
+    using mutt.
+  * debchange: Implement a dist indication mechanism that parses
+    an 'Upload to $DIST' line and sets the distribution accordingly, when
+    the --release parameter is used. (Closes: #515346)
+  * debi:
+    + Implement a --with-depends switch to install depencies of the
+      package together with the package
+      (Closes: #511061)
+    + Implement a --tool switch to choose the tool for installing
+      dependencies
+  * dget: Make it clear in manpage and usage information, that dget is capable
+    of processing several URLs or packages (Closes: #535977)
+  * dscverify:
+    + Implement a --verbose option to disable suppressing
+      of GPG output (Closes: #525670)
+    + Add a notice to the manpage of dscverify that the debian-keyring package
+      has the potential to be out of date and how this can be worked around
+      (Closes: #438679)
+    + Document standard keyring locations in the dscverify manpage
+  * licensecheck: Skip empty files instead of reporting that they don't
+    have a copyright (Closes: #535337)
+  * nmudiff: Use 'bts select' to test, weither a check already has a patch
+    tag set or not and only set it, if not (Closes: #519678)
+  * Add a script listing to devscripts.1 which is auto-generated from
+    debian/control (Closes: #504008)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 29 Jul 2009 15:12:24 +0100
+
+devscripts (2.10.52) unstable; urgency=low
+
+  * debdiff: Make --diffstat work again; accidentally broken in 2.10.48.
+  * uupdate: Fix invocation of *cat when attempting to apply diffs.
+    Thanks, Yannick Roehlly.  (Closes: #533415)
+  * debian/control: Update Standards-Version to 3.8.2 (no changes needed)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 17 Jun 2009 19:39:33 +0100
+
+devscripts (2.10.51) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Add a note to the description of --smtp-server explaining that
+      reportbug.debian.org does not support relaying and is therefore not a
+      suitable server to use in circumstances where $package@packages.d.o
+      may be automatically Cced.
+    + Ignore the --{force-,}interactive options when combined with -n.
+      (Closes: #531422)
+  * checkbashisms:
+    + Detect shellscript wrappers that use "then" or "else" before calling
+      exec.  Thanks, Raphael Geissert.  (Closes: #530815)
+    + Fix a false positive detection of ". $(foo bar)" as attempting to pass
+      arguments to a sourced script.  Thanks, Raphael Geissert.
+    + Detect use of passing arguments to a sourced script as part of a
+      conditional statement.  Thanks, Raphael Geissert.
+    + Correctly count the number of quotes in a line when detecting whether
+      we are currently inside a "quoted block".  Thanks, Raphael Geissert.
+      (Closes: #531247)
+    + Do not check the contents of a dpatch.  The wrapper script always uses
+      /bin/sh and we can't detect the interpreter of a patch.
+    + Improve the check for the use of $[] inside quoted text.  Thanks,
+      Raphael Geissert.
+    + Apply the "common lead-in text" to the "readonly" check.
+    + Remove "\\" from the list of unsafe backslash escapes, as it appears to
+      work in all shells.
+  * dcmd: Parse changes / dsc files containing section or priority entries of
+    "-".  (Closes: #531593)
+  * licensecheck: Fix an error in a regular expression which led to an
+    uninitialized value warning and missing version for some GPL headers.
+    Thanks, Jakub Wilk.  (Closes: #531059)
+  * uscan: Make a regular expression example in the manpage clearer.  Thanks,
+    Jason Heeris.  (Closes: #530362)
+  * uupdate: Add support for .lzma compressed tarballs and diffs.  Thanks to
+    Simon Richter for the patch.  (Closes: #531570)
+
+  [ James Vega ]
+  * bts: Only Cc $package@packages.debian.org if we're reasonably sure we have
+    an email body instead of simply control messages; i.e., if the user
+    specifies the --force-interactive option or the --interactive option and
+    chooses to edit the email body.  (Closes: #530926)
+  * uscan: Log the correct filename when running the post-download action.
+    Simplify the surrounding logic so the logging and command are less likely
+    to get out of sync in the future.
+
+  [ Mohammed Adnène Trojette ]
+  * pts-subscribe: refer to bsd-mailx rather to the transitional mailx
+    package. Thanks Ansgar Burchardt for the patch. (Closes: #531332)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 15 Jun 2009 18:57:20 +0100
+
+devscripts (2.10.50) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * chdist: Make --data-dir work with relative paths.  (Closes: #528254)
+  * debchange: Add karmic (koala) to the list of recognised Ubuntu
+    distributions.
+  * debsnap: Fix mktemp call to use a sufficient number of Xs in the template
+    string (Closes: #528193) and use -t rather than hard-coding /tmp.
+  * debuild: Use printf when parsing the DEBUILD_LINTIAN_OPTS configuration
+    file variable, to avoid eating -E.  (Closes: #527027)
+  * mass-bug: Add an option to specify that the supplied package names are
+    those of source packages rather than binary packages.  Based on a patch
+    by Felipe Sateler.  (Closes: #527396)
+  * rc-alert: Use standard single quotes in the debtags section of the manpage
+    to avoid odd formatting and warnings from man
+  * uscan: Pass -n to gzip when repacking bz2 files to ensure consistent
+    checksums.  Thanks, Damyan Ivanov.  (Closes: #504672)
+
+  [ Christoph Berg ]
+  * dget: -u implies dpkg-source --no-check. Also, force LC_ALL=C to correctly
+    capture dpkg-source output with --build.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Thu, 21 May 2009 21:50:18 +0100
+
+devscripts (2.10.49) unstable; urgency=low
+
+  * debchange:
+    + Use == for numeric comparison, not eq.
+    + Mention in the help output and manpage that a dummy changelog entry
+      may be supplied in conjunction with --release in order to avoid
+      spawning an editor.
+    + Add a configuration variable and command line option to allow the
+      recent change to --release's "auto-save" behaviour to be disabled.
+      For consistency with other debchange options, the default is to
+      retain the behaviour introduced in 2.10.48 - i.e. that the changelog
+      must be explicitly saved after the use of --release. (Closes: #524393)
+  * debcommit: If the installed version of dpkg-dev supports retrieving a
+    list of appropriate bugs, automatically generate bzr --fixes arguments
+    for Launchpad bugs as well as Debian bugs.  Thanks, Colin Watson.
+    (Closes: #525823)
+  * debsign: Make the PGP signing method work again.  Thanks, Florian Weimer.
+    (Closes: #518821)
+  * getbuildlog: Add a missing "use lib" to allow the special "last" and
+    "last-all" versions to work correctly.  Thanks, Iustin Pop.
+    (Closes: #523982)
+  * licensecheck: Add detection of the AGPL.  Thanks, Didier Raboud.
+    (Closes: #520903)
+  * namecheck: Fix the formatting of a number of POD strings, also making
+    them easier to translate.  Thanks, Florentin Duneau.  (Closes: #526047)
+  * rc-alert:
+    + Allow the generated list of bugs to be restricted to those affecting
+      packages with particular debtags facets.  Thanks, Jan Hauke Rahm.
+     (Closes: #523523)
+    + Allow the generated list of bugs to be sorted using popcon results.
+      Thanks, Jan Hauke Rahm.  (Closes: #478833)
+  * rmadison: Allow a default URL to be specified in the configuration file.
+    Thanks, Roland Mas.  (Closes: #524198)
+  * uscan: Remove a superfluous and repeated copy of the site name in an FTP
+    error message.  Thanks, Vaclav Ovsik.
+  * Makefile: Remove cruft relating to French manpages, which has been handled
+    by the po4a setup for a while now.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 02 May 2009 19:34:55 +0100
+
+devscripts (2.10.48) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * Update Standards Version to 3.8.1 (no changes required)
+  * debchange: Fix a couple of syntax errors in the "does an orig tarball
+    exist?" test introduced for #500932.
+  * debdiff:
+    + Don't bail if diff returned an exit status of 2 when comparing
+      files. If there are binary files in either of the trees being compared
+      then that's expected as the files can't be reliably compared.
+    + Don't claim that the exit status on failure will be anything other than
+      255 (i.e. the result of die()ing).
+  * nmudiff: Adapt to handle the fact that debdiff will now return an exit
+    status of 1 when comparing non-identical source packages.
+  * debian/copyright: Explicitly refer to the GPL-2 and GPL-3 common license
+    files rather than the "GPL" symlink.
+
+  [ Patrick Schoenfeld ]
+  * debchange: When renaming a directory (because of version change)
+    and noticing that no matching orig tarball exist, emit a warning.
+    (Closes: #500932)
+  * uscan: Use maximum compression rate while repacking files from bzip2/zip
+    into gzip. Thanks Nelson A. de Oliveira.
+    (Closes: #522442)
+
+  [ James Vega ]
+  * debchange: As per the other edit flags, do not modify the original
+    changelog when using `debchange -r' unless the user saves the temporary
+    changelog.  (Closes: #422450)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 12 Apr 2009 16:11:40 +0100
+
+devscripts (2.10.47) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * dcontrol: Produce "friendly" error messages if liburi-perl and/or
+    libwww-perl aren't installed.
+  * debdiff:
+    + Don't treat an absence of differences as an error when comparing
+      source packages. (Closes: #515683)
+    + Set the exit status correctly when comparing source packages.  If
+      differences were found, debdiff will now exit with a status of 1, as
+      per debdiff(1).
+    + Support bzip2 and lzma compressed orig tarballs. (Closes: #473969)
+  * debuild: Support bzip2 and lzma compressed orig tarballs.
+    (Closes: #473974)
+  * licensecheck:
+    + Document --no-conf.
+    + Fix an uninitialised variable warning when --no-conf is used. Thanks.
+      Cristian Greco. (Closes: #515047)
+  * nmudiff:
+    + Rework the arguments passed to mutt in order to avoid problems
+      attaching the diff with recent versions of mutt.  Thanks, Adeodato
+      Simó. (Closes: #518127)
+    + Allow the specification of a particular DELAYED queue, rather
+      than including the "DELAYED/XX" placeholder.  May be specified as
+      0 to remove mention of DELAYED. (Closes: #518126)
+  * rc-alert: Modify the description of the "I" flag to reference the
+    squeeze-ignore tag rather than etch-ignore.
+  * debian/control, README: Add liburi-perl to the description of dcontrol.
+
+  [ James Vega ]
+  * bts: Include the module name when calling MIME::Base64::encode_base64
+    since MIME::Base64 is only being 'require'd not 'use'd.  Thanks Євгеній
+    Мещеряков. (Closes: #516117)
+  * debchange: Do not use an empty gecos field when trying to determine the
+    maintainer's name. (Closes: 516423)
+
+  [ Christoph Berg ]
+  * dcontrol: New script to query binary and source package control files at
+    http://qa.debian.org/cgi-bin/dcontrol.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 04 Mar 2009 19:23:24 +0000
+
+devscripts (2.10.46) unstable; urgency=low
+
+  * bts:
+    + If the debbugs host in use is bugs(-*).d.o, use bugs-master.d.o when
+      reporting spam to match recent changes to the BTS.
+    + If -n / --no-action was given on the command line, print the URL that
+      would have been used to report spam rather than sending the report.
+    + Accept the new "squeeze" and "squeeze-ignore" tags.
+  * debchange:
+    + Add lenny-backports and lenny-volatile to the list of recognised
+      distributions. (Closes: #514818)
+    + Don't accept "sarge", "etch" or "lenny" as valid distributions. dak
+      requires suite names (e.g. "stable") rather than codenames.
+    + Modify --bpo to produce a changelog suitable for uploading to
+      lenny-backports rather than etch-backports by default.  If the latest
+      changelog entry is for an etch backport, a new etch-backports stanza
+      will be produced instead.
+  * licensecheck:
+    + Remove C /* */ comments. Based on a patch by Jörg Sommer.
+    + Identify another couple of forms of GPL wording. (Closes: #514811)
+    + Add .xs (Perl XS files) and .vala (GNOME Vala source files) to the
+      default list of files to process. (Closes: #513770, #514337)
+    + Fix a bug in a regular expression which meant that .h files weren't
+      included in the default list of files to search.
+    + Add support for the Boost, Python and zlib/libpng licenses. Thanks,
+      Cristian Greco. (Closes: #514812)
+  * README.newscripts: Correct the "svn propset" syntax added in the previous
+    upload.
+  * debian/lintian.overrides: New file to allow us to override lintian
+    thinking that the mention of snapshot.debian.net in debsnap's description
+    is a reference to an upstream homepage.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Thu, 12 Feb 2009 19:19:16 +0000
+
+devscripts (2.10.45) unstable; urgency=low
+
+  [ Patrick Schoenfeld ]
+  * debsnap: Added new script from Ron Lee and David Paleino,
+    which grabs source packages from snapshot.debian.net.
+    (Closes: #511345)
+  * Add a hint to README.newscripts that new scripts might need a modification
+    to debian/copyright
+
+  [ Adam D. Barratt ]
+  * debchange:
+    + When adding a NEWS item, automatically propagate the urgency from the
+      changelog. (Closes: #511911)
+    + Make -v and -l interoperate with NEWS files properly again.
+  * debcheckout: Fix a typo and perform some QA on the manpage.
+  * debdiff: Default to comparing source packages in the order they were
+    passed on the command line once more, rather than using the "automagic
+    version sorting" introduced in 2.10.41.  The new DEBDIFF_AUTO_VER_SORT
+    configuration file option allows the default behaviour to be controlled.
+    (Closes: #512290)
+  * debsign: Add further quoting around the use and generation of temporary
+    directory names, in case $TMPDIR contains spaces.
+  * mergechanges: Correct spelling of "parameters". Thanks, Kumar Appaiah.
+    (Closes: #512164)
+  * README.newscripts: Add a note about marking the script file as executable
+    in the repository.
+
+  [ James Vega ]
+  * bts: Document correspondent and affects keys for select command.
+  * debcheckout:
+    + Filter TopGit branches out of the list of branches given to
+      --git-track since "tg populate" already created them.
+    + Determine the actual HEAD ref to skip when first cloning a git repo
+      instead of assuming it is master.  This ensures branches don't get
+      skipped when specifying extra branches to track with --git-track.
+    + Correct the Vcs-* example for Vim.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 21 Jan 2009 19:41:48 +0000
+
+devscripts (2.10.44) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Allow an alternative debbugs server to be specified. (Closes: #508676)
+    + Modify "bts status" to request source package information, so that we
+      don't always return "unknown".
+    + Don't issue repeated "user foo" commands for the same user.
+    + Remove excess whitespace from usertag commands.
+  * checkbashisms:
+    + Rework the comment detection code to avoid matching "$#" and to avoid
+      a number of similar issues. (Closes: #510343)
+    + Flag the use of "source" with an unquoted argument containing no path
+      information. (Closes: #510345)
+  * Debbugs.pm: Allow the address of the debbugs server to be specified
+    rather than hard-coding bugs.debian.org.
+  * debchange:
+    + Correctly increment bpo version numbers.
+    + Attempt to do the right thing (or at least something sensible) if the
+      package version ends in a tilde. (Closes: #510313)
+  * debdiff:
+    + Fix a couple of formatting issues in the manpage.
+    + Mention --{no-,}diffstat in the help message.
+    + Don't treat "DEBDIFF_SHOW_DIFFSTAT=no" as a modification from default
+      settings.
+  * licensecheck:
+    + Add .cs (C# source files) to the default list of files to check.
+      (Closes: #508163)
+    + Detect the CDDL license. Thanks to Mike Hommey for the patch.
+      (Closes: #510574)
+  * uscan: Improve parsing of non-HTMLised FTP directory listings so that
+    "foobar.tar.gz" doesn't match a request for "bar.tar.gz".
+  * conf.default.in:
+    + Use the new reportbug.debian.org as an example SMTP host for bts
+      rather than bugs.debian.org.
+    + Add BTS_SERVER.
+
+  [ Christoph Berg ]
+  * dscverify: Accept -u as an alias for --nosigcheck, inspired by dput -u.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 05 Jan 2009 19:20:04 +0000
+
+devscripts (2.10.43) unstable; urgency=low
+
+  The "how did I miss that one?" release
+
+  * debsign: Fix a use of mktemp to actually generate unique filenames.
+    (Closes: #508111)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 08 Dec 2008 06:32:18 +0000
+
+devscripts (2.10.42) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * checkbashisms: Fix a variable redeclaration warning. Thanks,
+    Neutron Soutmun. (Closes: #506975)
+  * cvs-deb{i,release}: Use mktemp rather than a temporary directory
+    name based on the process ID.
+  * debi: Add an "upgrade" option indicating that only those packages
+    already installed on the system should be installed, rather than
+    all packages listed in the .changes file. Thanks, Colin Watson.
+    (Closes: #506663)
+  * debsign:
+    + Use mktemp rather than a temporary directory name based on the
+      process ID. (Closes: #507482)
+    + Use temporary files rather than redirecting gpg's stdin and stdout,
+      enabling the use of pinentry-gtk2. (Closes: #507479)
+  * uscan:
+    + Remove the downloads.sourceforge.net example from the manpage.
+      It no longer works due to changes in the website structure. Thanks,
+      Alexander Block.
+    + Be more intelligent with redirects and relative filenames. This should
+      help in situations where the watchfile contains http://example.com/foo
+      which is a redirect to http://example.com/foo/, with the latter
+      containing relative filenames.
+  * uupdate: Use mktemp rather than a temporary directory name based on
+    the process ID.
+
+  [ Christoph Berg ]
+  * rmadison: Add debug.debian.net.
+
+  [ Patrick Schoenfeld ]
+  * dget: Fix misspelt wget option (should be --no-cache instead of
+    --no-chache) (Closes: #507672)
+
+  [ James Vega ]
+  * debcheckout: Use B<> and I<> to denote the different options sections
+    instead of =head2/=head3 since the latter cause pod2usage not to display
+    any options when running debcheckout -h.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 07 Dec 2008 17:04:52 +0000
+
+devscripts (2.10.41) unstable; urgency=low
+
+  [ Patrick Schoenfeld ]
+  * build-rdeps:
+    + Make default pattern for source files match on codename
+      as well as suite (unstable, sid)
+    + Add a --exclude-component parameter which can be specified
+      multiple times to exclude certain components (e.g. main, contrib,
+      non-free).
+    + Add missing documentation of the --only-main param in
+      the manpage
+    + Update author email address
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Don't attempt to iterate the list of bugs returned by "bts status"
+      if it's empty, thereby avoiding a "Can't use string ("") as a HASH
+      ref" error.
+    + Correctly handle only one argument being passed to "block" or
+      "unblock".
+  * checkbashisms:
+    + Add an updated check for $'' which is much less prone to false
+      positives. Thanks Filippo Giunchedi. (Closes: #504292)
+    + Add an updated check for $"" based on Filippo's $'' patch.
+  * dcmd: Allow only a subset of the files listed in the .changes / .dsc
+    file to be selected. (Closes: #481415)
+  * Debbugs.pm:
+    + Really fix the special-casing of the "archive" key in select() to
+      get rid of an uninitialized value warning.
+    + Check whether a SOAP call returned a valid value before attempting to
+      call result() on it.
+    + Produce more useful error messages on failure. (Closes: #496013)
+  * debdiff: When comparing source packages, do so in version order rather
+    than the order the .dsc files were passed on the command line. (May
+    be disabled using --no-auto-ver-sort if desired.) (Closes: #505264)
+  * debsign: Support using DEBRELEASE_DEBS_DIR to specify the location
+    of .dsc and .changes files when called without an explicit path to
+    a file. Based on a patch by Philippe Le Brouster. (Closes: #502419)
+  * tagpending: If an error occurs retrieving the list of bugs for the
+    package, suggest using "--force" in order to tag all the bugs as
+    pending without attempting to query the BTS.
+  * po4a/po/fr.po: Remove a duplicated word and fix a typo. Thanks Franck
+    Joncourt. (Closes: #505786)
+
+  [ James Vega ]
+  * debcheckout:  Add support for working around repositories that don't
+    follow standard behavior (like bzr.d.o not running a smart server).
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 19 Nov 2008 19:32:43 +0000
+
+devscripts (2.10.40) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Update the manpage to mention local caching in the description
+      section and correct a typo. (Closes: #499397)
+    + Accept a command consisting purely of a comment. (Closes: #501252)
+  * cowpoke:
+    + Update to new upstream version
+      - Multiple architecture and distribution support.
+      - Options are now specified using --option rather than being listed
+        after the .dsc file.
+      - There is now a --create option to allow new build roots to be
+        easily created.
+      - There are two new configuration file options BUILDD_DIST (the
+        default distribution for which packages will be built) and
+        DEBOOTSTRAP, allowing one to specify which of {c,}debootstrap
+        should be used.
+      - The RESULT_DIR configuration variable has been replaced by
+        PBUILDER_BASE which points to pbuilder's base folder under which
+        architecture and distribution directories will be created.
+      - cowpoke.conf now supports per-arch and per-distribution options.
+  * debchange:
+    + Don't attempt to automatically determine if the current changelog is
+      an NMU if an alternative changelog location was specified using the
+      CHANGELOG environment variable.
+    + Update the Ubuntu distribution list. Add jaunty and remove the
+      no-longer supported warty, hoary, edgy and fiesty. Also add
+      "-backports" as a supported "extension".
+    + Modify the message produced by --closes to make it clearer that it 
+      is intended to be edited to add details of the bug and fix as 
+      appropriate. (Closes: #495743)
+  * debcommit:
+    + Allow --release to be combined with --edit or --confirm. Based on
+      a patch by Eric Gerlach. (Closes: #497988)
+    + Allow a newly initialised (i.e. containing no HEAD) git tree to be
+      committed to. Based on a patch by Eric Gerlach. (Closes: #497995)
+  * debdiff: Correctly handle hyphenated distribution names when generating
+    a diff against the previous version of the package. (Closes: #503950)
+  * getbuildlog:
+    + Apply some patches from Jörg Sommer (Closes: #496065)
+      - Unescape %7Es in log URLs to allow explicitly searching for 
+        package versions containing tildes.
+      - Simplify a couple of variable assignments and use shell string
+        operations to extract the version and architecture from the logs.
+    + Allow the logs for the build with the largest version number to be
+      easily retrieved. Based on a patch by Jörg Sommer.
+  * licensecheck: Match a couple more variants on the wording of a
+    3-clause BSD license. (Closes: #503378)
+  * nmudiff: Require an explicit confirmation as to whether the generated
+    mail should be sent, rather than defauling to not sending it.
+    (Closes: #483657)
+  * tagpending: Don't output a spurious empty line near the end of the
+    changelog comments under some circumstances.
+  * uscan:
+    + Document the USCAN_TIMEOUT configuration file variable.
+      (Closes: #502517)
+    + Add a USCAN_REPACK configuration file variable indicating that bzip
+      tar or zip archives should always be repacked to gzip tar archives.
+      (Closes: #502516)
+
+  [ Christoph Berg ]
+  * debian/control: Remove the Dm-Upload-Allowed flag.
+
+  [ Stefano Zacchiroli ]
+  * debcheckout:
+    + try to guess repository type when given raw URLs
+    + update user info about Vcs-* fields (correct developers' reference
+      section, add an URL to it)
+    + suggest using apt-get source as a fallback (Closes: #488717)
+    + add support to define custom rules for authenticated mode, this way
+      personal repos can benefit from '-a' (Closes: #501568)
+    + add -d/--details option to print extended information about
+      reopsitories, in machine parseable format. Implement dumping of
+      TopGit-specific information for TopGit-enabled GIT repositories
+    + initialize TopGit's automatically, for GIT repositories which are
+      recognized as being managed with TopGit (Closes: #499264)
+    + add --git-track option to require tracking of remote branches when
+      checking out GIT repositories (Closes: #499050)
+
+  [ Patrick Schoenfeld ]
+  * debsign: Unset GREP_OPTIONS to avoid problems when this variable is set
+    in the users environment. (Closes: #504017)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 05 Nov 2008 19:18:27 +0000
+
+devscripts (2.10.39) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Allow an explicit HELO to be specified when connecting via SMTP.
+    + If a HELO is not specified then attempt to use the content of
+      /etc/mailname instread.
+    + Expand on the definition of "claim" in the manpage. (Closes: #501142)
+    + Trim anything that doesn't look like an e-mail address from $DEBEMAIL or
+      $EMAIL before using it for un/claim or un/subscribe. (Closes: #501162)
+    + Update the documentation for "bts select" to make it clearer that
+      specifying a key multiple times gives "or" semantics. (Closes: #499434)
+  * checkbashisms:
+    + Recognise brace expansions containing a leading or trailing empty value
+      ("{,foo}", etc). Thanks Jonny Lamb. (Closes: #499971)
+    + Recognise the use of "source" with quoted arguments. (Closes: #501171)
+  * debdiff: Ensure exit status is always explicitly set (and set
+    correctly). (Closes: #500256)
+  * debian/rules: Create a link from the French pts-subscribe manpage
+    as pts-unsubscribe, so long as the former exists (i.e. has been
+    sufficiently translated).
+  * licensecheck: Add support for fortran and Scilab files and for detecting
+    the CeCILL and "SGI Free B" licenses. Thanks Sylvestre Ledru
+    (Closes: #501447)
+  * uscan: Allow --download-version to be more useful in situations where a
+    current upstream version higher than that to be downloaded has been
+    specified. Thanks James Westby. (Closes: #501932)
+
+  [ James Vega ]
+  * pts-subscribe: When called as pts-unsubscribe, send an unsubscribe request
+    to the PTS.  (Closes: #500585)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 12 Oct 2008 20:24:23 +0100
+
+devscripts (2.10.38) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * When upgrading from devscripts 2.10.36, remove the incorrectly 
+    created /etc/devscripts.con if it is present and add the affected 
+    section to /etc/devscripts.conf instead.
+  * tagpending: Re-add an accidentally removed blank line at the end
+    of the generated comments.
+
+  [ Patrick Schoenfeld ]
+  * mk-build-deps:
+    + Implement --install switch which installs a generated package and its
+      depends afterwards.
+    + Add an option --tool to specify which tool to use when installing the
+      packages (default: apt-get)
+    + Add an option --remove to specify that package files should be deleted
+      after installing it.
+    + Enable configuration file parsing
+    + Add a configuration option MKBUILDDEPS_TOOL to specify which tool shall
+      be used if the installation of the build-depends after creation is
+      requested.
+    + Add a configuration option MKBUILDDEPS_REMOVE_AFTER_INSTALL to configure
+      that package files shall always be removed after installing the
+      created packages and its build-depends.
+
+  [ Mohammed Adnène Trojette ]
+  * Comment out functions available only on Ubuntu. (Closes: #499884)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Tue, 23 Sep 2008 18:58:12 +0100
+
+devscripts (2.10.37) unstable; urgency=low
+
+  * Fix typo in postinst. (Closes: #499639)
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Sun, 21 Sep 2008 02:11:26 +0200
+
+devscripts (2.10.36) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Use a User-Agent header to indicate that the mail was sent via bts,
+      rather a comment in the body of the generated e-mail. Thanks Thijs
+      Kinkhorst and Josh Triplett. (Closes: #493884)
+    + Add a (largely undocumented) --toolname switch to allow tools calling
+      bts to add themselves to the User-Agent header.
+    + If the BTS specifies a character set when serving an HTML file, add an
+      equivalent META tag to the cached file so that it is rendered correctly.
+      (pkgreport.cgi's output is now UTF-8).
+    + Fix the cache file mangling for status mboxes, maintainer links, links
+      to resolved bugs, second and subsequent bug links and version graphs.
+      In the process (hopefully) make a number of the mangles more resilient
+      to BTS HTML changes.
+    + Mention in the manpage that BTS_ONLY_NEW corresponds to --only-new.
+    + Ensure that the "clone" command is always passed at least one new bug ID
+      (Closes: #497826) and that the new IDs are negative numbers.
+    + No longer automatically CC the generated mail to the bug address if a
+      comment was made. Similar functionality may be implemented in the BTS
+      at a later date but in the meantime we'll avoid creating noise in the
+      bug logs. (Closes: #497748)
+  * checkbashisms: Flag "read without variable" and "read with options other
+    than -r" separately to ensure that all uses are correctly matched. Thanks
+    to Frank Lichtenheld for pointing this out via a related bug in lintian.
+  * cowpoke: If BUILDD_ROOTCMD is set, use BUILDD_USER for debrsigning, rather
+    than root. Patch from Cyril Brulebois. (Closes: #495536)
+  * Debbugs.pm: Special-case the "archive" key in select(). The BTS really
+    doesn't like it being passed as an array. (Closes: #498201)
+  * debcommit:
+    + When committing to a bzr repository with a message including bug
+      closures, pass corresponding --fixes to bzr. Thanks James Westby
+      for the patch. (Closes: #496643)
+    + Fix a POD error.
+  * debdiff: Add an option allowing control files in debian/ in source packages
+    to be compared using wdiff.
+  * debsign: When copying .changes files from a remote host, attempt to process
+    each copied file if a wildcard was used in the filename (Closes: #491627)
+  * nmudiff: Add support for using $DEBFULLNAME as well as $DEBEMAIL when
+    generating the From: header for a sendmail-generated mail. Based on a
+    patch from Thomas Viehmann. (Closes: #496460)
+  * rc-alert: Fix missing characters in a couple of option names in the help
+    text.
+  * tagpending:
+    + Fix a typo in the help output. Thanks Thijs Kinkhorst. (Closes: #494131)
+    + Use the new "bts --toolname" switch instead of an in-body comment to
+      indicate that tagpending was used.
+    + Make the --wnpp option work again. Thanks gregor herrmann.
+      (Closes: #497820)
+  * uscan: Exit with the correct status when --watchfile was used.
+    (Closes: #498057)
+
+  [ Stefano Zacchiroli ]
+  * bts: add support for the fake "gift" tag. It is to be used as a shorthand
+    for the "gift" usertag, see http://wiki.debian.org/qa.debian.org/GiftTag
+
+  [ James Vega ]
+  * bts: Add new 'status' command which returns various bits of information
+    about the state of the given bugs.  Thanks to Don Armstrong for the patch.
+    (Closes: #494614)
+
+  [ Joey Hess ]
+  * bts: Add new 'summary' command.
+
+  [ Patrick Schoenfeld ]
+  * build-rdeps: Add a --distribution parameter to enable selection of
+    another distribution instead of unstable
+    (Closes: #471498)
+
+  [ James Vega ]
+  * uscan: Correct the <base ...> regex to be case-insensitive.  (Closes:
+    #495265)
+
+  [ Christoph Berg ]
+  * debsign: Fix debsign -r dir/*.changes, and do some QA on the manpage.
+    Continue with next file if an already existing signature is kept.
+  * dget: Make -q really quiet.
+
+  [ Mohammed Adnène Trojette ]
+  * nmudiff: Use a friendlier template inspired from Lucas Nussbaum's
+    patch. (Closes: #496628)
+  * namecheck:
+    + New script by Steve Kemp included to check project names are not
+      already taken. (Closes: #484271)
+    + Remove reference to a LICENSE file.
+    + Don't lose the project name during the check.
+  * bts: document that the cache auto-cleaning is overzealous on noatime
+    partitions. Patch from intrigeri <intrigeri@boum.org>. (Closes: #488486)
+
+  [ Colin Watson ]
+  * dpkg-depcheck: Remove -F in order to be compatible with current strace.
+    I'm not sure exactly when plain 'strace -f' started being able to follow
+    vfork on Linux, but it's at least as long ago as Debian 4.0, possibly
+    strace 4.4.93 which would place it before Debian 3.1, so a dependency
+    doesn't seem to be necessary. (Closes: #497955)
+
+  [ Patrick Schoenfeld ]
+  * Update my email address
+  * mk-build-deps: Automatically find debian/control if inside of a package
+    source tree and no argument is given
+
+  [ Luk Claes ]
+  * Update debsign for new commands of .commands (Closes: #498649).
+
+ -- Luk Claes <luk@debian.org>  Sat, 20 Sep 2008 18:37:41 +0200
+
+devscripts (2.10.35) unstable; urgency=low
+
+  * checkbashisms: Only flag "local x y" and "local foo=bar" when --posix is
+    used, as the use of the constructs is likely to become policy compliant
+    in the near future (see Policy bug #473019)
+  * debcommit: When --diff is used, don't open an editor to confirm commit
+    messages
+  * po4a/po/fr.po: Update French manpage translations; thanks Nicolas FRANCOIS
+    (Closes: #491001)
+  * who-uploads: Call "gpg --verify" with LC_ALL set to C to ensure that
+    the output is in the expected format (Closes: #492474)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 26 Jul 2008 21:57:20 +0100
+
+devscripts (2.10.34) unstable; urgency=low
+
+  * checkbashisms:
+    + Match the use of "shell echo -n" and "if foo then echo -n"
+    + Fix a thinko in the quoted-block detection (thankfully the effects were
+      largely benign, unless one was attempting to check libtool...)
+    + Fix false positives in the checks for "dirs", "popd", "pushd", "shopt"
+      and "ulimit" and the "echo with unsafe backslash", brace expansion and
+      invalid function name checks
+    + Fix a false-positive in the "source script with arguments check"
+    + Fix a false negative in the "function" check (Closes: #490223)
+    + Treat """" as "" when removing quotes
+    + Catch shell script wrappers which use "foo $0 $@ &\nexec true"
+    + Don't treat '. "a b"' as a sourced script being passed arguments
+    + Strip leading @s from makefile lines
+  * debchange:
+    + Also collapse UNRELEASED stanzas when -d is used
+    + Fix a typo ("ether") in the manpage; thanks Raphael Geissert
+  * debcheckout:
+    + Improve git repository handling with --file
+    + Fix directory naming when using -f and no explicit destination directory
+      was specified
+  * uscan:
+    + Parse sites which embed newlines inside hrefs (horrible, but works)
+    + Always treat patterns referring to FTP sites as case-sensitive rather
+      than a confusing (and broken) mixture of case-sensitive and
+      case-insensitive matching
+    + Correctly match directory names in HTMLised FTP proxy listings; the
+      equivalent change for filenames was applied in 2.10.11 (#448636)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Tue, 15 Jul 2008 19:24:29 +0100
+
+devscripts (2.10.33) unstable; urgency=low
+
+  The "bigger brown paper bag" upload
+
+  * bts, debchange, mass-bug: Revert the changes introduced in #486594.
+    "date -R" gives us a locale-independent string, strftime() doesn't.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 29 Jun 2008 13:36:35 +0100
+
+devscripts (2.10.32) unstable; urgency=low
+
+  * bts: Fix brown paper bag. When establishing an SMTPS connection, only use
+    the hostname, rather than the fully specified "ssmtp://hostname[:port]"
+    string
+  * chdist: Fix sed expressions in src2bin (Closes: #488422)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 28 Jun 2008 13:44:12 -0700
+
+devscripts (2.10.31) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts
+    + Replace the use of date -R with strftime(). Thanks Stephen Gran.
+    + Allow an SMTP host to be specified as using SMTPS and/or a
+      non-standard port number
+  * checkbashisms:
+    + Add a check for $UID being set to -x
+    + Apply a small fix to part of the "quoted block detection"
+    + Quote test expressions using qr to allow perl to optionally compile
+      or otherwise optimise them. Thanks to Frank Lichtenheld for the idea.
+    + Add a --posix option which flags constructs not supported by POSIX but
+      permitted by Debian Policy (echo -n, local (with no options or
+      assignments) and test / [ using -a or -o )
+    + Improve the suggested replacement for $UID and $EUID (Closes: #488190)
+  * Debbugs.pm: Move initialisation of the SOAP object in to a common routine
+    and set the underlying transport object to honour proxies from the
+    environment (Closes: #487592)
+  * debchange, nmudiff: Replace calls to date -R with strftime(). Thanks
+    Stephen Gran (Closes: #486594)
+  * debuild: Update the dpkg-buildpackage emulation to use whitespace as the
+    separator in DEB_BUILD_OPTIONS as per Debian Policy 3.8.0 and to print a
+    warning if an unrecognised option is encountered; based on the
+    corresponding patch to Dpkg::BuildOptions
+  * debsign: If we don't have permission to create files in the same location
+    as the originals, use a temporary location instead (Closes: #487999)
+  * licensecheck:
+    + Add .cxx and .hxx to the default list of file extensions to check
+      (Closes: #487384)
+    + Add _MTN (monotone) to the default exclusion expression
+  * rc-alert: Allow bugs matching specific sets of tags or applying to
+    specific distributions to be included or excluded from the list of
+    reported bugs (Closes: #487513)
+  * uscan:
+    + Add an example of a newer form of watch file syntax for SourceForge
+      based projects to the manpage
+    + If the site being checked redirects to another with a directory
+      structure that does not match the original site, check for download URLs
+      that refer to any of the redirected sites, in addition to the original
+      site. Based on a patch by Raphael Geissert (Closes: #487436)
+  * debian/control
+    + Suggest libnet-smtp-ssl-perl (>= 1.01-2) in order to allow bts to
+      support SMTPS. The versioned dependency is required in order to ensure
+      that a fixed libio-socket-ssl-perl is used.
+    + Add libnet-smtp-ssl-perl to the description of bts
+  * README: Add libnet-smtp-ssl-perl to the description of bts
+
+  [ James Vega ]
+  * Debbugs.pm
+    + Actually include the documented 'severity' key for the select
+      function.
+    + Fix some whitespace.
+  * who-uploads: Accept -M as a short form for --max-uploads
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 28 Jun 2008 10:24:56 -0700
+
+devscripts (2.10.30) unstable; urgency=low
+
+  * bts: MIME-encode the Subject: header of the generated mail in case it
+    contains any non-ASCII characters (Closes: #486395)
+  * checkbashisms:
+    + Apply a couple of small fixes to the "quoted block detection" and the
+      removal of quoted strings
+    + Temporarily disable the $"" and $'' checks as they're very prone to
+      false positives
+    + Fix typoes in the heredoc and popd checks (Closes: #486159)
+    + Fix a couple of small bugs in the "function name containing invalid
+      characters" and "read with options other than -r" tests
+  * debchange:
+    + Don't automatically open an editor when creating a new changelog if
+      a package name and version are supplied and either --empty was used
+      or the text of a changelog entry was supplied on the command line.
+      Based on a patch from Steve Magoun (Closes: #484334)
+    + Don't automatically add an "initial release" stanza to a newly created
+      changelog if the text of a changelog entry was supplied on the command
+      line. Thanks Steve Magoun.
+  * debcheckout:
+    + Produce the correct URL for "project-based" darcs.d.o repositories in
+      authenticated mode (Closes: #485044)   
+    + Correctly handle absolute pathnames as the checkout path for a single
+      file (Closes: #485888)
+  * debdiff: When using --show-moved, indicate whether the two lists of
+    packages being compared are different (this should have always worked,
+    but didn't due to a small logic bug)
+  * licensecheck:
+    + Apply patches from Ben Finney to use the copyright parser to determine
+      whether a file contains a valid copyright statement (Closes: #486013)
+      and to match more forms of copyright statement (Closes: #486216)
+    + Handle another variant of the copyright symbol
+  * tagpending: Add a comment to the generated e-mail indicating that the
+    script was used (Closes: #486092)
+  * who-uploads: Allow the date of each upload to be displayed. Based on a
+    patch by Filippo Giunchedi (Closes: #486344)
+  * wnpp-check: Fix a small typo in the manpage (Closes: #484582)
+  * debian/control:
+    + Bump Standards-Version to 3.8.0 (no changes)
+    + Add bsd-mailx to the mailx | mailutils Recommends as mailx is now
+      a transitional package for bsd-mailx
+  * debian/{link,rules}: Don't install the fr/man1/dch.1 symlink if the
+    corresponding debchange.1 wasn't installed (e.g. due to not being
+    sufficiently translated) (Closes: #485094)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 16 Jun 2008 19:59:50 +0100
+
+devscripts (2.10.29) unstable; urgency=low
+
+  * checkbashisms:
+    + Add checks for "sh -r", "sh -D", "sh [-+]O" and "sh with long options"
+    + Don't treat scripts with dash or ash shebangs as "/bin/sh scripts", as
+      dash implements some extensions to POSIX
+    + Correctly match heredocs using "<<-"
+    + Add checks for $'', $"", the use of echo with backslash escapes, $SHLVL,
+      $POSIXLY_CORRECT and $PIPESTATUS. Based on a patch by Raphael Geissert.
+  * debchange: Update the manual page to refer to +nmu versioning for native
+    packages (Closes: #483861)
+  * debdiff: Don't apply patches when extracting a Format 3.0 (quilt) source
+    package, to minimise noise in the diffs (Closes: #475506)
+  * getbuildlog: New script from Frank S. Thomas to download build logs for
+    a given package (Closes: #483169)
+  * mass-bug:
+    + Allow the component parts of a version number to be used in the template,
+      as #EPOCH#, #UPSTREAM_VERSION# and #REVISION# (Closes: #482587)
+    + Add a command-line option to specify that the generated e-mails should
+      not be wrapped to 70 characters (Closes: #483030)
+    + Allow the sendmail command to begin with a tilde
+  * mergechanges: Allow changes files with Formats of 1.7 and 1.8 to be merged,
+    by removing the Checksums-* fields from the Format: 1.8 files. The result
+    will be a valid Format: 1.7 changes file. (Closes: #481585)
+  * who-uploads: Call gpg with --no-auto-check-trustdb to ensure that gpg
+    doesn't attempt to perform a (potentially time-consuming) trustdb update
+    (Closes: #483878)
+  * wnpp-check: New script from David Paleino to check whether a package has
+    has open bugs requested that it be packaged (RFP) or intending to do so
+    (ITP) (Closes: #483707)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Tue, 03 Jun 2008 19:28:09 +0100
+
+devscripts (2.10.28) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts, build-rdeps, chdist, debcommit, dget, mass-bug: Fix POD errors in
+    the manpages. Thanks Riccardo Stagni (Closes: #479609)
+  * bts: Improve the message produced when unknown options are passed to
+    a command to include the command name
+  * checkbashisms:
+    + Also match use of "SHELL=/bin/bash -e" when checking whether a makefile
+      explicitly uses bash
+    + Update the check for "function" to more closely match lintian's (and
+      therefore be less prone to false positives)
+    + Update the check for "echo -e" to only match -n as an extra option
+      rather than all theoretically possible options, thus reducing false
+      positives
+    + Further improve the heredoc detection (to allow the space in "<< 'foo'")
+    + Make the check for "process substitution" ignore quoted strings
+    + Fix false positives in the tests for "time" and "test with unary -a"
+    + Apply various improvements to "quoted block" detection
+    + Correctly match 'echo "$(< $0)"'
+    + Add checks for "$[" (a deprecated form of arithmetic expansion) and
+      the use of the -a or -f arguments to the "readonly" builtin
+  * cowpoke: New script to upload a Debian source package to a cowbuilder host
+    and build it, optionally also signing and uploading the result to an
+    incoming queue (Closes: #479274)
+  * dcmd: Correctly handle the "debian-installer" section in a .changes
+    file (Closes: #481691)
+  * debsign: Use "mv -f" instead of plain "mv" when stripping an existing GPG
+    signature or updating the file sizes within the changes file before
+    signing it, as is already done for moving the resulting signed files
+    (Closes: #479569)
+  * dget: Mention in the manpage that dget supports udebs so long as an
+    appropriate packages file is available to apt (Closes: #480461)
+  * mergechanges: Send error output to stderr rather than stdout
+    (Closes: #481583)
+  * scripts/Makefile: Run podchecker(1) before building pod-generated
+    manpages to avoid the generated file containing a "POD errors" section
+
+  [ James Vega ]
+  * mk-build-deps:
+    + Fix Depends generation when both Build-Depends and Build-Depends-Indep
+      exist so that the last package of the former and the first package of
+      the latter are not listed as one concatenated string.
+    + Use the Source package name instead of the first listed Binary package
+      when parsing a control file.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 19 May 2008 19:38:35 +0100
+
+devscripts (2.10.27) unstable; urgency=low
+
+  * bts:
+    + When reassigning bugs, CC the maintainer of the new package(s)
+      (Closes: #478014)
+    + Fix an uninitialised value warning when using claim and unclaim with
+      no claim specified and $EMAIL and $DEBEMAIL unset
+  * chdist: Add armel to the list of architectures in the bash completion
+  * checkbashisms:
+    + When rebuilding the list of bashisms to check, ensure it is based
+      on whether the current file is a makefile, rather than whether the
+      previous file was. Thanks to Raphael Geissert for the brown paper bag.
+    + Match use of "SHELL=bash" as well as "SHELL=/bin/bash" in makefile mode
+    + Improve heredoc detection to avoid triggering on "foo bar << x" whilst
+      still matching 'cat <<"xyz"'
+    + Add a variant on the "[ a == b ]" test
+    + Enhance the "echo -e" test to also catch "echo -ne"
+    + Add checks for "type", "time", "dirs" and $UID
+    + Make several of the checks less prone to false positives
+    + Re-enable the check for "complete"
+  * dcmd:
+    + Preserve a leading "./" on .dsc and .changes filenames (Closes: #478172)
+    + Correctly handle packages with a section of "component/section"
+      (Closes: #478829)
+  * debchange:
+    + Correctly handle the BTS returning no bugs for a package when --closes
+      is used (either because the package doesn't exist in the archive
+      or it has no open bugs) (Closes: #477398)
+    + Add intrepid (ibex) to the list of Ubuntu distributions
+    + Skip auto-NMU detection if -e was used or when editing an UNRELEASED
+      changelog and using the "changelog" release heuristic
+  * debcheckout:
+    + Use the Vcs-* headers from the highest available version rather than
+      the first returned by "apt-get source" (Closes: #477386)
+    + Allow the Vcs-* headers from any of the available package versions to
+      be used
+  * debcommit:
+    + Ignore --confirm and --edit when combined with --diff
+    + Fix commit message detection for bzr; thanks Colin Watson
+      (Closes: #478667)
+    + Remove trailing newlines after editing the commit message
+    + Don't attempt to commit if an editor was spawned (either via --edit
+      or automatically) and the user quit without updating and saving the
+      message
+  * licensecheck: Correctly detect LGPLv3+ (Closes: #477742)
+  * tagpending: Use option bundling (so that e.g. "tagpending -ni" works)
+  * transition-check: New script to determine whether a set of source packages
+    is involved in a transition for which uploads to unstable are currently
+    blocked (Closes: #477922)
+  * debian/control:
+    + Add transition-check
+    + Recommend libyaml-syck-perl (for transition-check)
+    + Move build-essential back to Suggests as it's only required by
+      dpkg-depcheck and dpkg-genbuilddeps and will be installed in a build
+      environment anyway
+    + Fix a typo in the Suggests field (svn-buildpacakge)
+    + Move libfile-desktopentry-perl back to Suggests
+    + Remove libdigest-md5-perl from Recommends as it's Provided by perl since
+      sarge
+    + Re-order the "dupload | dput" recommendation to favour dput and remove
+      the version constraint from dupload as it refers to a version older than
+      that in oldstable
+    + Remove the versioned conflicts on debmake, dupload and suidmanager, as
+      they all referred to versions of those packages older than those in
+      oldstable
+    + Remove the version constraints from the perl build-dependency, the perl
+      dependency and the gnupg recommendation, as the referenced versions are
+      all satisfied in oldstable and above
+    + Remove the dependencies on debianutils and sed. Both are essential and
+      the version constraints in the dependencies are satisfied in oldstable
+      and above
+  * README: Add transition-check
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 03 May 2008 17:30:46 +0100
+
+devscripts (2.10.26) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts: Update documentation for "forwarded" to indicate that it may also
+    be used with a URL (for instance, for an upstream bug tracker)
+    (Closes: #475896)
+  * checkbashisms:
+    + Add experimental makefile support (only enabled if -f is used)
+    + Modify the "2>&foo" check to allow a valid file descriptor followed
+      by a backslash (for line continuations)
+    + Check the initial lines of shell script wrappers. Based on a patch from
+      Raphael Geissert
+    + Fix a couple of the quoted block detection checks so as not to trigger
+      on escaped quotes and correctly count quotes within lines containing ''
+      or ""
+    + Only rebuild the lists of expressions to search for when required,
+      rather than for each line of each file
+    + Disable "makefile mode" after checking a makefile if the next file to
+      check isn't a makefile
+    + Several enhancements to heredoc detection:
+      - Heredoc delimiters may contain "non word" characters if the delimiter
+        is quoted. As a side-effect, delimiters which match one of the bashism
+        expressions may now be flagged due to the order in which checks are
+        performed.
+      - SUS specifies that a heredoc ends on a line consisting solely of a
+        delimiter, so we enforce that and also don't check such lines.
+      - Delimiters may now contain regular expression meta-characters.
+    + Match shell script wrappers that don't pass on parameters when execing
+      (for example for scripts which take all input from STDIN)
+    + Add a check for process substitution (using "foo <(bar)")
+  * debchange:
+    + Allow a changelog with no entries to be created. (Note that
+      such a changelog will cause a warning from dpkg-parsehchangelog the
+      next time debchange is used with it) (Closes: #475578)
+    + Correctly handle control files containing comments when checking
+      for NMUs (Closes: #475750)
+    + Fix a side-effect of the automagic NMU detection functionality which
+      could lead to a spurious stanza being added to the end of the changelog
+    + Skip automatic NMU detection if -a or -r was passed on the command line
+      or if libparse-debcontrol-perl is not installed
+    + Add {oldstable-,testing-,}proposed-updates to the list of supported
+      distributions (Closes: #476264)
+    + Add oldstable to the list of supported distributions, as updates
+      to oldstable have been possible for some time
+    + Allow automatic NMU detection to be disabled from the command line
+      (Closes: #476985)
+  * debcommit: Modify the "strip message" functionality so that:
+    + Changelog lines beginning with any of *, + or - are considered to
+      indicate a "change" for the purposes of deciding whether to strip 
+      the message
+    + When trimming leading whitespace on continuation lines, only spaces 
+      and tabs are considered rather than line breaks (Closes: #475337)
+  * debdiff:
+    + Make the diffstat header for comparisons between two Debian revisions
+      the same as that between two upstream versions
+    + Normalise directory names in all file headers within a diff, not just
+      the first
+  * debian/control:
+    + Suggest instead of Recommending gnuplot and cvs-buildpackage
+    + Suggest svn-buildpackage (Closes: #476240)
+    + Drop libparse-debcontrol-perl build-dependency now that debchange no
+      longer fails in the absence of the package
+  * debuild:
+    + Run dpkg-buildpackage directly where possible, rather than emulating it.
+      Emulation will still be used if any of the clean, dpkg-source, build,
+      binary, dpkg-genchanges or final-clean hooks are defined, as dpkg
+      does not currently support them. (Closes: #476100)
+    + Make it clearer that a particular invocation is using the emulated
+      dpkg-buildpackage, and why.
+    + Automatically preserve the (C, CPP, CXX, LD and F)FLAGS variables and
+      the corresponding *FLAGS_APPEND variables
+    + Add *FLAGS and *FLAGS_APPEND support to the emulated dpkg-buildpackage
+    + When running dpkg-buildpackage directly, pass through unrecognised
+      options (with a warning) rather than aborting the build ourselves
+  * diff2patches: Update to new upstream version.
+  * dscverify:
+    + Update for the .changes and .dsc format introduced with dpkg 1.14.17:
+      - Handle Checksums-Sha(1|256)
+      - Reject .changes files with unsupported Formats and any file with
+        unsupported Checksums fields
+  * licensecheck: Replace a literal copyright symbol with a hex escape
+    so that the package builds using etch's po4a (Closes: #476251)
+  * mergechanges:
+    + Update for the new .changes format introduced with dpkg 1.14.17:
+      - Handle Checksums-Sha(1|256) (Closes: #475957)
+      - Only allow .changes files with the same Format to be merged
+      - Reject .changes files with unsupported Formats or Checksums fields
+  * rmadison: Allow custom shorthand URLs to be defined (Closes: #472922)
+  * uscan: Allow a particular upstream release to be downloaded rather than
+    the most recent (assuming it is in the list retrieved by the watch file)
+    (Closes: #475828)
+
+  [ Christoph Berg ]
+  * dcmd: If no command is given, print filenames line-by-line.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 21 Apr 2008 19:45:34 +0100
+
+devscripts (2.10.25) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * debchange: Escape arguments to --local (Closes: #475034)
+  * debdiff: Ensure arguments to --exclude are properly quoted in case they
+    contain shell meta-characters (Closes: #475075)
+  * debsign:
+    + Add support for the new Checksums-Sha* .changes file fields
+      introduced by dpkg 1.14.17 (Closes: #474949)
+    + Abort if any unknown Checksums-* fields are found in the .changes
+      file
+    + Abort if the Format field of the .changes file is unsupported
+      (greater than 1.8, less than 1.7 or non-numeric)
+    + Use a case-insensitive search for field names
+
+  [ James Vega ]
+  * debian/control: Set subversion as the first VCS Recommends alternative.
+
+ -- Martin Zobel-Helas <zobel@debian.org>  Wed, 09 Apr 2008 16:04:36 +0200
+
+devscripts (2.10.24) unstable; urgency=low
+
+  [ Martin Zobel-Helas ]
+  * Don't look for debian/control if invoked with -c. We also then are not
+    looking for NMUs. (Closes: #474564)
+
+  [ Adam D. Barratt ]
+  * debchange:
+    + Add a DEBCHANGE_AUTO_NMU configuration file option allowing the NMU
+      heuristics introduced in 2.10.21 to be disabled. Based on a patch by
+      gregor herrmann
+    + Fix and improve some manpage formatting. Thanks gregor herrmann
+    + Skip NMU detection when creating a new changelog 
+    + Fix NEWS files in combination with NMU versioning 
+    + Do not trigger NMU detection if the current changelog was authored
+      by the current user
+    + Fix uninitialised variable warning if Uploaders is empty
+      (Closes: #474687)
+    + Correctly handle UTF-8 maintainer / uploaders (Closes: #474685)
+    + Revert the NMU urgency change introduced in 2.10.21. NMUs now default
+      to the default "low" urgency. (Closes: #474720)
+  * debian/control:
+    + Move devscripts-el back to Suggests as it doesn't fit the definition
+      of something we should be Recommending
+    + Add lsb-release to the description of debchange
+    + Add unzip to the description of uscan
+    + Move mutt to Suggests
+  * README:
+    + Add recommended packages to desktop2menu, dget and rmadison
+    + Add svk to the description of debcommit 
+    + Add lsb-release to the description of debchange
+    + Add unzip to the description of uscan
+    + Replace references to ssh with ssh-client
+    + Move the list of used packages to the end of the description of
+      each script
+
+  [ James Vega ]
+  * debian/control:
+    + Change ssh Recommends to ssh-client. (Closes: #474682)
+    + Unify the tool descriptions to show the tools they use at the end of the
+      description.
+  * rc-alert: Allow the user to pass a list of packages to the script.
+    (Closes: #474659)
+  * wnpp-alert: Allow the user to pass a list of packages to the script.
+    (Closes: #463665)
+  * nmudiff: Fix a typo in the usage.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 07 Apr 2008 18:47:35 +0100
+
+devscripts (2.10.23) unstable; urgency=low
+
+  * Move the current Suggests: to Recommends: so that they are pulled in by
+    default but may be removed if desired (Closes: #474559)
+  * bug/presubj: Update in line with the change to Recommends:
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 06 Apr 2008 16:53:46 +0100
+
+devscripts (2.10.22) unstable; urgency=low
+
+  * bts: Allow a default list of e-mail addresses which should be sent copies
+    of all generated e-mails to be specified (Closes: #474203)
+  * debchange: Produce a more succinct and useful error message if
+    libparse-debcontrol-perl isn't installed.  (Closes: #474476)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 06 Apr 2008 14:55:48 +0100
+
+devscripts (2.10.21) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts:
+    + Allow SMTP authentication to be used when sending e-mails
+    + Automatically append "thanks" and the contents of ~/.signature
+      (if present) when --force-interactive was used (Closes: #474205)
+  * bug/script:
+    + Don't produce an error if either of the configuration files doesn't
+      exist (Closes: #472748)
+    + Don't include the BTS_SMTP_AUTH_* options
+  * checkbashisms:
+    + Strip off the quoted portion of a line that ends a "quoted block" before
+      deciding whether it's a comment line and skipping it
+    + Fix heredoc detection to match '<< \EOT ... EOT'
+    + Improve the invalid function name test to not trigger on IFS="()"
+    + Modify the brace expansion test to allow "${foo},${bar}"
+    + Add another variation on the theme of shell wrapper detection
+      ("foo && exec bar")
+    + Temporarily disable the check for "complete" as it's too prone to false
+      positives
+    + Add checks for pushd, popd, ulimit, shopt and $SHELLOPTS
+    + Remove check for $((var+1)) as dash now supports the syntax (the syntax
+      is POSIX compliant but was not supported properly by dash)
+    + Improve quoted string handling to cope with "'foo'"
+    + Add a test for export being passed options other than -p
+      (Closes: #473700)
+  * dcmd: Apply patch from Romain to correctly match the x11 section
+  * debchange: Fix spurious output when adding a changelog entry containing
+    non-ASCII characters (Closes: #473769)
+  * debcheckout:
+    + Tighten the "repository owner" regex for darcs.d.o to correctly check
+      http://darcs.d.o/~foo/bar/baz against user foo
+    + Ignore a repository owner mismatch in "print mode"
+    + In authenticated mode, ensure that a checked-out personal git.d.o
+      respository will be writable by the user passed on the command line
+      (Closes: #447791)
+  * debcommit: Strip epochs from hg tags (Closes: #473593)
+  * debdiff: Add a --diffstat option (Closes: #370286)
+  * dget: Pass --all-versions to apt-cache show in case the user has
+    configured it to only show the candidate version. Thanks Håkon Stordahl
+    (Closes: #472747)
+  * dscverify:
+    + Add debian-maintainers to the default set of keyrings
+    + Add a --no-default-keyrings option to override the default keyrings
+  * mk-build-deps: New script by Vincent Fourmond to build a binary package
+    satisfying the build-dependencies of a given package (Closes: #474302)
+  * tagpending: Allow the mail sent to the BTS to be displayed and (assuming
+    --noact is not in effect) confirmed before sending
+  * who-uploads: Mention the debian-maintainers keyring in --help
+  * README, debian/control:
+    + Add libsasl-authen-perl to Suggests and the description of bts, to
+      support SMTP authentication
+    + Add equivs to Suggests (for mk-build-deps)
+    + Add libparse-debcontrol-perl to Suggests and the description of
+      debchange 
+
+  [ Martin Zobel-Helas ]
+  * debchange
+    + Set urgency=high if NMU and no other urgency set (Closes: #474391)
+    + Set to NMU if packager is neither in Uploaders nor Maintainer 
+      (Closes: #474399)
+    + Add abbreviation -q for --qa (Closes: #474434)
+
+ -- Martin Zobel-Helas <zobel@debian.org>  Sat, 05 Apr 2008 18:13:28 +0200
+
+devscripts (2.10.20) unstable; urgency=low
+
+  * bts:
+    + Only append a single ellipsis to the mail subject once it becomes
+      too long, rather than for each extra command (Closes: #471304)
+    + Make --no-action and --(force-)interactive work if neither DEBEMAIL
+      nor EMAIL are set (Closes: #467066)
+    + Add --cc-addr to --help output
+  * checkbashisms:
+    + Make --version actually produce version information
+    + Fix explanation of VAR+=foo
+    + Fix an error in the "shell script wrapper" detection
+    + Enhance the "invalid function name" check to allow a leading bracket
+      before the function name
+    + Don't treat '' at the beginning of a line as the start of a quoted block
+    + Allow a heredoc marker to begin with a backslash
+    + Enhance quoted block detection to handle escaped quotes better
+    + Enhance "shell script wrapper" detection to catch more ways of
+      disguising a non shell script as one
+    + If more than one issue was found within a single line, output each
+      rather than just the first
+  * dcmd: New script from Romain Francoise to run a given command replacing
+    the name of a .changes or .dsc file with each of the files referenced
+    therein (Closes: #472492)
+  * debcheckout: Allow specific files from the repository to be retrieved
+    rather than checking out the repository (Closes: #469242)
+  * debcommit:
+    + Make the change to --release's behaviour introduced in the last
+      upload optional. If -R / --release-use-changelog is used then
+      the changelog will be checked for uncommitted changes when determining
+      the commit message. The default is not to do so and use the message
+      passed with --message (if any) or "releasing version X.Y.Z" as before.
+      (Closes: #471723)
+    + When creating summary lines for git and hg, ignore any subchanges
+      (i.e. lines indented by more than two spaces and starting with *, +
+      or -)
+    + Add documentation to the manpage of the current VCS-specific features
+    + Make --strip-message also strip leading spaces from continuation lines
+    + Strip single change commit messages by default
+  * debdiff:
+    + Escape package names when normalising path names (Closes: #471282)
+    + Make tarball-in-tarball support more intelligent. If a sub-tarball
+      named foo.tar.gz unpacks to a directory named foo, the directory is
+      renamed to =unpacked-tarN= so that the directory names match across
+      the unpacked packages (Closes: #459294)
+  * debuild:
+    + Add a --prepend-path option allowing $PATH to have directories added
+      to it once it has been sanitised, for example to add /usr/lib/ccache.
+      Based on a patch by Matt T. Proud (Closes: #460719)
+    + Add a --username option to allow debrsign to be used instead of debsign
+      (Closes: #262253)
+  * dget: Support /etc/apt/sources.list.d (Closes: #471672)
+  * uscan:
+    + Correctly handle an explicit upstream-version of 0 (Closes: #471503)
+    + Add "watch" to the manpage's summary line (Closes: #452930)
+  * debian/copyright: Explicitly indicate that diff2patches is GPL >= 3
+    rather than the package's standard >= 2.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 24 Mar 2008 22:14:22 +0000
+
+devscripts (2.10.19) unstable; urgency=low
+
+  * debsign: Correctly handle signing an automatically located .changes
+    file if none was passed on the command line (Closes: #468761)
+  * debchange:
+    + Apply a more elegant fix for the bugfix in 2.10.18.
+      Thanks to gregor herrmann for pointing the obvious solution out.
+    + Don't complain about the package version changing from native to
+      non-native if --nmu or --security was used
+    + Fix an unescaped hyphen in the manpage
+    + If starting a changelog stanza for a new maintainer upload with
+      the distribution set to UNRELEASED, check whether the previous
+      stanza is also UNRELEASED and, if so, merge them (assuming the 
+      "changelog" release heuristic is in use) (Closes: #458130)
+    + Add non-maintainer uploads (including security and QA uploads),
+      backports and the use of local version strings to the list of
+      cases where debchange doesn't have to guess the user's intentions
+    + Add an --allow-lower-version option which is similar to
+      --force-bad-version but allows a regular expression to be specified
+      which the new version must match. Based on a patch by Frank Küster
+      (Closes: #381159)
+    + Modify the version-handling code to generate NMU versions of the
+      form X+nmu1 for Debian-native packages
+  * checkbashisms:
+    + Use Getopt::Long for option parsing
+    + Add an option to force checking of scripts that would normally be
+      skipped (Closes: #469023)
+    + Clarify in the manpage that some issues detected by the script may
+      be XSIisms etc rather than strictly bash-specific features
+    + Add checks for suspend, caller, complete/compgen, declare/typeset,
+      disown, builtin, set -[BHT], alias -p, unalias -a, local with
+      options or an assigned value and $BASH(_*). Thanks to Raphael
+      Geissert for the patch (Closes: #469050)
+    + Modify each of the simple shell variable tests (e.g. $RANDOM) to
+      also match ${variable}
+    + Identify and ignore multi-line quoted text (Closes: #464641)
+    + Reorder a couple of checks so that ". foo $HOSTNAME" is detected as
+      source passing arguments rather than misuse of $HOSTNAME
+    + Fix a potential false positive on "2>& 1"
+    + Fix an unescaped hyphen in the manpage
+    + Add a check for function names containing characters other than
+      alphanumerics and underscore
+    + Modify the "read without variable" test to also catch options other
+      than -r. Thanks Luca Capello (Closes: #470696)
+    + Add an option to allow flagging of lines which do not contain bashisms
+      but which may contain other useful information - for example, checking
+      whether $BASH is set before using bashisms or $RANDOM being used as a
+      local variable rather than the bash built-in variable (Closes: #470999)
+    + Add a check for "VAR+=foo" (Closes: #471001)
+    + Also detect <<< inside a quoted string (Closes: #471059)
+    + Improve comment detection and removal to not remove "s/#/foo/"
+  * bts:
+    + Allow the sendmail command to begin with a ~ (Closes: #469207)
+    + Don't treat "userblah" as an alias for "users" in "select"
+  * debcommit:
+    + Set $SVKDIFF before calling "svk diff" (Closes: #469238)
+    + If there are uncommitted changes to the changelog when --release is
+      used, use them as the commit message. Otherwise use the message passed
+      with --message or "releasing version X.Y" as currently
+      (Closes: #470366)
+    + Format commit messages in a more useful manner for git and hg. The
+      first change found is unfolded and used as the summary line. If more
+      than one change was found then an editor is spawned so that the message
+      can be fine-tuned if required (Closes: #402531)
+  * deb[ci]:
+    + Allow either package names or filenames to be passed on the
+      command line (Closes: #469663)
+    + Fix reference to dpkg-deb(8) (should be section 1) and an unescaped
+      hyphen in the manpage
+  * annotate-output.1, cvs-debi.1, dd-list.1, debuild.1, dpkg-depcheck.1, 
+    dpkg-genbuilddeps.1, nmudiff.1, plotchangelog.1, uscan.1,
+    devscripts.conf.5: Fix unescaped hyphens
+  * nmudiff: Fix --nomutt's To: handling. Thanks Thomas Viehmann
+    (Closes: #470069)
+  * Debbugs.pm:
+    + Turn on "use strict" and "use warnings" which got lost when moving
+      the code from bts
+    + Don't attempt to iterate the result of usertags() in select if
+      it's empty (Closes: #470025)
+    + Skip arguments to select() that contain valid keys but not values
+    + Print a warning about unrecognised keys passed to select()
+    + Add on_fault handlers to SOAP calls so we can return useful error
+      messages
+  * debuild:
+    + Add working -j / DEB_BUILD_OPTS=parallel support
+      (Finally closes: #457235)
+    + Remove linda support. Thanks Thijs Kinkhorst (Closes: #470478)
+  * debcheckout: Add launchpad.net/foo to the list of recognised
+    Launchpad repository formats for authenticated mode. Thanks Martin
+    Pitt
+  * cvs-debuild: Remove linda support. Thanks Thijs Kinkhorst.
+  * Packaging changes:
+    + debian/control, README, conf.default.in: Remove references to linda
+    + Add a NEWS file to alert dget users to the change in 2.10.17 to unpack
+      source packages by default (Closes: #470809)
+  * grep-excuses: Fix reference to bjorn.haxx.se in help output to refer to
+    release.d.o/migration
+  * debpkg: Fix reference to dpkg(8) in the manpage
+  * pts-subscribe: Don't complain about mail and/or at not being available
+    if --help / --version were used. Also don't complain about at unless an
+    unsubscription mail needs generating. (Closes: #471088)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sun, 16 Mar 2008 17:00:34 +0000
+
+devscripts (2.10.18.1) unstable; urgency=low
+
+  The "I need a bigger brown paper bag" upload
+
+  * checkbashsisms: Simplify the >&/&>file check and in the process fix
+    another couple of potential false positives.
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Fri, 29 Feb 2008 08:55:16 +0000
+
+devscripts (2.10.18) unstable; urgency=low
+
+  [ Patrick Schoenfeld ]
+  * licensecheck: Detect a less common form of GPL usage
+
+  [ Adam D. Barratt ]
+  * checkbashisms: Fix a couple of brown paper bag issues with the >&file
+    and herestring checks added in the last release. Thanks to Raphael
+    Geissert for spotting the breakage so quickly.
+  * debchange: Fix an off-by-one in the fix for #452806 that caused an
+    extra blank line to be added before the trailer line
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Fri, 29 Feb 2008 06:50:51 +0000
+
+devscripts (2.10.17) unstable; urgency=low
+
+  The "Pia for DPL" upload
+
+  [ Adam D. Barratt ]
+  * checkbashisms:
+    + Fix a false positive in the $(( test (Closes: #465364)
+    + Add detection for <<<, $(OS|MACH)TYPE, $HOST(TYPE|NAME), $EUID,
+      $DIRSTACK, $SECONDS and /dev/(tcp|udp) (Closes: #465386)
+    + Enhance heredoc detection to not trigger on <<<
+  * Debbugs.pm: Update to match the current debbugs SOAP interface. Add
+    status(), usertags(), versions() and versions_with_arch(),
+    newest_bugs(), bug_log(), source_to_binary() and binary_to_source()
+  * tagpending:
+    + Rewrite in perl using Debbugs.pm
+    + Optionally (and by default) include the changelog header line and
+      any relevant changelog entries as comments in the generated mail
+      (Closes: #439688)
+  * debcheckout:
+    + Handle spaces between -d and the root for cvs repositories
+      (Closes: #465849)
+    + Fix a warning about uninitialised values when a module name is not
+      supplied for a cvs repository
+    + In auth mode, set push_location for bzr branches (Closes: #453447)
+  * uscan:
+    + Add support for repacking .zip archives, based on a patch
+      from Antonio Terceiro (Closes: #456587)
+    + Mention an alternative form of sourceforge URL in the manpage that
+      allows checking for new versions when the qa.d.o redirector doesn't
+      work (Closes: #433408)
+    + Fix an escaping error in one of the manpage's examples for twisted
+  * Packaging changes:
+    + README: Update descriptions of tagpending and debchange
+    + debian/control:
+      - Add unzip(1) to Suggests for uscan's zip repacking
+      - Update descriptions of tagpending and debchange
+  * debcommit:
+    + Use "git diff" instead of "git-diff" (Closes: #466158)
+    + Ignore whitespace changes in diffs
+  * dget: Correctly handle the processing of a file that we've already
+    retrieved (Closes: #445546)
+  * wnpp-alert: Note in the manpage that the results are source package
+    based
+  * debchange:
+    + Modify --closes to use SOAP / Debbugs.pm
+    + Add hardy (heron) to the list of supported Ubuntu distributions
+    + Use existing changelog data directly rather than re-using
+      dpkg-parsechangelog's Changes: field and therefore don't apply any
+      reformatting (Closes: #452806)
+    + Use "etch-backports" instead of "Etch backports" in bpo changelog
+      entries (Closes: #467582)
+  * bts:
+    + Add a --force-interactive option which is similar to --interactive
+      but spawns an editor for the message before prompting for sending
+      confirmation (Closes: #467134)
+    + Allow the use of --{force-,}interactive to be specified in the
+      configuration file (Closes: #467131)
+  * debsign: Allow multiple files to be signed in a single invocation
+    (Closes: #457355)
+  * mass-bug:
+    + Correctly detect the start of a signature in the template file
+      (Closes: #467496)
+    + Allow package versions to be specified in the package list file
+      as package_version (Closes: #467581)
+  * mergechanges: Merge the Description: fields from each of the supplied
+    changes files. Thanks to Vincent Danjean for the patch
+    (Closes: #442972)
+  * debuild: Allow preserve-envvars to contain wildcard entries (of the
+    form STEM*) (Closes: #405440)
+
+  [ Christoph Berg ]
+  * dget:
+    + Make unpacking downloaded source packages the default, use -d for the
+      old behaviour.
+    + Check signature of source packages using dscverify, use -u to disable.
+      (Closes: #434521)
+
+  [ Patrick Schoenfeld ]
+  * licensecheck: Support a less common form of MIT license usage
+
+  [ Mohammed Adnène Trojette ]
+  * debian/bug:
+    + make reportbug add configuration data in bug reports.
+    + print a message to sensitise users about our "Suggests vs Depends"
+      policy.
+
+  [ Stefano Zacchiroli ]
+  * debcommit: add support for a new --diff option which dumps changes on
+    standard output instead of committing them
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 27 Feb 2008 18:18:56 +0000
+
+devscripts (2.10.16) unstable; urgency=low
+
+  The "storm before the calm" release
+
+  * checkbashisms:
+    + Correct the $(<) check to not flag $(<foo grep bar) (Closes: #464522)
+    + Tighten the $(( / (( regex
+    + Modify the ". foo bar" check to allow ". `foo bar`" (Closes: #464984)
+    + Ensure that an explanation is provided for the ". foo bar" check
+    + Fix the "shell wrapper" regex to allow a space after ; and before exec
+      (Closes: #464976)
+    + Add posh to the list of supported interpreters. Thanks to Raphael
+      Geissert.
+    + Warn about use of >& and <& redirecting to a file (POSIX specifies
+      behaviour for - and file descriptors only) (Really closes: #461653)
+  * debbugs.pm: New module to encapsulate some of the common BTS functionality
+    used by various scripts. Currently contains initial support for some
+    SOAP methods.
+  * bts: Use debbugs.pm for select()
+  * tagpending: Fix the bts select call to also handle forwarded bugs
+    (Closes: #464787)
+  * debchange: Warn if the package appears to have switched from Debian native
+    to non-native or vice versa (Closes: #440957)
+  * uscan: Don't insist on an upstream version being supplied on the command
+    line if one is present in the watch file (Closes: #350307)
+  * debuild: Really fix -j, so that --lintian-opts works again
+    (Closes: #465264)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Mon, 11 Feb 2008 19:50:15 +0000
+
+devscripts (2.10.15) unstable; urgency=low
+
+  [ Patrick Schoenfeld ]
+  * checkbashisms: Add a check for the $(<) bashism (which is catting a file)
+    (Closes: #463743)
+  * dget: Implemented a '--build' parameter which builds a package with
+    dpkg-buildpackage after its download (Closes: #457977)
+  * build-rdeps: Add a license header so that licensecheck does recognize
+    the license and copyright
+
+  [ Adam D. Barratt ]
+  * checkbashisms:
+    + Correct the fix for #461653. >& is permitted by POSIX, &> isn't. Thanks
+      to Sven Joachim.
+    + Modify the "echo -e", "exec -[acl]" and "let" tests to require
+      whitespace before the matched text in order to reduce false positives.
+      Thanks to Russ Allbery for pointing the issue out.
+  * debchange: Allow the use of an unknown / unofficial distribution to be
+    forced (Closes: #463449)
+  * bts:
+    + Allow the generated e-mail to be edited before sending
+      (Closes: #456331)
+    + Handle cache files generated by versions of bts that didn't name
+      attachments correctly (Closes: #464079)
+  * uscan:
+    + Fix quoting of a manpage example (Closes: #452934)
+    + Output a message if --report-status was used but no watch file was found
+      (Closes: #409128)
+  * debuild: Recognise -j as a valid option when it's passed on the command
+    line as well as in the configuration file (Really closes: #457235)
+  * debcommit: Check the debian directory for indications of version control
+    to handle situations where the upstream source and packaging are managed
+    through different VCSes (Closes: #384230)
+  * mergechanges: Fix a typo in the manpage
+  * tagpending(1):
+    + Remove ldapsearch(1) from SEE ALSO, as the script hasn't used LDAP for
+      some time
+    + Fix the script's name in the title block
+  * whodepends: Remove duplicated wording from the manpage
+  * whouploads: Reduce the length of a line in the manpage to fix warnings
+    from man
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Wed, 06 Feb 2008 19:31:00 +0000
+
+devscripts (2.10.14) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * uscan:
+    + Document the USCAN_DESTDIR configuration variable (Closes: #460717)
+    + uscan: Correctly set the default User-Agent header (Closes: #462770)
+  * bts:
+    + Fix downloading of named attachments (Closes: #460850)
+    + Add support for setting X-Debbugs-No-Ack (Closes: #458973)
+  * grep-excuses: Update wipnity functionality in line with the move of
+    testing.pl to release.d.o
+  * checkbashisms:
+    + Warn about the use of >& and &> (Closes: #461653)
+    + Bring the script largely back in to sync with lintian's checks/scripts:
+      - don't check scripts that appear to be shell scripts but aren't
+        (Closes: #463257)
+      - don't flag potential issues if they occur inside single quotes
+      - separate out those issues that should only be flagged if they occur
+        inside quoted strings
+      - catch the use of kill -[0-9] or -[A-Z], trap with signal numbers
+        and [[ foo ]]
+  * deb-reversion: Support passing -b / --force-bad-version to dch
+    (Closes: #461557)
+  * mass-bug: Allow setting of tags. Thanks to Pierre Habouzit for the
+    patch (Closes: #462649)
+  * debcommit: Allow the commit message to be edited before passing it
+    to the VCS. Thanks to Patrick Schoenfeld for the patch (Closes: #462758)
+  * debuild: Pass -j through to dpkg-buildpackage (Closes: #461239)
+  * tagpending: Use "bts select" instead of wget where possible
+  * dget: Correctly parse arguments to --path (Closes: #460970)
+  * Packaging changes
+    + Update to debhelper v6
+    + Decapitalise the short description to match the Developer's Reference's
+      recommendations
+
+  [ Mohammed Adnène Trojette ]
+  * debcheckout: remove "-d" from Vcs-Cvs: field if a maintainer puts it.
+
+  [ Christoph Berg ]
+  * debcommit: also look for \t in the diff for GNU-style changelogs.
+
+  [ Patrick Schoenfeld ]
+  * Joining the team
+  * debcommit: Work around problems when colordiff is used as diff-cmd for
+    svn/svk or when the always color configuration of git is set
+    (Closes: #462686)
+  * Added new script 'build-rdeps', a utility to find all packages that
+    reverse depend on a given package (Closes: #326966)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk>  Sat, 02 Feb 2008 20:19:49 +0000
+
+devscripts (2.10.13) unstable; urgency=low
+
+  * The 'we sponsor Adam for DM' upload
+
+  [ Mohammed Adnène Trojette ]
+  * debcheckout: wrap error message. (Closes: #459372)
+
+  [ Adam D. Barratt ]
+  * grep-excuses:
+    + Only check for the presence of libterm-size-perl if -w / --wipnity
+      is being used.
+    + Improve the error message when libterm-size-perl isn't installed.
+  * debian/control: Add libterm-size-perl to the description of grep-excuses
+    (Closes: #459586)
+  * README: Add libterm-size-perl to the description of grep-excuses
+
+  [ James Vega ]
+  * tagpending: Handle new-style links to individual bug reports which are
+    simply the bug-numer.
+  * bts: Handle both relative and absolute links on BTS webpages.
+  * debchange:
+    + Handle both relative and absolute links when parsing BTS webpages.
+      (Closes: #459947)
+    + Do not include "Debian Bug report logs" in the changelog entry when
+      using --closes.
+
+  [ Luk Claes ]
+  * whodepends: Support showing source packages instead of binary ones thanks
+    to Otavio Salvador.
+
+  [ Joey Hess ]
+  * bts: Add a <base> tag to the page sent to the browser so that unqualified
+    urls work.
+
+  [ Martin Zobel-Helas ]
+  * Add Dm-Upload-Allowed filed, so Adam can upload devscripts.
+  * updated french translation
+
+ -- Martin Zobel-Helas <zobel@debian.org>  Fri, 11 Jan 2008 10:32:59 +0100
+
+devscripts (2.10.12) unstable; urgency=low
+
+  [ Stefano Zacchiroli ]
+  * debcheckout: add auth support for *.launchpad.net. Thanks to Colin Watson
+    for the patch (Closes: #451672)
+
+  [ Mohammed Adnène Trojette ]
+  * debian/control:
+     + bump Standards-Version to 3.7.3.
+     + build-depend on and suggest libterm-size-perl.
+  * debian/dirs: create /etc
+  * bts:
+     + add a -n/--no-action option printing emails to stdout instead
+       of sending them. (Closes: #458603)
+     + add a "SEE ALSO" section in manual page. (Closes: #458296)
+     + automatically Cc: team@security.debian.org when (un)tagging a bug
+       security. (Closes: #458840)
+  * chdist: generate a manual page from source.
+  * dch:
+     + add a --bin-nmu option for binNMUs. (Closes: #458496)
+     + add a -s/--security option for Security Team uploads inspired by
+       Ubuntu's.
+     + add a -l/--local option to allow adding suffixes to a Debian version
+       number. (Closes: #284658)
+  * debc/debi: don't mess up --debs-dir option's argument when
+    debian/svn-deblayout is present. (Closes: #446414)
+  * debcheckout: add support for authentication mode with darcs.
+    Thanks Luca Capello for the patch. (Closes: #445714)
+  * debdiff: make diff output p1-compatible (for native packages or when
+    interdiff is not available). Thanks dAniel hAhler for the patch.
+    (Closes: #456223)
+  * diff2patches: new patch written by Raphael Geissert <atomo64@gmail.com>.
+    Extracts patches from a .diff.gz file placing them under debian/ or,
+    if present, debian/patches. (Closes: #456626)
+  * grep-excuses: permit requests to http://bjorn.haxx.se/debian/
+    with --wipnity, -w option. Idea and implementation courtesy from
+    Julian Mehnle <julian@mehnle.net>. (Closes: #448279)
+  * mass-bug: add --user and --usertags options to avoid their wrapping.
+    (Closes: #429479)
+  * Changes pulled from Ubuntu's diff:
+     + debian/control:
+        - suggest wget|curl instead of wget
+        - suggest lsb-release
+     + debuild: preserve DEBEMAIL environment variable.
+
+  [ Adam D. Barratt ]
+  * who-uploads: Actually check debian-keyring.pgp by default rather
+    than .gpg twice. Thanks to Philipp Kern for pointing the issue out
+    (Closes: #456209)
+  * who-uploads: Check debian-maintainers.gpg by default. Thanks to
+    Philipp Kern for the suggestion (Closes: #456208)
+  * debian/control, README: Add debian-maintainers to the suggested
+    package list
+  * debchange: Add a configuration file option to allow overriding the
+    default setting of -t / --mainttrailer (Closes: #454254, #453644)
+  * debchange: Correctly handle using an empty changelog entry to switch
+    the distribution to UNRELEASED when using the changelog heuristic
+    (Closes: #453690)
+
+  [ Luk Claes ]
+  * chdist: Add bash_completion script for chdist (Closes: #457842)
+  * chdist: Added improvements and fixed bugs. Thanks to Raphaël Pinson
+    (Closes: #457841)
+  * debdiff: Add support for tar.bz2 tarballs in orig.tar.gz
+
+ -- Luk Claes <luk@debian.org>  Sat, 05 Jan 2008 16:27:11 +0100
+
+devscripts (2.10.11) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * uscan: Correctly parse HTMLised FTP directory listings. Thanks to
+    Vaclav Ovsik for the patch (Closes: #448636)
+  * desktop2menu: New script to generate skeleton menu files from
+    freedesktop.org .desktop files. Thanks to Sune Vuorela (Closes: #448730)
+  * debchange: Default to using -t / --mainttrailer when using the "changelog"
+    heuristic. Thanks to Joey Hess for the patch (Closes: #448795)
+  * debcommit: Automatically include the changelog in the list of files to be
+    committed (Closes: #419657, again)
+  * debcommit: Correctly pull the depot path from the output of svk info
+
+  [ Luk Claes ]
+  * debdiff: Support tarball in tarball (Closes: #439667).
+  * debdiff: Support p-u-new use case (Closes: #439666).
+  * chdist: New script to easily play with several distributions.
+    Closes: #438971
+  * debian/control: Add build dependency on libfile-desktopentry-perl and
+    liburi-perl so perl -c won't fail for desktop2menu and rmadison.
+
+  [ Joey Hess ]
+  * debcommit: Avoid svk hang by only running svk if ~/.svk/local exists.
+    Closes: #420899
+  * debcommit: Try harder to see if the package is in git. Look for
+    .git in parent directories too.
+
+ -- Luk Claes <luk@debian.org>  Wed, 14 Nov 2007 22:53:22 +0100
+
+devscripts (2.10.10) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * licensecheck
+    + Better detect 3-clause BSD licenses (Closes: #442630)
+    + Detect ISC style licenses. Thanks to Patrick Schoenfeld for the
+      patch (Closes: #448000)
+    + Always check a single file argument even if it doesn't match
+      the file pattern regex
+  * bts: Update for new bugspam.cgi syntax (Closes: #445557)
+  * wnpp-alert: Add an option to display the changes since the last
+    invocation. Based on a patch by Luca Bedogni; thanks.
+    (Closes: #446910)
+  * svnpath: Fix a couple of typoes (Closes: #448167)
+
+  [ James Vega ]
+  * debcheckout: -u should imply -a, as documented.  Thanks Luca Capello for
+    the patch.  (Closes: #445706)
+
+  [ Joey Hess ]
+  * debcommit: Support creating signed tags using git. Controlled by the
+    DEBCOMMIT_SIGN_TAGS setting, not enabled by default.
+  * debcommit: When run in a clean git repo with -r -a, git-commit would
+    exit nonzero as there was nothing to commit. Instead, check if
+    the repo is clean; don't run git commit in this case, and proceed with
+    tagging.
+  * debcommit: Name git tags "debian/$version" or just with the package
+    version number for native version numbers. Closes: #446699
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 28 Oct 2007 16:45:56 -0400
+
+devscripts (2.10.9) unstable; urgency=low
+
+  [ Mohammed Adnène Trojette ]
+  * uscan: allow the path for downloaded files to be specified. Thanks Steffen
+           Moeller for the patch. (Closes: #439060)
+  * debsign: work in $TMPDIR (if set) or /tmp. (Closes: #420472)
+
+  [ Adam D. Barratt ]
+  * debchange:
+    + Add an option to not modify the trailer line when editing or
+      appending changelog entries (Closes: #435980)
+    + Make -r use the distribution specified in the previous changelog entry by
+      default (Closes: #364510)
+    + Use the package changelog to determine version information for the NEWS
+      file by default (Closes: #316662)
+    + Allow an explicit empty changelog entry to be passed on the command line
+      to allow non-interactive changes to the distribution and urgency without
+      adding a changelog entry (Closes: #442267)
+    + Make -r only change the distribution if it was previously UNRELEASED.
+      Combining -r and -D on a changelog that's not UNRELEASED now
+      causes a warning and does not change the distribution (Closes: #443081)
+  * licensecheck: Attempt to distinguish between versions of the BSD license
+    (Closes: #442630)
+  * bts: Improve the documentation of forcemerge. Thanks to dann frazier.
+    (Closes: #442930)
+
+  [ Stefano Zacchiroli ]
+  * uscan: add a --repack option to repack .tar.bz2 archives to .tar.gz
+    archives upon request
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Wed, 03 Oct 2007 00:54:28 +0200
+
+devscripts (2.10.8) unstable; urgency=low
+
+  [ Mohammed Adnène Trojette ]
+  * debcommit:
+     + allow an alternate location for the changelog. By default
+       debian/changelog is used. Thanks Sjoerd Simons and Laurent Bigonville
+       for the patches. (Closes: #437387)
+     + add a -C/--confirm option to confirm the commit message. Thanks Laurent
+       Bigonville for forwardporting the patch from Ubuntu. (Closes: #439054)
+     + allow tagging with bazaar. (Closes: #441105)
+  * debuild:
+     + keep DISPLAY, XAUTHORITY and GNOME_KEYRING_SOCKET environment
+       variables around for safe keeping before we destroy the
+       environment, and re-set them before running debsign; thanks Steve
+       Kovalik for the patch. (Closes: #322208)
+     + also keep GPG_AGENT_INFO and SSH_AUTH_SOCK.
+  * licensecheck: decruft // comments. (Closes: #441073)
+  * debchange: update according to new Backports.org policy. (Closes: #439854)
+
+  [ Stefano Zacchiroli ]
+  * debcheckout: new script to checkout the version control system repository
+    of a package
+
+  [ Joey Hess ]
+  * debcheckout: when checking out svn repos, check them out into a directory
+    named for the package, to avoid checking out into ie, a trunk directory.
+
+  [ Adam D. Barratt ]
+  * licensecheck
+    + tidy up the pre-check regexes
+    + unescape "\@"s in copyright statements
+    + decruft © as well as (C)
+    + make the copyright regex more flexible
+    + correctly handle metacharacters found in potential copyright statements
+  * debdiff: allow whitespace to be ignored in diffs (Closes: #439163)
+  * debcommit
+    + Allow changes to only debian/changelog to be committed.
+      Thanks to martin f krafft for the patch. (Closes: #439992)
+    + Allow the leading "* " to be stripped from commit messages
+      (Closes: #440013)
+  * bts: Change working directory back to its original location before
+    running the browser (Closes: #436095)
+  * checkbashisms: Catch the use of test/[ with a unary -a operator. Thanks to
+    Matthew Wilcox for the suggestion.
+
+  [ Julian Gilbey ]
+  * The package should suggest git-core, not git (Closes: #440018)
+  * debchange: update for new BTS layout (pkgreport.cgi syntax changed)
+
+  [ Joey Hess ]
+  * Add list-unreleased, by Frans Pop.
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Tue, 11 Sep 2007 16:46:04 +0200
+
+devscripts (2.10.7) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * debian/control: Add libsoap-lite-perl to the Suggests and
+    description for bts
+  * README
+    + Add libcrypt-ssleay-perl to the description for uscan
+    + Add libsoap-lite-perl to the description for bts
+    + Mention the SOAP interface in the description for bts
+  * debchange: Fix NMU versioning for Debian native packages
+  * dd-list: Sort developer names case-insensitively. Thanks to Steinar H.
+    Gunderson for the suggestion
+  * bts
+    + Fix test for libwww-perl not being installed
+    + Only pass -c to mail(1) if there are Cc: addresses
+      (Closes: #433385)
+    + Add support for selecting bug lists via the SOAP interface. This
+      requires libsoap-lite-perl. Thanks to Don Armstrong for the patch
+      (Closes: #433169)
+  * deb-reversion: Apply patch from Adeodato Simó to ensure -v is
+    honoured (Closes: #433492)
+  * debcommit: When using git, allow either all files or only those in
+    the index to be committed. Thanks to Martin F Krafft and Junichi
+    Uekawa for the patch. (Closes: #402539, #427429, #433081)
+  * uscan
+    + Allow a user agent string to be specified (Closes: #433419)
+    + Fix https support (Closes: #423669)
+    + Correctly set exit status after downloading (Closes: #431840)
+  * licensecheck
+    + Allow directories to be passed as arguments
+    + Allow a pattern to be specified indicating files / directories
+      which should be excluded from checking. The default is the same
+      as dpkg-source's -i option
+    + Allow the set of files to be checked to be specified via a
+      regular expression
+    + Optionally attempt to find copyright statements
+
+  [ Christoph Berg ]
+  * rmadison: Support ubuntu and querying multiple archives, suggested by
+    Loïc Minier. (Closes: #431303)
+  * dget: Downloading multiple binaries was broken. (Closes: #428827)
+
+  [ Stefano Zacchiroli ]
+  * dd-list: list Uploaders per default, added --nouploaders option to
+    force the old behaviour
+
+  [ Mohammed Adnène Trojette ]
+  * debi: add svn-buildpackage support. Thanks to Raphaël Hertzog for
+    the patch. (Closes: #315409, #417609)
+  * dch: add --bpo support. (Closes: #434183)
+  * debcommit: add debian/changelog to the list of files to commit. Thanks
+    Damyan Ivanov for the patch. (Closes: #419657)
+  * bts: add file:// to local urls. (Closes: #435011)
+  * checkbashims: add a -n/--newline option (disabled by default) to
+    also check "echo -n" as Debian Policy 10.4 requires /bin/sh to support
+    it. (Closes: #426584)
+  * tagpending: add a -t/--to option that adds a -v option to the
+    dpkg-parsechangelog call. (Closes: #434145)
+  * debian/rules: use [ ! -f Makefile ] || $(MAKE) clean instead of -$(MAKE)
+    clean.
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Fri, 10 Aug 2007 00:35:06 +0200
+
+devscripts (2.10.6) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * bts
+    + Cc bug reports if the control message contains a comment
+      (Closes: #429649)
+    + Support passing multiple packages / addresses to "bts cache"
+      (Closes: #416548)
+    + Add archive / unarchive support
+    + Make caching of "status mboxes" work again
+  * Fix changelog typos (Closes: #429774)
+  * debdiff: Sort conffiles and control before comparing them. Thanks to Peter
+    Samuelson for the patch (Closes: #421781)
+  * tagpending
+    + Use tag=pending rather than include=pending (Closes: #430786)
+    + Sort bug numbers in numerical order
+    + Process bugs that are already tagged pending and closed in the changelog
+
+  [ James Vega ]
+  * uupdate:
+    + When displaying patch reject files, show the path to the new upstream
+      directory where they're contained. (Closes: #419133)
+  * uscan:
+    + Support https URLs.  This requires installing libcrypt-ssleay-perl.
+      (Closes: #423669)
+  * debian/control:
+    + Add libcrypt-ssleay-perl to Suggests and description for uscan.
+  * wnpp:
+    + Update the manpage and help output to document what RFA, RFH, and O
+      mean.  Also add a pointer to the WNPP website. (Closes: #421872)
+  * PackageDeps:
+    + Use ||= instead of |= to set the package name in %dep_pkgs.  It is the
+      correct way to do things and |= causes odd results on at least amd64.
+      (Closes: #419024)
+
+  [ Mohammed Adnène Trojette ]
+  * Release.
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Sat, 30 Jun 2007 12:58:41 +0200
+
+devscripts (2.10.5) unstable; urgency=low
+
+  [ Luk Claes ]
+  * debc: Make reporting on a single deb work again (Closes: #419487).
+
+  [ Adam D. Barratt ]
+  * debchange: Add gutsy (gibbon) and UNRELEASED to the list of recognised
+    Ubuntu distributions
+  * rc-alert
+    + Update HTML parsing to support the new structure of the RC bug page
+    + The "I" tag can now also mean "lenny-ignore"
+    + Add "[E]xperimental" to the distribution list, and remove "X"
+      ("not in testing")
+  * bts
+    + Allow the use of SMTP instead of sendmail. Thanks to Josh Triplett for
+      the patch (Closes: #420847)
+    + Fix syntax error when reverting to default SENDMAILCMD
+    + When cleaning up a bug's cache entries, also remove {raw,status}.mbox
+    + Fix pod formatting so that the description of the "fixed" command
+      actually appears in the manpage.
+    + Add an option to not cache resolved bugs (Closes: #340259, #378342)
+    + Fix URL parsing to account for recent HTML changes (Closes: #429236)
+    + Always download version graphs rather than the new "options page"
+    + Fix attachment parsing code to handle "filename="
+  * mass-bug: Fix syntax error when reverting to default SENDMAILCMD
+  * dd-list: Treat teams.debian.net addresses as mailing lists rather
+    than individuals
+  * tagpending: Update license statement to GPL >= 2
+  * uscan: Ensure --dehs generates well-formed XML (Closes: #426996)
+
+  [ Martin Zobel-Helas ]
+  * debchange: Add volatile to the list of recognised Debian distributions
+  * debchange: Add backports to the list of recognised Debian distributions
+
+  [ Christoph Berg ]
+  * rmadison: -t, --time: show projectb snapshot date
+
+ -- James Vega <jamessan@debian.org>  Tue, 19 Jun 2007 13:57:22 +0100
+
+devscripts (2.10.4) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * grep-excuses: make the maintainer regex more restrictive to avoid accidental
+    matches (Closes: #419462)
+  * debchange: make adding multiple changelog blocks for a single maintainer optional
+    (Closes: #419880)
+  * Conflict with versions of kdesdk-scripts which shipped /usr/bin/licensecheck
+    (Closes: #419754)
+  * Ensure DEBCHANGE_TZ is always set (Closes: #419863)
+  * Add myself to Uploaders
+
+  [ Julian Gilbey ]
+  * bts: update tags list to include lenny
+
+  [ Luk Claes ]
+  * debian/control: Add myself to Uploaders
+  * licensecheck: Escape @kde otherwise build fails
+
+ -- Luk Claes <luk@debian.org>  Mon, 23 Apr 2007 20:22:58 +0200
+
+devscripts (2.10.3) unstable; urgency=low
+
+  [ Adam D. Barratt ]
+  * licensecheck: New script to determine which license(s) source files
+    are under (Closes: #382148)
+  * bts: Add claim / unclaim support, based on a patch by zobel
+    (Closes: #385957)
+  * debchange: don't add duplicate maintainer blocks in multi-maintainer
+    mode (Closes: #383542)
+  * Better document debchange's dependencies (Closes: #417633)
+  * tagpending
+    + Make the wnpp check introduced in 2.10.0 optional as it can be very expensive
+    + Improve error message for skipped bugs (Closes: #418884)
+  * rmadison: handle missing liburi-perl more gracefully
+
+  [ Mohammed Adnène Trojette ]
+  * bts: add an --cc-addr to allow sending carbon copies of emails sent
+    to control@bugs.debian.org. (Closes: #333371)
+  * debchange: drop NMU revision when doing a QA upload. (Closes: #415995)
+  * debclean: add a -d option to skip build dependencies check.
+    (Closes: #370066)
+
+  [ Julian Gilbey ]
+  * debchange: load URI::Escape module carefully to give a meaningful
+    warning message if the liburi-perl package is not installed
+
+  [ Christoph Berg ]
+  * uscan: use a different project in the example for the sf.net redirector.
+    (Closes: #418978)
+  * debchange: optionally set changelog timezone from DEBCHANGE_TZ.
+    (Closes: #417261)
+
+ -- Christoph Berg <myon@debian.org>  Mon, 16 Apr 2007 14:56:59 +0200
+
+devscripts (2.10.2) unstable; urgency=low
+
+  * The "zobel's birthday" upload.
+
+  [ Adam D. Barratt ]
+  * scripts/Makefile: Override make's default .sh rule so that the package
+    version string actually gets written to the scripts
+  * debian/rules: Fix check for unwanted debug information to account for
+    bts now being in scripts/
+  * Fix encoding of French manpages (Closes: #415240)
+  * bts
+    + Update prunecache() for maintainer / status mboxes and version graphs
+    + Simplify version graph handling code (should now handle all graphs
+      correctly)
+    + Add support for fixed / notfixed (Closes: #340838)
+  * Documentation fixes, based on suggestions from Adeodato Simó
+    + debian/control: update description of debcommit
+    + README: replace reference to bazaar with bzr
+    + nmudiff.1: add missing unbold after an option
+    + dscverify.pl: remove obsolete comment
+      (Closes: #415486)
+
+  [ Martin Zobel-Helas ]
+  * Adding myself to Uploaders
+  * bts
+    + add option to only get bugs never downloaded before (Closes: #366925)
+    + dont forward bugs within the bts (Closes: #406632)
+  * include sample procmail script for autosubscribing to bugs
+    (Closes: #353048)
+
+  [ Christoph Berg ]
+  * debcommit: support hg/mercurial and revamp manpage a bit.
+  * debian/control: suggest mercurial and svk, wrap some fields for easier
+    readability.
+  * dpkg 1.14.0 will obsolete 822-date, apply patch by Guillem Jover to use
+    `date -R` (Closes: #415794)
+
+  [ James Vega ]
+  * Update debchange, rmadison, and tagpending to uri escape package names
+    given to wget.  (Closes: #416004)
+  * debian/control: Suggest liburi-perl and add to list of packages used by
+    debchange, rmadison, and tagpending.
+
+ -- Martin Zobel-Helas <zobel@debian.org>  Sat, 24 Mar 2007 10:21:02 +0100
+
+devscripts (2.10.1) unstable; urgency=low
+
+  * debian/control: set Maintainer to pkg-devscripts@teams.debian.net.
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Sat, 17 Mar 2007 00:07:02 +0100
+
+devscripts (2.10.0) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * debchange: fix Ubuntu's distro codename check (bash regexp!)
+  * control: change maintainer name to mailing list (Closes: #411591)
+
+  [ Mohammed Adnène Trojette ]
+  * debian/control:
+     + add myself to Uploaders.
+     + suggest bzr, not bazaar (deprecated). (Closes: #414051)
+     + suggest git.
+  * po4a/po/fr.po: update French manpage translation (Closes: #400568)
+     + Patch from Julien Cristau.
+  * debdiff: allow use with no argument (Closes: #369691)
+     + Patch from Julien Danjou.
+  * deb-reversion: change license to Artistic 2.0. (Closes: #381731)
+
+  [ Christoph Berg ]
+  * Also joining the team
+  * dget: consult apt-get source for missing files (Closes: #394809)
+  * rmadison: new upstream version, supports querying other archives
+    (specifically backports.org)
+
+  [ Stefano Zacchiroli ]
+  * package maintenance changes
+    + debian/control:
+      - added myself as an uploader
+      - added XS-Vcs-Browser field
+      - bumped debhelper deps to >> 5 (changed debian/compat accordingly)
+    + added debian/svn-deblayout with the default tags dir
+    + moved examples under examples/ (changed debian/examples accordingly)
+    + moved scripts under scripts/, created subordinated Makefile there
+    + debian/{dirs,links}: delegated directory/symlink creation to dh_link
+    + debian/manpages: delegated manpage installation to dh_installman
+    + scripts/Makefile: removed the need of explicitly listing scripts
+  * bts: list the available severities in the manpage (Closes: #412186)
+  * bts: clarified the meaning of "owner" in the docs (Closes: #403859)
+  * checkbashisms: add detection of "${!prefix"-like bashisms, patch from Adam
+    D. Barratt (Closes: #409028)
+  * dd-list: enable (-b cmdline flag) output of binary package names, patch
+    from Frank Küster (Closes: #403207)
+  * debcommit: added support for specifying the list of files to commit on
+    cmdline, patch from Damyan Ivanov (Closes: #381152)
+  * mass-bug: enable (--severity cmdline flag) the specification of the
+    severity of the reported bugs, based on a patch from Adam D. Barratt
+    (Closes: #386124)
+  * tagpending: enable (-c cmdline flag) tagging bugs as confirmed in addition
+    to tagging them as pending, based on a patch from Adam D. Barratt
+    (Closes: #382884)
+  * tagpending: factorized some code for delivering info to the user
+  * tagpending: added an extra check to ensure that bugs to be tagged belong
+    to the current package
+  * uscan: added --force-download to force download when changelog is in sync
+    with upstream version, based on a patch from Ian Wienand (Closes: #364116)
+
+  [ Adam D. Barratt ]
+  * Joining the team
+  * COPYING: update FSF postal address
+  * debian/copyright:
+    - annotate-output is GPLv2 only
+    - whodepends is in the public domain
+  * tagpending: modify bug list display code to indicate whether --noact was
+    used
+  * tagpending: support marking wnpp bugs as pending (Closes: #398178)
+  * debc.1: Fix reference to debi (thanks, Frans Pop)
+  * {cvs-,}debc.1: Fix reference to installing packages (thanks, Frans Pop)
+  * debc: Add support for udebs, based on a patch from Frans Pop
+    (Closes: #404952)
+  * svnpath: is GPLv2 or later
+  * bts:
+    - handle new status / maintainer mbox links when downloading bugs
+      (Closes: #414200)
+    - use the maintainer mbox as the default mbox (i.e. for --mbox and
+      cached as $bug.mbox). The "raw" mboxes are now saved as $bug.raw.mbox
+    - attempt to download version graphs in "full caching" mode
+  * dscverify: Add --nosigcheck (Closes: #397720)
+  * uscan: Fix typo in error message when combining --report-status and
+    --verbose
+  * manpage-alert: New script to locate binaries without corresponding
+    manpages (Closes: #414907)
+
+  [ James Vega ]
+  * debian/control: Add myself to the Uploaders list.
+  * bts: chdir back to the invoking directory before leaving prunecache()
+    (Closes: #413793)
+  * scripts/Makefile: Specify an include directory when running Perl in order
+    to handle the source restructuring.
+
+ -- Mohammed Adnène Trojette <adn+deb@diwi.org>  Fri, 16 Mar 2007 21:53:35 +0100
+
+devscripts (2.9.27) unstable; urgency=low
+
+  * checkbashisms: check for 'select' (thanks to James Abley, Ubuntu user)
+  * debchange: add support for Ubuntu's distro codenames
+  * debchange: add support for ~ in version numbers (Closes: #400173)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri,  1 Dec 2006 08:02:53 +0000
+
+devscripts (2.9.26) unstable; urgency=low
+
+  * deb-reversion: update to new upstream version (Closes: #329374)
+  * debc/debi: handle specifying changes file on command line again
+    (Closes: #398152)
+  * debc/debi: handle arch all packages correctly (oops!) (Closes:
+    #398597)
+  * dget: new upstream version, supports looking in other places for
+    files, new binnmu version scheme, --no-cache, file:// and copy:// and
+    fixed bug that --help/--version required other arguments (Closes:
+    #385954, #356208)
+  * nmudiff: allow configuration of whether to send report to existing
+    bugs or create a new bug (Closes: #397912)
+  * uscan: avoid spurious undefined warning if --package is used
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 17 Nov 2006 13:03:03 +0000
+
+devscripts (2.9.25) unstable; urgency=low
+
+  * nmudiff: reinstall mutt as mailer of choice, but now provide the
+    option to use it or not (Closes: #397641)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  8 Nov 2006 20:39:24 +0000
+
+devscripts (2.9.24) unstable; urgency=low
+
+  * debc/debi: handle multi-arch .changes files (Closes: #385673)
+  * debchange: allow non-official distributions (Closes: #397546)
+  * debdiff: handle files moving between multiple packages correctly
+    (Closes: #392977)
+  * debuild: make -B -b work sensibly (Closes: #396232)
+  * debuild: don't check for .orig.tar.gz if we're doing a binary-only
+    build (Closes: #394627)
+  * dget: improve manpage (Closes: #376237)
+  * dget: warn and exit with error if URL cannot be downloaded (Closes:
+    #376932)
+  * mass-bug: don't wrap signatures (Closes: #386123)
+  * nmudiff: clean up properly, and abort on editor error
+  * tagpending: make -v mean verbose; add long option names (Closes:
+    #387293)
+  * uscan: set HTTP user agent name (Closes: #397354)
+  * wnpp-alert: check return status of wget calls (Closes: #364479)
+  * [I18N] Include new versions of French manpages (Closes: #379614)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  8 Nov 2006 19:16:22 +0000
+
+devscripts (2.9.23) unstable; urgency=low
+
+  * bts: automatically create cache directory when bts show is used
+    (Closes: #370205)
+  * debchange: can change urgency and distro using -D and -u flags
+    (Closes: #373271)
+  * debuild: check for either .orig.tar.gz or a .orig directory, as
+    dpkg-source does (Closes: #366286)
+  * dget: introduce --insecure option for allowing downloading from site
+    with self-signed certificate (Closes: #393942)
+  * nmudiff: much improved behaviour:
+    - remove dependency on mutt (use /usr/sbin/sendmail instead)
+    - automatically mail the relevant bugs rather than submit a new bug
+      report; this can be changed using the --new command line option
+    - allow for aborting, changing the bug number submitted to and editing
+      the whole message
+    - checking for errors rather than making a mess of things
+    - cleaning up the manpage
+    (Closes: #378264, #386147, #370056)
+  * uscan: fix handling of ftp directory listings with number-only
+    directory names (Closes: #372609)
+  * uscan: warn if no parentheses in one-term version 2/3 watchfile
+    (Closes: #375557)
+  * uupdate: handle ~ in version numbers (Closes: #397100)
+  * who-uploads: add GPG key ID to "unrecognised key" message (Closes:
+    #397293)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  6 Nov 2006 18:11:46 +0000
+
+devscripts (2.9.22) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * Makefile: remove -ldl flag in libvfork linker line (from checklib
+    output, see http://rerun.lefant.net/checklib)
+  * control: make list render nicely with new aptitude list-handling
+    facility (Closes: #388856)
+  * bts: documentation for show usertag=...: s/user=/users=/
+  * checkbashisms: make reasons for concern explicit, and show whole line
+    of original script, not just matched fragment
+  * dget: support ~ in package version numbers (Closes: #389482)
+  * rmadison: make curl quiet (important when piping the output of
+    rmadison)
+  * who-uploads: don't bother with iconv -t option; it's the default
+    behaviour anyway (see Bug#384835)
+
+  [ Joshua Kwan ]
+  * Remove myself from Uploaders. -ENOTIME :(
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 11 Oct 2006 20:16:02 +0100
+
+devscripts (2.9.21) unstable; urgency=low
+
+  * bts: reportspam/spamreport can now take multiple bug numbers
+  * bts: add support for forcemerge (Closes: #369050, #380041)
+  * bts: always include "# Automatically generated email" message (thanks
+    to Justin Pryzby for spotting this)
+  * bts: chdir back to original directory after downloading files (Closes:
+    #372546)
+  * bts: don't automatically use a -t option unless we are using
+    /usr/sbin/sendmail or /usr/sbin/exim* (Closes: #373664)
+  * bts: allow mailreader setting to contain spaces (Closes: #370208)
+  * checkbashisms: check for $((cnt+1)), echo -n/-e, exec -c/-l/-a, let
+    and $RANDOM (Closes: #369851, #377195, #378406, #383613)
+  * dd-list: treat lists.alioth.debian.org like lists.debian.org (Closes:
+    #373809)
+  * debchange: clarified name of changelog file in more error/warning
+    messages (see bug#368961)
+  * debchange: can specify a NEWS file to edit (still defaults to
+    debian/NEWS) (Closes: #384676)
+  * debdiff: fixed --move(-regex) options (broken by #203781 and #230702
+    fix in 2.9.17) (Closes: #370388)
+  * dpkg-genbuilddeps: clean up if statement (Closes: #365372)
+  * nmudiff: stop using dpkg-parsechangelog to avoid barfing over broken
+    changelogs (Closes: #374773)
+  * rc-alert: now pick up all installed packages (Closes: #370463)
+  * uscan: fix handling of recursive http URLs (Closes: #377518)
+  * who-depends: convert output into locale charset (Closes: #384835)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 29 Aug 2006 11:35:00 +0100
+
+devscripts (2.9.20) unstable; urgency=low
+
+  * debuild: set DEB_{BUILD,HOST}_* variables as dpkg-buildpackage does
+    (Closes: #364256)
+  * debuild: improve missing .orig.tar.gz warning
+  * uscan: mention upgrading points in the manpage.
+  * uupdate: allow upstream version numbers to use A-Z (Closes:#367055)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 17 May 2006 07:27:17 +0100
+
+devscripts (2.9.19) unstable; urgency=low
+
+  * debuild: fix -I and -i option handling (Closes: #363368)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 20 Apr 2006 21:41:51 +0100
+
+devscripts (2.9.18) unstable; urgency=low
+
+  * uscan: fix parsing howler: uscan would never work like this - oops!
+    (Closes: #363338)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 18 Apr 2006 17:58:20 +0100
+
+devscripts (2.9.17) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * several Perl scripts: make sure we set the SIGPIPE handler before
+    doing an open '-|'
+  * bts: actually support the --sendmail option rather than just say we
+    do! (Closes: #293715)
+  * bts: fix URI in manpage (Closes: #360783)
+  * bts: fix unblock NNNNN by|with NNNNN handling (Closes: #361029)
+  * bts: fix uninitialized value bugs (Closes: #362187)
+  * debchange: add --qa option (Closes: #358278)
+  * debdiff: check file permissions and new/deleted control files (Closes:
+    #203781, #230702)
+  * debdiff: option --controlfiles to allow comparing postinst
+    etc. (Closes: #218222)
+  * debrelease, debc, debi: support searching for .changes and .debs in a
+    directory other than the parent of the currnent source directory with
+    --debs-dir command line and DEBRELEASE_DEBS_DIR configuration file
+    options (Closes: #309362)
+  * debuild: emulate dpkg-buildpackage rather than call it (unless
+    dpkg-cross is installed); this provides a hook facility (Closes:
+    #226947)
+  * debuild: complains if debian revision in native version (Closes:
+    #262525)
+  * dget: fix manpage type (Closes: #361877)
+  * mass-bug: new script (Closes: #355505)
+  * pts-subscribe: fix config boilerplate to actually set default timeout
+    (Closes: #360857)
+  * pts-subscribe.1: improve the wording of the manpage (Closes: #360027)
+  * svnpath: fix svk info error (Closes: #361979)
+  * uscan: *really* fix the uninitialized value bug (Closes: #356959,
+    #361319)
+  * uscan: provide downloadurlmangle and filenamemangle options to mangle
+    the URL and filename before attempting to perform and save the
+    download respectively (Closes: #327404)
+  * uscan: fix manpage typo (dversionmangle) (Closes: #362202)
+  * uscan: provide "versionmangle" option which does both
+    {u,d}versionmangle (Closes: #350455)
+  * uupdate: correct syntax error (Closes: #360995)
+  * who-uploads: new script to determine most recent uploaders of a
+    package to the Debian archive (Closes: #347809)
+
+  [ Joey Hess ]
+  * dd-list: actually support white-space separate pages names from stdin,
+    as documented on man page.
+  * rmadison: escape "+" in package names in http query string
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 16 Apr 2006 19:43:15 +0100
+
+devscripts (2.9.16) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * Fix 2.9.15 changelog to refer to pts-subscribe, not pkg-subscribe
+    (Closes: #353413)
+  * bts: be stricter about bug number cruft (Closes: #356318)
+  * bts: add spamreport as a synonym for reportspam
+  * debcommit: add --help, --version
+  * debdiff: fix unnecessary chdir (Closes: #354862)
+  * debdiff: compare control files in multi-deb binary packages - this was
+    just a coding problem, and could have been done for ages (Closes: #354868)
+  * pts-subscribe: Depends on the "at" package (Closes: #353502)
+  * uupdate: handle already-unpacked source code archives (Closes: #286253)
+  * uscan: avoid warnings on one-word actions (Closes: #356959)
+  * uscan: clarify manpage regarding spaces in URLs (Closes: #359190)
+  * debian/rules: remove mention of DH_ALWAYS_EXCLUDE (see Bug#352626)
+
+  [ Joey Hess ]
+  * debcommit: Add program name to all error messages.
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 29 Mar 2006 16:20:17 +0100
+
+devscripts (2.9.15) unstable; urgency=low
+
+  * bts: handle bts show pkg archive=yes more gracefully
+  * bts: require mailx | mailutils (mailutils provides mailx anyhow)
+  * bts: always allow Bug#NNNNNN: or #NNNNN etc. in commands (Closes:
+    #353049)
+  * bts: support caching RC bug pages (Closes: #236312)
+  * bts: support subscribe/unsubscribe commands (Closes: #339661)
+  * bts: support alternative sendmail command (Closes: #343752)
+  * debdiff: handle multi-binary packages and allow comparison of control
+    files from each corresponding pair of binary packages - thanks to
+    Robert Luberda <robert@debian.org> for the patch (Closes: #174858)
+  * general: improve getopt handling
+  * pts-subscribe: new script to subscribe to the PTS for a limited time
+    period (Closes: #202866)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 16 Feb 2006 16:17:15 +0000
+
+devscripts (2.9.14) unstable; urgency=low
+
+  * deb-reversion: correctly handle multiword hooks (Closes: #351250)
+  * deb-reversion: die if not being run as root or using fakeroot
+  * deb-reversion: major improvements to manpage
+  * debchange: fall back on NAME envvar if DEBFULLNAME is not defined
+    (Closes: #340292)
+  * debrelease: allow it to run in normal situations again (broken when
+    fixing #322926, #217546)
+  * uscan: always pass --no-symlink to uupdate as uscan does the
+    symlinking itself (Closes: #345874)
+  * uscan: handle multi-word actions
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 13 Feb 2006 11:33:47 +0000
+
+devscripts (2.9.13) unstable; urgency=low
+
+  * Don't include .svn directory in md5sums (Closes: #352273)
+  * bts: fix new caching code (thanks to Frank Lichtenheld for this one)
+    (Closes: #352476)
+  * bts: correctly handle DEBEMAIL='Name <email>' (Closes: #342883)
+  * debcommit: handle commit messages for git-based setups (Closes:
+    #352004)
+  * uscan: check sanity of downloaded files (Closes: #303958)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 12 Feb 2006 12:46:22 +0000
+
+devscripts (2.9.12) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: show/bugs: update to recognise new URL formats in BTS pages
+    (based on bug #349259)
+  * bts: show/bugs: allow options with from:<submitter> etc. to work
+    correctly (Closes: #345464)
+  * bts: accept "submitter nnnnn !" format (Closes: #348349)
+  * debchange: update to recognise new URL formats in BTS pages (Closes:
+    #349259)
+  * debchange: quitting the editor with -e option and no changes no longer
+    modifies the changelog (Closes: #349091)
+  * debuild: dpkg-buildpackage -> dpkg-buildpackage(1) in EXAMPLES section
+    of manpage (Closes: #351363)
+  * nmudiff: include in package (Closes: #349337)
+  * nmudiff: improved old version code from Steinar using supplied patch
+    (Closes: #351791)
+
+  [ Joey Hess ]
+  * Add rmadison program by Christoph Berg. Closes: #350335
+
+  [ Nicolas François ]
+  * Makefile
+    build the man pages in the `all' rule
+    remove the translated manpages and update the POT/POs in `clean'
+  * po4a/add_fr/translator_french.add moved to po4a/fr/translator_man.add
+    The addendum is moved to the language directory.
+    It was renamed because a pod and dbk addendum will be added latter
+  * po4a/devscripts.fr.po moved to po4a/po/fr.po, and updated
+    This is important for the l10n robot used to find the POs that need to
+    be updated
+  * po4a/devscripts.pot moved to po4a/po/devscripts.pot
+  * po4a/devscripts-po4a.conf
+    update due to the new file hierarchy
+  * po4a/fr/*.[15]
+    The translated man pages were removed. They are generated at build
+    time.
+    (Closes: #347671)
+
+  [ Joey Hess ]
+  * Add build dep on po4a to support above changes.
+  * Add dget program by Christoph Berg. Closes: #332286
+  * Patch from Matt Kraai to add --exclude support to debdiff. Closes: #328382
+  * debsign: don't abort or complain if stty fails, as might happen
+    if run w/o a controlling terminal. Closes: #345636
+
+ -- Joey Hess <joeyh@debian.org>  Thu,  9 Feb 2006 13:47:03 -0500
+
+devscripts (2.9.11) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: allow found to take only one argument (Closes: #342515)
+  * svnpath: fix .SH NAME line in manpage (Closes: #342059)
+  * manpage typos: thanks to A Costa and Niko Tyni for these (Closes:
+    #342295, #342296, #342297, #342298, #342299, #342300, #342301,
+    #342302, #342770); I have not changed "manpage" to "man page", though,
+    as the former is standard UN*X terminology
+  * debchange, debuild, debrelease, debsign, debrsign: handle multiarch
+    changes files (Closes: #322926, #217546)
+
+  [ Joey Hess ]
+  * debcommit: add support for git, thanks to Panagiotis Issaris.
+    Closes: #343694
+  * nmudiff: new program by Steinar H. Gunderson.
+  * nmudiff: use sensible-editor to better comply with policy
+  * nmudiff: wrote a man page
+  * nmudiff: improve old version finding code
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 20 Jan 2006 14:36:27 -0500
+
+devscripts (2.9.10) unstable; urgency=low
+
+  * bts: handle 8-bit encodings in DEBFULLNAME for "From:" field of emails
+    sent (Closes: #339657)
+  * bts: submitter and reassign accept multiple bug numbers (Closes:
+    #237726)
+  * bts: document "it" for referring to previous bug number
+  * debchange: provide -m/--maintmaint switch to use the maintainer name
+    from the most recent changelog entry rather than using the environment
+    variables (Closes: #232000)
+  * debcommit: add support for bzr (Closes: #340301)
+  * debuild: improve examples in manpage (Closes: #326881)
+  * dpkg-depcheck: completely rewrite symlink handling code to fix bug
+    where /usr was a symlink (Closes: #246006)
+
+ -- Julian Gilbey <jdg@debian.org>  Sat,  3 Dec 2005 20:24:38 +0000
+
+devscripts (2.9.9) unstable; urgency=low
+
+  [ Filippo Giunchedi ]
+  * uscan: add option to set LWP timeout, patch by Stephen Quinney
+    (Closes: #335181)
+
+  [ Julian Gilbey ]
+  * bts: fix handling of arguments to show command; translate "tag:..."
+    into "include=..." when given as a second argument (Closes: #338171)
+  * bts: don't treat something like "bts close #123456" as a comment
+    (Closes: #337737)
+  * debchange: reapply --edit patch from bug#234434 (Closes: #336632)
+  * debcommit: fix version grepping in changelog parsing (Closes: #336025)
+  * debdiff: add --quiet switch and set exit status according to diff
+    status (Closes: #337829)
+  * debuild: improve grammar of usage message
+
+  [ Joey Hess ]
+  * bts: sleep a default of 5 seconds between bts cache downloads
+    to avoid hammering the underprovisioned debian BTS/master archive server.
+  * bts: add --cache-delay parameter to tune this
+
+ -- Joey Hess <joeyh@debian.org>  Mon, 21 Nov 2005 10:46:49 -0500
+
+devscripts (2.9.8) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: don't require user for usertags (Closes: #326560)
+  * bts: fix manpage typos (Closes: #328972, #328974, #328477)
+  * bts: fix bug in getting timestamps
+  * debdiff: handle filenames with spaces (Closes: #334145)
+  * debdiff: compare symlinks more carefully (Closes: #327090)
+  * dd-list: support displaying uploaders with new --uploaders/-u option
+    (Closes: #328459)
+  * uscan: correctly handle version 2 watchfiles with multiple groups
+    (Closes: #327258)
+  * uupdate: handle csae of debian/ directory in upstream sources (Closes:
+    #320836)
+  * uupdate: fix --no-symlink option (Closes: #333390)
+  * don't allow non-bash scripts in the package (Closes: #331223)
+
+  [ Joey Hess ]
+  * debchange: -r needs to enable multi-maintainer markers when releasing a
+    package if the releaser is not the same as the only person who made any
+    changes.
+
+  [ Joshua Kwan ]
+  * Clarify annotate-output sub-description in control file.
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 16 Oct 2005 13:07:30 +0100
+
+devscripts (2.9.7) unstable; urgency=low
+
+  * bts: oops, left out a space in usertags command
+
+ -- Julian Gilbey <jdg@polya.uklinux.net>  Sun,  4 Sep 2005 01:51:24 +0100
+
+devscripts (2.9.6) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: tags: revert change in 2.9: reinstate "fixed-in-experimental" (it
+    still appears to be in use) and don't need "help" twice (Closes: #325480)
+  * bts: show/cache: lots of changes to make compatible with new BTS HTML
+    pages (Closes: #325966)
+    Also store devscripts version with cached files, so that such changes
+    can be handled more smoothly in future.
+  * bts: small cleanups for output messages, minor bugfixes etc.
+  * bts: introduce spam command to report spam in bug reports
+  * bts: support new user/usertags commands (Closes: #326265)
+  * checkbashisms: correctly detect "function" keyword (Closes: #324599)
+  * uscan: report on package being scanned when --report is used (Closes:
+    #324102)
+  * uscan: provide --report-status option to distinguish from --report,
+    which is now quieter (Closes: #325097, #325980)
+
+  [ Filippo Giunchedi ]
+  * uscan: fixed some repeated tags when used with --dehs
+  * uscan: expand some entities in dehs_output
+  * bts: download bugs.css and use it (Closes: #323781)
+  * bts: remove some old cache handling cruft since sarge is released
+
+  [ Joey Hess ]
+  * dd-list: add --dctrl option for quick reading from grep-dctrl.
+  * grep-excuses: remove special case for running locally on ftp-master,
+    which breaks every time ftp-master moves (or directories are reorganised),
+    and only saved some loopback traffic anyway.
+  * grep-excuses: fix non-robust html parsing that caused ugly messages
+    when it failed to find </ul> at the end of the excuses file due
+    to reformatting.
+
+ -- Julian Gilbey <jdg@polya.uklinux.net>  Sun,  4 Sep 2005 01:08:47 +0100
+
+devscripts (2.9.5) unstable; urgency=low
+
+  [ Joey Hess ]
+  * bts: Make block command accept "by" or "with" after the blocked bug,
+    but do not make either mandatory.
+  * debcommit: try to add support for svk
+
+  [ Julian Gilbey ]
+  * bts: fix clone command (Closes: #321798)
+  * debchange: add comment to manpage about building sponsored uploads
+    (Closes: #321960)
+  * debchange: introduce --create option: allows creation of changelogs /
+    NEWS files (Closes: #220755, #322716), and inform user about this
+    option if changelog / NEWS file is not found (Closes: #316661)
+  * debchange: allow option (--nomultimaint) to not use this
+    multi-maintainer changelog format
+  * debsign: fix noecho behaviour for interrupted gpg call (Closes:
+    #321684)
+  * uscan: --report actually reports useful information (Closes: #313323)
+  * wnpp-alert: RFA -> RFH (Closes: #321707)
+
+  [ Joey Hess ]
+  * bts: Deal with recent bts changes in html munging code.
+
+ -- Joey Hess <joeyh@debian.org>  Wed, 17 Aug 2005 12:08:09 -0400
+
+devscripts (2.9.4) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: fix forwarded command (Closes: #320703)
+  * debchange: un-html-ise bug titles when using --closes
+
+  [ Joey Hess ]
+  * bts: Support new block and unblock commands.
+
+ -- Joey Hess <joeyh@debian.org>  Wed,  3 Aug 2005 22:13:47 -0400
+
+devscripts (2.9.3) unstable; urgency=low
+
+  [ Filippo Giunchedi ]
+  * added deb-reversion by martin f krafft (Closes: #284642)
+  * modified Makefile to handle docbook-generated manpages and build-depend on
+    xsltproc + docbook-xsl
+
+  [ Joey Hess ]
+  * Fix suggests on subversion.
+  * Other cleanups to references to revision control programs.
+
+  [ Joshua Kwan ]
+  * debchange: Fix dch -D behavior by adding some parentheses. closes: #319687
+  * Add French manual pages, thanks to the French l10n team. closes: #292780
+
+  [ Julian Gilbey ]
+  * bts: support for notfound command (Closes: #320569)
+  * debchange: change --closes command output format to place "(Closes:
+    #nnnnn)" at end of changelog entry
+  * debchange: don't require changelog to be modified when -e or -r option
+    used
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 31 Jul 2005 14:50:10 +0100
+
+devscripts (2.9.2) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * debcommit: fix recognition of cvs trees
+
+  [ Joey Hess ]
+  * bts: Fix over-broad cgi url mangling to avoid mangling urls that are part
+    of bug reports.
+  * bts: fix retitle command, broken by extra param change in 2.9.
+    Closes: #319367
+
+ -- Joey Hess <joeyh@debian.org>  Thu, 21 Jul 2005 12:57:47 -0400
+
+devscripts (2.9.1) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * annotate -> annotate-output renaming, removing package conflict
+    (closes: #319271, #319289)
+  * debcommit: Apply Colin Watson's arch patch (see #319072)
+
+  [ Joey Hess ]
+  * debchange: Fix parsing of --release-heuristic switch.
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 21 Jul 2005 09:51:17 +0100
+
+devscripts (2.9) unstable; urgency=low
+
+  [ Julian Gilbey ]
+  * bts: fix bts --mbox show nnnn after bts show nnnn
+  * bts: add etch and etch-ignore tags (closes: #312493)
+  * bts: tags: remove "fixed-in-experimental" and add "help"
+  * debchange: use word "file" in manpage for --changelog option (closes:
+    #301917)
+  * debchange: debian/NEWS.Debian should have been debian/NEWS (closes:
+    #303886)
+  * debuild: correct manpage typo (closes: #309825)
+  * debdiff: handle debdiff on two identically-named native .dsc files
+    (closes: #307318)
+  * grep-excuses: no longer cache web page, as per bug#309802 (closes:
+    #225955)
+  * rc-alert: no longer automatically create cache directory, as per
+    bug#309802
+  * uscan: handle annoying error message (closes: #303607)
+  * uscan: mangle http://sf.net/ to use Filippo's sf.php script and work
+    (closes: #242884)
+  * uscan: handle tar.bz2 packages (related to #317331)
+  * uupdate: handle dpkg 1.13 source format allowing bz2-compressed files
+    and .debian.tar.gz files (closes: #317331)
+  * wnpp-alert: accept -h and -v short options (closes: #304240)
+  * wnpp-alert: don't cache such small files (closes: #309802)
+  * wnpp-alert: check help_requested file and handle packages with no
+    descriptions (closes: #318737)
+
+  [ Joshua Kwan ]
+  * Add a new script whodepends, written by Moshe Zadka, to check
+    which maintainers' packages depend on a particular package.
+    closes: #175832 (longstanding, huh?)
+  * checkbashims: show usage if 0 arguments provided.
+
+  [ Filippo Giunchedi ]
+  * debdiff: handle .udeb files if found in .changes (closes: #215477)
+  * debchange: add support for forcing a lower version
+    (-b/--force-bad-version) (closes: #251436, #183424)
+  * debsign: support for signing .commands files (Closes: #224523)
+  * added annotate.sh and annotate.1
+  * added archpath.sh and archpath.1, patch by Colin Watson (Closes: #319072)
+  * export DH_ALWAYS_EXCLUDE in debian/rules as we are not interested in
+    .svn/CVS directories
+
+  [ Joey Hess ]
+  * debchange: support generating multi-developer changelogs, currently only
+    supporting the format used in this changelog entry. If multiple developers
+    are detected it will automatically add [ Full Name ] lines to disambiguate
+    who did what.
+  * debdiff: fix debdiff of dsc files to work with new dpkg-dev.
+    Closes: #313293, #314811
+  * Add debcommit, a script to commit to svn (or cvs) based on the contents of
+    the changelog, and svnpath, which it uses to generate svn tags.
+    Closes: #316577
+  * debchange: Don't allow --closes in --news mode.
+  * debchange: In --news mode, don't include "* Non-maintainer upload."
+    entries
+  * debchange: In --news mode, separate each new entry with a blank line
+    and do not add bullets, to encourage not writing NEWS files like changelog
+    files. Closes: #316660
+  * debchange: Add --release-heuristic and DEBCHANGE_RELEASE_HEURISTIC
+    options to control how it tells if a package was released.
+  * debchange: Add new "changelog" release heuristic, which looks
+    for a distribution of "UNRELEASED" in a changelog (and adds such a
+    distribution by default when making new entries). Useful for packages
+    maintained/released by multiple people.
+  * debchange: Patch from David B Harris to implement --edit option.
+    Closes: #234434
+  * Add dd-list, originally by Lars Wirzenius, rewritten in perl.
+    Closes: #316102
+  * Ignore whitespace around package names in dd-list --stdin.
+  * debchange: Add --release option.
+  * bts: update and apply Filippo's patch to add a progress display while
+    caching bugs. Closes: #237842
+  * tagpending.1: Remove obsolete note about it using LDAP.
+  * bts: add support for new version tracking extensions in the Debian BTS
+    control interface.
+  * bts: add support for "bts show package dist=stable" and the like.
+  * bts: check for additional options and die
+  * tagpending: add missing space after package limit when calling bts
+
+ -- Filippo Giunchedi <filippo@debian.org>  Wed, 20 Jul 2005 14:33:05 +0200
+
+devscripts (2.8.14) unstable; urgency=low
+
+  * uscan: fix second showstopper (broken URL parsing) (closes: #301169)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 24 Mar 2005 14:33:05 +0000
+
+devscripts (2.8.13) unstable; urgency=low
+
+  * bts: provide --quiet option (closes: #299344)
+  * dpkg-depcheck: improve sgml catalog regexp (closes: #295845)
+  * uupdate: improve error message (closes: #267317)
+  * uscan: fix showstopper (closes: #301177)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 24 Mar 2005 09:13:15 +0000
+
+devscripts (2.8.12) unstable; urgency=low
+
+  * bts: allow --mbox etc. options to appear after the show/bugs keyword
+    as well as before, and similarly with the "cache" command
+  * bts: allow bug numbers to end with a ":" (closes: #300965)
+  * debchange: use access rather than stat for checking file permissions
+    (closes: #298659); also do same to debi and debuild
+  * debdiff: don't hardcode wdiff path
+  * debsign: correct obsolete head syntax (closes: #300844)
+  * uscan: watch files are now version=3 (should have done this with
+    2.8.11, oops)
+  * uscan: now support DEHS-style output and --watchfile etc options
+  * uscan: also state upstream URL for newer versions (closes: #230813)
+  * uscan: handle funny upstream version numbers using multiple groups
+    (closes: #282255) and version-number mangling, both for upstream
+    version numbers (closes: #266095) and Debian version numbers (closes:
+    #261385)
+  * uscan: support --rename option to rename file instead of symlinking it
+    (closes: #227952)
+  * uscan: call find with -follow option: this should not cause any
+    problems (if it does, we can make it optional) (closes: #243758)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 15 Mar 2005 18:41:25 +0000
+
+devscripts (2.8.11) unstable; urgency=low
+
+  * Julian Gilbey
+    - Added a dependency on sed (>= 2.95) as wnpp uses the T command (thanks
+      to Olafur Jens Sig for alerting me to this one)
+    - bts: fix --cache-mode=mbox after --cache-mode=min bug (closes: #290487)
+    - bts: quieten (hopefully) unnecessary warning from HTML::Parse for
+      funny characters (closes: #292671)
+    - debchange: support --changelog and --news options for specifying
+      changelog (closes: #219135, #261878)
+    - debchange: remove emacs backup file (closes: #297489)
+    - debchange: document --nmu in manpage (closes: #299234)
+    - debsign: check for gpg version for no-show-policy-url option
+      (closes: #293792)
+    - uscan: change behaviour with respect to directory name checking: now
+      only checks directories with matching names, rather than downloading
+      newer versions regardless (closes: #260538)
+    - uscan: handle metacharacters in directory components (closes: #262489)
+    - uscan: allow directory name patterns (not quite recursive, but it's
+      pretty much what was requested) (closes: #143284)
+  * Joshua Kwan
+    - dscverify: Don't use --emulate-md-encode-bug in dscverify anymore,
+      it's been obsoleted with gnupg 1.4.0. (closes: #293791)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 13 Mar 2005 13:51:29 +0000
+
+devscripts (2.8.10) unstable; urgency=low
+
+  * bts: better fix for option handling bug.  Options must all appear
+    before first action name (closes: #290253 again, and prevents other
+    similar problems with tag - tagname)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 13 Jan 2005 10:57:15 +0000
+
+devscripts (2.8.9) unstable; urgency=medium
+
+  * bts: fix option handling to allow '+' to go through again.
+    closes: #290253
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Thu, 13 Jan 2005 01:17:39 -0800
+
+devscripts (2.8.8) unstable; urgency=low
+
+  * bts: fix mbox handling in 2.8.7; this also obviates the need for
+    cleaning out the cache if upgrading from 2.8.6.
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 11 Jan 2005 09:58:38 +0000
+
+devscripts (2.8.7) unstable; urgency=low
+
+  * bts: fix option handling, thanks to Tristan Seligmann (closes:
+    #289672)
+  * bts: support reading downloaded mbox versions of bugs with mutt or
+    alternative mail readers; also provide finer grained control over what
+    gets cached in general.  NOTE that this has changed some incompatible
+    changes from those introduced in version 2.8.6 (closes: #251099)
+  * debclean: remove obsolete French translation of manpage
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 10 Jan 2005 18:42:20 +0000
+
+devscripts (2.8.6) unstable; urgency=low
+
+  * Julian Gilbey
+    - bts: download attachments when caching bug reports (closes: #254102)
+    - debian/control: add Suggests: libwww-perl (closes: #277388)
+    - debchange: switch from ldap to wget for searching BTS (for
+      efficiency) (closes: #284650)
+    - tagpending: switch from ldap to wget for searching BTS (for
+      efficiency)
+    - uupdate: apply patch from Matthew Palmer to fix overwriting upstream
+      files (closes: #230090)
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Tue, 28 Dec 2004 11:51:38 -0800
+
+devscripts (2.8.5) unstable; urgency=medium
+
+  * Julian Gilbey
+    - bts: fix "bts bugs :" error
+    - bts: accept "bts tags nnnnnn +tag" syntax
+    - bts: rejuvenate the close command (closes: #245956)
+    - bts: fix typo (closes: #268608)
+    - debchange: fixed pipe error (closes: #228749)
+    - debchange: requires perl >= 5.8, so make this a Depends: in the
+      control file (will be standard in sarge anyway, so it's not a
+      particularly big deal) (closes: #241138)
+    - debuild: correctly count the saved envvars (closes: #268985)
+    - debsign: correctly handle DEBSIGN_SIGNLIKE config option (closes:
+      #270262)
+    - tagpending: make ldap optional (closes: #269124)
+    - tagpending: fix -n output message (closes: #269125)
+    - tagpending: give progress output; introduce silent option
+    - uscan: support version numbers with ~ (change Devscripts::Versort to
+      simply call dpkg --compare-versions to do the work) (closes: #232286)
+    - wnpp-alert: now correctly reports on orphaned packages as well
+      (tweaked some sed scripts; don't know what was actually wrong :-/ )
+      (closes: #268948)
+  * Joshua Kwan
+    - debrsign: Warn if you passed a changes file but omitted the remote
+      address.
+    - Update debchange and tagpending for new bts2ldap gateway.
+    - Remove ${perl:Depends} from control file, dh_perl is not guessing that
+      we do actually need 5.8, and so we end up with a perl (>= 5.8), perl
+      dependency, which is wrong.
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Sun, 26 Sep 2004 13:41:37 -0700
+
+devscripts (2.8.4) unstable; urgency=medium
+
+  * The Barbrady release ("Move along people, there's NOTHING TO SEE here..")
+  * Add build-depends on the perl packages that perl -c needs to do its thing.
+    Thanks Anibal Monsalve Salazar for pointing this out. Closes: #266847
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Thu, 19 Aug 2004 09:13:14 -0700
+
+devscripts (2.8.3) unstable; urgency=medium
+
+  * The "timely bug report" release.
+  * uupdate.sh: [ $# ne 0 ] -> [ $# -ne 0 ]. Thanks Fumitoshi UKAI.
+    (Closes: #266221)
+  * Run perl -c on all the Perl scripts and sh -n on all of the shell
+    scripts, in foresight of future syntax errors.
+  * tagpending.sh: Add a space after the source package name. Thanks Guillem
+    Jover for pointing this out.
+  * Remove the last remnants of the abandoned debpanic script from debi.pl.
+  * bts.pl: Fix gooood crack in 'it' usage. ($it eq undef -> not defined $it.)
+    (Closes: #266717)
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Wed, 18 Aug 2004 01:28:37 -0700
+
+devscripts (2.8.2) unstable; urgency=low
+
+  * tagpending.sh:
+      - s/help/usage/. Another buglet found by Steve Kowalik. Sigh!
+        (Closes: #265412)
+      - Include the source package name in the 'package' portion of
+        the generated message. (Closes: #265445)
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Mon, 16 Aug 2004 13:23:10 -0700
+
+devscripts (2.8.1) unstable; urgency=medium
+
+  * debchange.pl: Don't check for -w 'debian/changelog', check whether
+    we're in debian/ first, to avoid false positives. (Closes: #264310)
+  * tagpending.sh: Steve Kowalik's personal email is s3kr1t, so don't use
+    mail(1) to send the control email, but toss it all to bts.pl which will
+    handle all the $DEBEMAIL and $EMAIL and such. (Closes: #264767)
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Tue, 10 Aug 2004 09:41:14 -0700
+
+devscripts (2.8) unstable; urgency=low
+
+  * Now comaintained by Joshua Kwan and Julian Gilbey.
+  * Build system:
+    - `pwd` -> $(CURDIR) in debian/rules.
+    - Remove $(CWRAPPERS) in Makefile's clean target.
+  * archive/cvs-buildpackage: Remove.
+  * debchange:
+    - Add -n / --nmu option for NMUs. (Closes: #184944)
+    - Our BTS web parser is broken. Move to Net::LDAP and the
+      more machine-friendly bts2ldap gateway. Change the Suggests:
+      on libwww-perl to libnet-ldap-perl.
+    - Do not proceed with parsing versions and contacting the BTS if
+      debian/changelog is not writable. (Closes: #235485, #178080)
+  * debsign:
+    - Don't prompt to overwrite the dsc file (ie. may be owned by root,
+      parent dir owned by yourself) - force it and hope it works.
+      (Closes: #249950)
+    - Change nonstandard head -1 to head -n 1. (Closes: #231130)
+    - Add a versioned dependency on gnupg (>= 1.0.7), when
+      --no-show-policy-url was added. (Closes: #228938)
+  * debrsign:
+    - Add --path option to specify full path to gnupg/pgp. (Closes: #243013)
+  * debuild:
+    - Preserve GPG_TTY so that gpg-agent is recognized. (Closes: #254112)
+  * bts:
+    - Recognize the 'l10n' tag for bts. (Closes: #227735)
+    - bts.1: Fix extraneous indentation. (Closes: #236309)
+    - Allow 'it' as an alias to the previous bug referenced.
+      (Closes: #256051)
+    - cache: Fix uninitialized value warning by checking how many arguments
+      were passed. (Closes: #225317)
+  * Devscripts::Versort:
+    - Apply Roderick Schertler's patch to fix an infinite loop comparing
+      identical non-Debian revisions. (Closes: #236344)
+  * rc-alert:
+    - rc-alert.1: Add SEE ALSO for popbugs(1). (Closes: #227078)
+  * uscan:
+    - uscan.pl, uscan.1: Add brief mention for --debug. (Closes: #238655)
+    - uscan.pl: remove HTTP GET data from downloaded file. (Closes: #247175)
+  * New scripts by me:
+    - tagpending: Within a source directory, tags all bugs not already
+      'pending' to be as such. (associated: tagpending.1)
+
+ -- Joshua Kwan <joshk@triplehelix.org>  Fri,  6 Aug 2004 14:06:00 -0700
+
+devscripts (2.7.95.1) unstable; urgency=low
+
+  * bts: fixed some major blunders in bts show command: now shows
+    something in offline mode, and multiple instances of bts show work
+    concurrently
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 11 Dec 2003 18:47:25 +0000
+
+devscripts (2.7.95) unstable; urgency=low
+
+  * New script:
+    - cvs-debrelease: to complete the cvs-* scripts bundle, this one
+      replicates the debrelease behaviour
+  * bts: remove special tag:<tag> processing, as the BTS understands
+    tag:<tag> requests (thanks Colin!)
+  * cvs-deb{c,i}: call deb{c,i} directly
+  * debchange: don't give unnecessary UTF-8 warning notice (closes:
+    #222110)
+  * dscverify: fix ENOENT bug (closes: #222890)
+  * uscan: some minor cleanups
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  8 Dec 2003 23:14:49 +0000
+
+devscripts (2.7.94.3) unstable; urgency=low
+
+  * debi/debc: fix typo in determining .changes filename (closes: #221842)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 20 Nov 2003 21:50:54 +0000
+
+devscripts (2.7.94.2) unstable; urgency=low
+
+  * Fix bts email From: line bug (closes: #221848)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 20 Nov 2003 14:31:36 +0000
+
+devscripts (2.7.94.1) unstable; urgency=low
+
+  * And get rc-alert to work (closes: #221767)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 20 Nov 2003 00:43:31 +0000
+
+devscripts (2.7.94) unstable; urgency=low
+
+  * Really include rc-alert (closes: #221550)
+  * debchange: fix UTF-8 problems (closes: #218785)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 19 Nov 2003 15:26:25 +0000
+
+devscripts (2.7.93) unstable; urgency=low
+
+  * New scripts:
+    - cvs-debuild: wrapper for debuild to use cvs-buildpackage, or for
+                   cvs-buildpackage to use debuild (closes: #36344 at last!)
+    - cvs-debi, cvs-debc: wrapper for debi, debc to use in conjunction
+                   with cvs-debuild or cvs-buildpackage; function like
+                   debi and debc, but are run from the CVS working
+                   directory instead (also in #36344)
+    - rc-alert:    list all installed packages which appear in the
+                   list of packages with RC bugs
+    - wnpp-alert:  list all installed packages which appear in the WNPP
+                   orphaned or up-for-adoption lists (closes: #188246)
+  * lots of scripts: remove --ignore-dirname option and provide
+    --check-dirname-level and --check-dirname-regex along with
+    configuration file options to set the default directory name-checking
+    behaviour (closes: #218153)
+  * lots of scripts: provide --no-conf/--noconf option for all scripts
+    which read the devscripts configuration files, and provide useful
+    information when the --help option is used (closes: #218224)
+  * bts: identify itself in its automatic emails (closes: #199312)
+  * bts: dangerous "no-option" behaviour to cleancache changed
+  * bts: completely rewrite the caching system using LWP, based on an idea
+    gleaned from the original rc-alert together with knowledge of the BTS
+    internals ;-); this does give a couple of minor disadvantages, but
+    lots of major advantages too (the code is *much* cleaner now, and we
+    only need to store each page once!); there is still a slightly messy
+    converter to convert the old cache to the new format, but that shall
+    go away soonish (probably after 2-3 months or sarge release, whichever
+    is sooner), to be replaced with a simple warning
+  * bts: support "bts bugs tag:<tag>" (closes: #218494)
+  * bts: deprecate "bts close" command, following the lead of debbugs
+  * accept EMAIL as well as DEBEMAIL (closes: #219127)
+  * debi, debc: rewrote in Perl (there was so much Perl embedded, it
+    didn't make sense to leave it in shell script)
+  * debi, debc: provide --no-conf option
+  * debc/debi: support only listing/installing specified packages (closes:
+    #200372)
+  * debchange: improve regex to recognise more successful uploads (closes:
+    #218242)
+  * debchange: perform various UTF-8 checks (closes: #218785)
+  * debpkg: remove /usr/local components from PATH
+  * debsign: improve gpg/pgp selection heuristics (closes: #158614,
+    #211031)
+  * debsign: improve manpage
+  * debuild: fix command line parsing (uploaded this one as 2.7.92.1)
+    (closed #218108, #218234)
+  * debuild: more command-line parsing stuff (closes: #218379, #220900)
+  * debuild: pass -e<maint> option to debsign (oops!)
+  * debuild: deprecate -E option (dpkg-buildpackage now uses it); so only
+    -e and -r short options are left
+  * debuild: deprecate -L/--lintian option for indicating lintian options,
+    replace with --lintian-opts
+  * debuild: support linda (closes: #178456)
+  * debuild: now always recognises -d/-D options to skip/force use of
+    dpkg-checkbuilddeps (closes: #188216)
+  * grep-excuses: converted to use wget and caching instead of libwww-perl
+    (faster)
+  * plotchangelog: provided --cumulative option
+  * devscripts.conf.5: new manpage (closes: #217858)
+  * removed the dummy build, release and signchanges scripts (they were
+    renamed over four years ago)
+  * updated the devscripts.conf default file to add new programs to the
+    list
+  * note that it's really sourced by /bin/bash. not generic /bin/sh (and
+    modify the rest of the package accordingly); this cleans up a minor
+    inconsistency
+  * place symlink to the default config file in doc directory
+  * improved tempfile security in plotchangelogs, debdiff, grep-excuses
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 17 Nov 2003 22:40:29 +0000
+
+devscripts (2.7.92.1) unstable; urgency=low
+
+  * debuild: fix command line parsing (backported from 2.7.93pre2)
+    (closes: #218108, #218234)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 31 Oct 2003 10:33:07 +0000
+
+devscripts (2.7.92) unstable; urgency=low
+
+  * Security fix: be a lot more careful when traversing directory trees
+    looking for debian/changelog files; only perform potentially harmful
+    actions if the directory name matches the package name (i.e., package
+    or package-<anything>).  Affects the following programs: debc,
+    debchange/dch, debclean, debuild, debi, debrelease, uscan, uupdate
+    (closes: #205471)
+  * bts: update tags list again (closes: #207260)
+  * bts: update BROWSER URL (closes: #207052)
+  * bts: handle '+' in package names when caching (closes: #215830)
+  * bts: provide online links instead of/as well as local ones
+  * bts: provide new commands package, owner, noowner
+  * bts: provide cleancache command
+  * bts: expire old automatically downloaded bugs from the cache
+  * bts: fix tag command for multiple tags (closes: #215986)
+  * debchange: fix off-by-one editor line error (closes: #204512)
+  * debchange: apply Matt Zimmerman's patch to support --distribution and
+    --urgency options (closes: #197106)
+  * debdiff: allow "--move-regex from to" to use $1, ... in "to" part
+    (closes: #204114)
+  * debdiff: fix syntax error (closes: #217715)
+  * debi: fix typo so only install .debs and not .udebs (closes: #207955)
+  * debsign: fix policy-url inclusion with gnupg (closes: #204685)
+  * dpkg-depcheck: check for build-essential being installed (closes:
+    #216809)
+  * dpkg-genbuilddeps: remove comment about strace bug (closes: #212277)
+  * grep-excuses: quote package name (closes: #212476)
+  * uupdate: correct syntax error when hunting reject files (closes: #206768)
+  * uupdate: *really* accept symlink options (closes: #212253)
+  * uupdate: correct symlink comment (closes: #213590)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 27 Oct 2003 22:12:03 +0000
+
+devscripts (2.7.91) unstable; urgency=low
+
+  * debdiff: fix regex error with --move option (closes: #204113)
+  * debuild: close build log file before exiting (closes: #204076)
+  * mergechanges: use correct default filename when epochs are present
+    (closes: #195761)
+  * uupdate: fix Devscripts::Versort to not do infinite loops (closes:
+    #204192)
+  * uupdate: make -v work (closes: #204232)
+  * uupdate: handle new files introduced upstream better (closes: #197478)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  6 Aug 2003 15:27:53 +0100
+
+devscripts (2.7.90) unstable; urgency=low
+
+  * Version number: this is heading towards 2.8.0; there are several more
+    contributed scripts to add first, though.
+  * bts: add comment on from:<submitter> and src:<package> options for bts
+    bugs (closes: #155658)
+  * bts: fix clone command (closes: #185524, #201088, #201090)
+  * bts: use sensible-browser instead of trying to parse BROWSER ourselves
+    (closes: #185827)
+  * bts: add caching capabilities (closes: #188229)
+  * bts: update list of valid tags (closes: #196751, #201149)
+  * bts: fix "sumitter" typo (closes: #203162)
+  * debchange: use new upstream version number found from changelog
+    (closes: #154144, #181974)
+  * debchange: provide --closes capability (closes: #153910)
+  * debclean: added French manpage (closes: #180224)
+  * debdiff: the --move <from> <to> should not regard the <from> as a
+    regex (closes: #183930); add --move-regex which accepts regexps
+  * debit: remove script, as debian-test has been removed from unstable
+  * debuild: fix --rootcmd bug (closes: #180862)
+  * debuild: add GPG_AGENT_INFO and remove PGPPASS to default preservation
+    list (closes: #186659)
+  * debuild: log build to log file (closes: #164585)
+  * dpkg-depcheck: give -a more functionality when used in combination
+    with -b, -d or -m (closes: #143306)
+  * dpkg-depcheck: add discard-sgml-catalogs feature (closes: #147369)
+  * plotchangelog: applied Joey's patch to add -d/--dump option (closes:
+    #182878)
+  * uupdate: added some more sanity and success checks (closes: #188711)
+  * uupdate: improved option handling (closes: #145711)
+  * uupdate: provided symlink/copy option (closes: #150845)
+  * uscan: sort directories into a sensible order before we begin and add
+    some intelligence to save some work in certain cases (closes: #156434)
+  * uscan: add some variation to the exit status (closes: #192786)
+  * uscan: clarify manpage (closes: #201278)
+  * README: added dependency information (closes: #183299)
+  * NEW SCRIPT: checkbashisms (closes: #163316)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri,  1 Aug 2003 11:50:16 +0100
+
+devscripts (2.7.2) unstable; urgency=low
+
+  * bts: add sarge and experimental tags (closes: #170389)
+  * bts: add submitter command (closes: #172161)
+  * bts: reopen submitter name is optional (closes: #171046)
+  * debchange: handle upstream version numbers with : or - correctly
+    (closes: #174818)
+  * debpkg: Created a compiled debpkg wrapper so that suidperl is no
+    longer needed for debpkg to be suid root
+  * debdiff: Quieten interdiff check when interdiff not installed and
+    sh=dash (from #168862, now reassigned to dash)
+  * debdiff: mention interdiff in control file
+  * grep_excuses: drop email grepping, as this no longer appears in
+    update_excuses output (closes: #174300)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  1 Jan 2003 10:34:25 +0000
+
+devscripts (2.7.1) unstable; urgency=low
+
+  * The "bugfix time" release
+  * bts: support new "clone" command (closes: #141995)
+  * bts: shouldn't be noisy if no arguments received (closes: #147181)
+  * bts: browser selection code improvement (closes: #150751)
+  * debdiff: fix config file typo (closes: #149712)
+  * debpkg: untaint @ARGV to quieten perl
+  * debuild: add dpkg-checkbuilddeps command when given binary* option
+    (closes: #141159)
+  * debuild: "fakeroot :" test replaced with "fakeroot true" to work on
+    Hurd
+  * debuild: pass DEBSIGN_* environment variables (closes: #159848)
+  * debrelease: no longer collapse when a -t <host> option is given for
+    dupload
+  * debsign: remove PATH-cleaning code etc., as it actually provides no
+    security and is annoying (closes: #161509)
+  * dpkg-depcheck: Fix typo in help message (closes: #140923)
+  * dpkg-depcheck: Fix regexp (quote filename properly) (closes: #143298)
+  * uupdate: correct .orig.tar.gz handling (closes: #147657)
+  * uscan: fix to support weird dpkg version number handling
+    (closes: #159052)
+  * several perl scripts "use 5.6.0" -> "use 5.006_000" (closes: #154770)
+  * upgrade standards version (support new DEB_BUILD_OPTIONS)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue,  1 Oct 2002 16:46:02 +0100
+
+devscripts (2.7.0) unstable; urgency=low
+
+  * debclean: don't remove .upload files (closes: #140161)
+  * I think it's ready enough to bump the version number!
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 31 Mar 2002 10:02:49 +0100
+
+devscripts (2.6.99) unstable; urgency=low
+
+  * debdiff: fix dsc handling on native packages (closes: #139776)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 25 Mar 2002 08:52:34 +0000
+
+devscripts (2.6.98) unstable; urgency=low
+
+  * uscan: fix handling of HTTP-proxied FTP requests (closes: #138882)
+  * uscan: add --debug features
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 24 Mar 2002 22:51:03 +0000
+
+devscripts (2.6.97) unstable; urgency=low
+
+  * debdiff: add support for comparing source packages (closes: #94908)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 17 Mar 2002 23:46:17 +0000
+
+devscripts (2.6.96) unstable; urgency=low
+
+  * uscan: typo in manpage (closes: #138486)
+  * uscan: allow per-site PASV/active selection (closes: #127646)
+  * add devscripts.1 manpage (closes: #138485)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 17 Mar 2002 12:28:53 +0000
+
+devscripts (2.6.95) unstable; urgency=low
+
+  * debuild: don't die with -tc option (closes: #138478)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 15 Mar 2002 17:14:53 +0000
+
+devscripts (2.6.94) unstable; urgency=low
+
+  * James' comment means that the procmail script can be even more
+    economical.
+  * Also correct the regexp (which would have failed in the past)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 15 Mar 2002 16:58:53 +0000
+
+devscripts (2.6.93) unstable; urgency=low
+
+  * debuild: use lintian according to DEBUILD_LINTIAN ;-) (closes: #138445)
+  * procmail examples: update for ACCEPTED messages (closes: #138460)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 15 Mar 2002 16:01:31 +0000
+
+devscripts (2.6.92) unstable; urgency=low
+
+  * debdiff: fixed syntax error (closes: #138381)
+  * debdiff: and use proper logic for wdiff exit status (closes: #138383)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 15 Mar 2002 11:17:07 +0000
+
+devscripts (2.6.91) unstable; urgency=low
+
+  * grep-excuses: fixed parsing problem (closes: #138227)
+  * uscan: fixed FTP regex
+  * uscan: chdir back to where we started between directories
+    (closes: #138232)
+  * uupdate: add (and document) bzip2 support (closes: #138247)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 14 Mar 2002 10:06:35 +0000
+
+devscripts (2.6.90) unstable; urgency=low
+
+  * Simplified whole build process.
+  * Removed broken i18n support -- if it's wanted, we can reintroduce it
+    when Perl supports a --dump-po-strings type function (or we can write
+    it manually)
+  * devscripts now has a config file!  Yeah!  (closes: #40729)
+  * New scripts:
+    - dpkg-depcheck (from Bill Allombert <ballombe@debian.org>)
+    - grep-excuses (closes: #129444)
+    - mergechanges (closes: #130849)
+  * bts: document BROWSER in ENVIRONMENT VARIABLES section (closes:
+    #116417)
+  * bts: accepts 'tags' as a synonym for 'tag' (closes: #113262)
+  * bts: accepts --help and --version arguments
+  * debchange: allow it to understand both dupload and dput .upload
+    formats
+  * debchange: handle EMAIL='Full Name <email@address>' (closes: #133632)
+  * debchange: now uses config variable for --preserve option
+  * debchange: introduce -d/--fromdirname option (closes: #116352)
+  * debchange: clarify --newversion explanation in manpage (closes: #137392)
+  * debclean: introduced --cleandebs option and config variable: now only
+    removes .deb etc. files if specifically requested to
+  * debdiff: fixed dirs moving around among multiple packages (closes:
+    #113151)
+  * debdiff: use configuration file
+  * debrelease: can use dput or dupload (closes: #118071)
+  * debrelease: can now handle source-only uploads
+  * debrelease: use configuration file
+  * deb[r]sign: teach it about source-only .changes files
+  * debsign: don't delete signed files if the scp to transfer them back
+    failed (thanks to Joey Hess for patch) (closes: #126395)
+  * debsign: use configuration file
+  * debuild: teach it about source-only builds (closes: #114699) and
+    binary-only builds (closes: #115168)
+  * debuild: correct -E description in usage info (closes: #126171)
+  * debuild: correct -p option handling (closes: #122870)
+  * debuild: now uses configuration file (closes: #36793)
+  * debuild: check for existence of fakeroot (closes: #137605)
+  * dpkg-genbuilddeps: now a wrapper around dpkg-depcheck.  This latter
+    program can be used instead if there is a problem with strace hanging
+    on dpkg --build; simply only trace the build target.
+  * dscverify: now uses the same gpg command as katie for signature
+    verification, which has simplified the code significantly
+  * dscverify: now also check signature on .dsc file included in .changes
+    file
+  * dscverify: now uses configuration file
+  * uscan: rewrote in Perl to make handling other bugs simpler
+  * uscan: new, simpler, watch file format available, ironically also
+    allows handling of more complex http:// searches (closes: #126789)
+  * uscan: correct handling of absolute filenames (closes: #120416, #126768)
+  * uscan: verbose and non-verbose modes available (closes: #126705)
+  * uscan: report-only mode available (closes: #126705)
+  * uscan: allows choosing PASV or non-PASV (default) mode (closes: #127646)
+  * uscan: symlinks (by default) pkg_version.orig.tar.gz to downloaded
+    file (closes: #127580)
+  * uscan: now uses configuration file
+  * uupdate: correct match regexp (closes: #114798)
+  * uupdate: now uses pristine source by default (closes: #131448)
+  * debian.procmail: remove old quake list reference (closes: #136058)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  4 Feb 2002 13:00:36 +0000
+
+devscripts (2.6.4) unstable; urgency=low
+
+  * Fix postscript typo (closes: #112437)
+  * bts: add missing tags (closes: #113240)
+  * bts: fix comment handling in bts control commands (closes: #113890)
+  * plotchangelog: add -b/--bugcount option to --help output (closes:
+    #112585)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  1 Oct 2001 08:49:59 +0100
+
+devscripts (2.6.3) unstable; urgency=low
+
+  * bts: Fix typos (closes: #110519)
+  * bts: Implement esr's BROWSER spec (closes: #111061)
+  * bts: Multiple command caching, thanks to Colin Watson (closes:
+    #111066)
+  * bts: Recognise DEBEMAIL and fake From: line if it's set (closes:
+    #111148)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue,  4 Sep 2001 15:24:53 +0100
+
+devscripts (2.6.2) unstable; urgency=low
+
+  * Get the build-indep -> build-arch change correct as well - D'Oh!
+    (closes: #110042)
+
+ -- Julian Gilbey <jdg@debian.org>  Sat, 25 Aug 2001 22:30:17 +0100
+
+devscripts (2.6.1) unstable; urgency=low
+
+  * Build-Depends-Indep -> Build-Depends (closes: #109746)
+  * bts doesn't automatically default to w3m (closes: #109699)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 24 Aug 2001 01:53:37 +0100
+
+devscripts (2.6.0) unstable; urgency=low
+
+  * Added new "bts" script (closes: #104407)
+  * Added Ben Collins' dpkg-genbuilddeps program (note that this makes
+    this package "Architecture: any" rather than the previous
+    "Architecture: all"); unfortunately, it is currently disabled due to a
+    bug in strace (or perhaps it's in dpkg)
+  * Fix dscverify MD5 -> Digest::MD5 (required the old libmd5-perl package
+    to work correctly) (closes: #105814)
+  * Change "OK then, aborting." message in debsign (closes: #100654)
+  * Correct spelling priviledge -> privilege (closes: #101774)
+  * Improvement in uupdate tmp dir handling (thanks to Decklin Foster)
+    (closes: #106057)
+  * dscverify now accepts local keyrings (closes: #98431)
+  * Fixed plotchangelog bugs (closes: #102416, #102417)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 21 Aug 2001 20:27:53 +0100
+
+devscripts (2.5.30) unstable; urgency=low
+
+  * Remove /etc/upload.sites if it still exists.
+  * Correct use of $! in perl scripts (closes: #97185)
+  * Add wdiff recommendation in control file for debdiff (closes: #94907)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  6 Jun 2001 16:02:08 +0100
+
+devscripts (2.5.29) unstable; urgency=medium
+
+  * And do all of the other debian.procmail security regex's while we're
+    at it.
+
+ -- Julian Gilbey <jdg@debian.org>  Sat,  5 May 2001 22:51:04 +0100
+
+devscripts (2.5.28) unstable; urgency=medium
+
+  * Fix security hole in debian.procmail example: replace [^@] regex by
+    something more restrictive (reported by Shane Wegner <shane@debian.org>)
+
+ -- Julian Gilbey <jdg@debian.org>  Sat,  5 May 2001 22:28:20 +0100
+
+devscripts (2.5.27) unstable; urgency=low
+
+  * debdiff: compares control files in more situations (closes: #94562)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 20 Apr 2001 17:30:43 +0100
+
+devscripts (2.5.26) unstable; urgency=low
+
+  * Fixed debdiff; added wdiff formatting options
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 17 Apr 2001 11:04:23 +0100
+
+devscripts (2.5.25) unstable; urgency=low
+
+  * Fixed plotchangelog bugs (closes: #93204, #93205)
+  * Enhanced debdiff (closes: #58459, #59827, #79952): can now diff
+    control files and see which files have moved between packages (not
+    perfect, but pretty good)
+  * dch aborts if the temporary changelog is not modified (mtime check) --
+    patch by Colin Watson <cjw44@flatline.org.uk> (closes: #72237)
+  * Improve forward.exim (master.procmail was already done) (closes: #78474)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 17 Apr 2001 09:42:55 +0100
+
+devscripts (2.5.24) unstable; urgency=low
+
+  * Improve debpkg error handling with no options given
+  * debsign should exit with status 0 if signed file is not resigned
+    (closes: #92833)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  4 Apr 2001 18:24:39 +0100
+
+devscripts (2.5.23) unstable; urgency=low
+
+  * Fix uscan to handle funny HTML hrefs (closes: #89749)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  2 Apr 2001 01:01:26 +0100
+
+devscripts (2.5.22) unstable; urgency=low
+
+  * Remove dependency on gettext; there are no translations for this
+    package to date, and no easy ways of generating the needed message
+    files (closes: #92167)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 30 Mar 2001 15:45:31 +0100
+
+devscripts (2.5.21) unstable; urgency=low
+
+  * Introduced --set-envvar option to debuild (might close #88586)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  5 Mar 2001 15:58:59 +0000
+
+devscripts (2.5.20) unstable; urgency=low
+
+  * Modified README to refer to dpkg-statoverride instead of suidmanager
+  * debsign: Add -e option (closes: #85847)
+  * debsign: lots of improvements to bring it into line with current
+    dpkg-buildpackage
+  * Modified package description to list dependencies of each script
+  * Removed dependency on ftp (and ftp-ssl should Provide: ftp)
+    (closes: #86765)
+  * Updated for new Perl setup; changed source dependencies to cope
+  * Standards version 3.5.2
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 25 Feb 2001 14:21:01 +0000
+
+devscripts (2.5.19) unstable; urgency=low
+
+  * Quote package name in regexps (closes: #85566)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 11 Feb 2001 22:49:28 +0000
+
+devscripts (2.5.18) unstable; urgency=low
+
+  * Correct /bin/sh -> /bin/bash in shell scripts; broke due to my
+    configure script using the shell variable BASH, which was /bin/sh when
+    /bin/sh was linked to bash.  Oops.  (closes: #85089)
+  * Correct debchange directory renaming behaviour (closes: #78468)
+  * Correct ~ -> $HOME in debrsign (closes: #81147)
+  * Changed tar I -> tar --bzip2 in uupdate (closes: #81507)
+  * Corrected uscan.1 (thanks to Jim Van Zandt) (closes: #83095)
+  * debchange: sets urgency to low automatically (closes: #83584)
+  * debclean: Correct directory changing (closes: #84309)
+  * Conflict with old suidmanager
+  * debchange: --help should never fail! (closes: #78383)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  7 Feb 2001 10:47:28 +0000
+
+devscripts (2.5.17) unstable; urgency=low
+
+  * debuild: Allow through DEB_* and GNUPGHOME environment
+    variables. (Closes: #77822)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 14 Dec 2000 12:03:56 +0000
+
+devscripts (2.5.16) unstable; urgency=low
+
+  * debdiff: Set locale to C before doing parsed dpkg-deb call
+    (closes: #68325 again)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 11 Dec 2000 23:07:07 +0000
+
+devscripts (2.5.15) unstable; urgency=low
+
+  * Correct debsign typo -- oops! (closes: #79366)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 11 Dec 2000 22:17:55 +0000
+
+devscripts (2.5.14) unstable; urgency=low
+
+  * master.procmail: add -oi option to sendmail invocation
+  * debdiff: attempt to fix hardlinks problem (closes: #68325)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 10 Dec 2000 23:50:35 +0000
+
+devscripts (2.5.13) unstable; urgency=low
+
+  * debsign: Fix manpage (line beginning with dot disappeared)
+    (closes: #76984)
+  * debsign: Give explanatory warning message about RSA(REF) extensions if
+    gpg fails, due to silly/paranoid gpg exit values (closes: #75677)
+  * debsign: use new Changed-By field if it exists (closes: #77226)
+  * deb(r)sign: now allows signing of just a .dsc file (closes: #77822)
+  * dch: Use more intelligent way of determining name and email address
+    (thanks to Roderick Schertler, roderick@argon.org; closes: #63764)
+  * uscan: Use binary mode for ftp (closes: #67336)
+  * uscan: Use passive mode for ftp (closes: #68539)
+  * parsechangelog: put in check for libtimedate-perl package and issue
+    meaningful error message if not found (closes: #67710)
+  * master.procmail: prevent looping (closes: #65256)
+
+ -- Julian Gilbey <jdg@debian.org>  Sat,  9 Dec 2000 23:53:23 +0000
+
+devscripts (2.5.12) unstable; urgency=low
+
+  * dscverify: Correct test for --help, --version to be *after* test for
+    no arguments
+  * uupdate: allow .tar.bz2 archive files (but not yet for pristine
+    source; will do soon, once I've upgraded to woody and dpkg is ready
+    for it) (closes: #64113)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 22 May 2000 13:55:38 +0100
+
+devscripts (2.5.11) unstable; urgency=low
+
+  * Fix checkgettext.pm so it actually works when liblocale-gettext-perl
+    is not installed (conflict with POSIX module)
+  * Modify dscverify to see the keyrings on ftp-master as well as on
+    master.
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 22 May 2000 10:27:26 +0100
+
+devscripts (2.5.10) unstable; urgency=low
+
+  * Fix debsign to check for $GNUPGHOME as well as ~/.gnupg (closes bug
+    reported by Gerfried Fuchs <alfie@innocent.com>)
+  * Fix debian-test script to work with new version of debian-test
+    (closes: #51527)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 11 May 2000 12:04:29 +0100
+
+devscripts (2.5.9) unstable; urgency=low
+
+  * Change Getopt::Long::config back to Getopt::Long::Configure in dch as
+    this is a woody package, and I am not going to worry about slink
+    compliance any longer.
+  * debsign checks to see whether the .dsc file has already been signed
+    (closes: #54963)
+  * Fixed scp bug when changes file name is given relative to remote home
+    directory (closes: #61504)
+  * Corrected help message in debc (closes: #61541)
+  * Changed dupload recommends to suggests; all package maintainers will
+    have dupload installed anyone, one would presume (closes: #57847)
+  * Removed recommendations etc on netstd and perl(-suid) from the control
+    file as their replacements are already standard in potato.
+
+ -- Julian Gilbey <jdg@debian.org>  Tue,  4 Apr 2000 17:45:18 +0100
+
+devscripts (2.5.8) frozen unstable; urgency=low
+
+  * Correct debdiff to allow 2 *.changes files (closes: #58458)
+    (RM: this is an important bug)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 13 Mar 2000 23:37:05 +0000
+
+devscripts (2.5.7) unstable; urgency=low
+
+  * Remove install-stamp from debian/rules
+  * Change Getopt::Long::Configure to Getopt::Long::config in dch to allow
+    the package to still work in slink (closes: #51442)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  1 Dec 1999 00:50:44 +0000
+
+devscripts (2.5.6) unstable; urgency=low
+
+  * Correct debuild bug.  Again.  This regexp is getting silly ;)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 24 Nov 1999 09:28:44 +0000
+
+devscripts (2.5.5) unstable; urgency=low
+
+  * Correct debuild to only pass -spgp and -sgpg options to debsign, not
+    -sa and suchlike (closes: #51065)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 23 Nov 1999 12:18:47 +0000
+
+devscripts (2.5.4) unstable; urgency=low
+
+  * Added perl shebang test to debian-test suite
+  * Recompile to correct perl shebang line (closes: #51039 and all other
+    reports about the same thing!)
+  * Preserve DEB_BUILD_OPTIONS (request from Joseph Carter)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 23 Nov 1999 11:19:12 +0000
+
+devscripts (2.5.3) unstable; urgency=low
+
+  * Correct uupdate syntax error (closes: #50881)
+  * Correct debsign regexp error again! (closes: #50877)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 22 Nov 1999 18:24:00 +0000
+
+devscripts (2.5.2) unstable; urgency=low
+
+  * Fixed debrelease back in version 2.5.0 to pass on options to dupload,
+    but forgot to say so.
+  * All of the programs which look for a .changes file now accept the
+    dpkg-buildpackage/dpkg-architecture -a and -t options (again, done in
+    2.5.0)
+  * Correct 'eq' -> '-eq' in test command (and it's the third time I've
+    made that mistake in as many days...) (closes: #50549)
+  * Added a simple debian-test script to check that I get the version
+    numbering right....
+  * Added build dependecies (which wasn't really that hard...)
+  * Correct debdiff problem: forgot to chdir back after looking at first
+    changes file
+  * debit now runs debian-test *without* su nobody; I believe that it is
+    the responsibility of the test programs themselves to handle choosing
+    their userid
+  * Correct handling of .changes file entries when package is in
+    non-US/main/libs or suchlike (really closes: #50281)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 19 Nov 1999 01:50:32 +0000
+
+devscripts (2.5.1) unstable; urgency=low
+
+  * Cleaned up Makefile.am
+  * Small correction to mustsetvar logic in uscan
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 16 Nov 1999 21:44:26 +0000
+
+devscripts (2.5.0) unstable; urgency=low
+
+  * Add -m option to deb(r)sign to parallel the behaviour of
+    dpkg-buildpackage; this is obviously desirable, and necessary to
+  * make sure that debuild pays attention to any -m, -k, -p or -s options
+    given to dpkg-buildpackage when calling debsign (should close #50281),
+    and
+  * make debsign sign the right .changes file!  (closes: #50134)
+  * Teach debdiff to fully handle potato version of dpkg -c output
+  * Make debdiff able to handle .changes files as well as just single .deb
+    files
+  * Make debdiff Perl more idiomatic
+  * Allow deb[ic] to handle multiple binary packages by parsing .changes
+    file (closes: #33699)
+  * Merged deb[ic] into one file, as their functionality is almost
+    identical
+  * Corrected a few more occurrences of manually parsing changelogs (which
+    I should have done when correcting bug #43082)
+  * Add Joey's plotchangelog program (closes: #50150)
+  * Added a README.i18n file
+  * Added James R. Van Zandt's debit script, merged into a single script
+    with debi.
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 16 Nov 1999 02:41:57 +0000
+
+devscripts (2.4.6) unstable; urgency=low
+
+  * Rebuild with correct Perl paths
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 12 Nov 1999 02:26:42 +0000
+
+devscripts (2.4.5) unstable; urgency=low
+
+  * Remove references to libtricks package from descriptions (close:
+    #49937, even though I made the correction the day before the bug
+    report arrived!)
+  * Only suggest gnupg rather that recommend (closes: #49882)
+  * s/sprint/sprintf/ in dscverify (closes: #49721)
+  * Add --version and --help options to all programs (and this effectively
+    closes: #49554)
+  * Add long options to all programs except for deb(r)sign, as the options
+    there match those in dpkg-buildpackage (closes: #41850)
+  * No longer suggest PGP, as GNU Privacy Guard with the requisite
+    extensions should be sufficient
+  * Correct debdiff to take account of new format of dpkg-deb -c output
+    (and why did it change?)
+  * Make sure debian/rules clean really does that (error in Makefile.am)
+  * Rewrite of internals of debuild in several places, especially with
+    regard to -r handling.  Much nicer logic now.
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 12 Nov 1999 01:49:40 +0000
+
+devscripts (2.4.4) unstable; urgency=low
+
+  * Correct spurious debian/changelog.dch error message (closes: #49435)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun,  7 Nov 1999 18:02:07 +0000
+
+devscripts (2.4.3) unstable; urgency=low
+
+  * Add ssh | ssh-nonfree suggest (forgot when adding remote signing
+    capabilities to deb(r)sign in 2.4.[01])
+
+ -- Julian Gilbey <jdg@debian.org>  Sun,  7 Nov 1999 02:37:17 +0000
+
+devscripts (2.4.2) unstable; urgency=low
+
+  * Change netstd dependency to netstd (<<3.07-8) | ftp dependency
+    (closes: #49322, #49331)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun,  7 Nov 1999 02:24:43 +0000
+
+devscripts (2.4.1) unstable; urgency=low
+
+  * Added remote changes file functionality to debsign
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  4 Nov 1999 01:09:13 +0000
+
+devscripts (2.4.0) unstable; urgency=low
+
+  * Use Edward Betts' procmailrc examples files
+  * Suggest perl5-suid | perl-suid instead of perl-suid (closes: #42873)
+  * Corrected debchange to handle all sorts of version numbers, and to
+    use dpkg-parsechangelog for correctness (closes: #43082)
+  * Corrected dscverify: use POSIX and don't have barewords (closes: #45858)
+  * Renamed signchanges to debsign
+  * Allowed .changes name to be determined automatically by debsign
+  * Added debrsign program (closes: #44051)
+  * Cleaned up shebang lines
+  * Corrected uscan to allow absolute links (closes: #45672)
+  * Make ftp connections passive (closes: #46193)
+  * Corrected extraneous directory changing (closes: #46645)
+  * Use dpkg-parsechangelog to determine package name and version in
+    uupdate (closes: #47402)
+  * Make pgp/gpg choice of debsign behave in the same way as
+    dpkg-buildpackage.
+  * dscverify now uses GPG and will need an RSA extension to check PGP
+    signatures
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 28 Oct 1999 16:39:42 +0100
+
+devscripts (2.3.9) unstable; urgency=low
+
+  * Correct gpg signchanges patch (closes: #42188, thanks to Adam Heath)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun,  8 Aug 1999 10:05:34 +0100
+
+devscripts (2.3.8) unstable; urgency=low
+
+  * Changed perl5 dependency to perl5 | perl (closes: #42329)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  4 Aug 1999 10:32:39 +0100
+
+devscripts (2.3.7) unstable; urgency=low
+
+  * Correct html patch (closes: #41986)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 28 Jul 1999 00:37:59 +0100
+
+devscripts (2.3.6) unstable; urgency=low
+
+  * Corrected Makefile.am bug which makes all Perl scripts begin #! @PERL@
+    -- ouch!!  (closes: #41846, part of #41850)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 25 Jul 1999 02:12:37 +0100
+
+devscripts (2.3.5) unstable; urgency=low
+
+  * Change Suggests: libmd5-perl to libdigest-md5-perl
+  * Incorporated Joseph Carter's gpg patch to signchanges (closes: #40727)
+  * Incorporated Raphael Hertzog's patch to not depend on
+    liblocale-gettext-perl (closes: #40596)
+  * Applied Piotr Roszatycki's patch to allow uscan to use http://
+    prefixed locations (closes: #41272)
+
+ -- Julian Gilbey <jdg@debian.org>  Fri, 23 Jul 1999 09:24:53 +0100
+
+devscripts (2.3.4) unstable; urgency=low
+
+  * Change perl dependency to perl5 dependency
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  1 Jul 1999 23:02:33 +0100
+
+devscripts (2.3.3) unstable; urgency=low
+
+  * Corrected debpkg manpage (closes: #40279)
+  * Remove dependency on dupload (closes: #40382)
+  * Add -p (preserve directory name) option to dch (closes: #39385)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  1 Jul 1999 02:54:24 +0100
+
+devscripts (2.3.2) unstable; urgency=low
+
+  * More corrections to uscan, with thanks to Thomas Quinot.  Closes:
+    #40227
+  * Added -e/-E options to debuild (closes: #40071)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 27 Jun 1999 03:00:22 +0100
+
+devscripts (2.3.1) unstable; urgency=low
+
+  * Really fix bug#38798 this time: versort and uscan now work correctly
+    together
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 22 Jun 1999 00:45:52 +0100
+
+devscripts (2.3.0) unstable; urgency=low
+
+  * Reinstated the release script (renamed as debrelease) (closes #34122)
+  * dch can now determine (in conjunction with dupload 2.1) whether or not
+    to increment the version number without needing an explicit option
+    (closes #34130)
+  * Internationalisation of the package
+  * Correct the (internal) versort library file description (closes:
+    #38798)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 22 Jun 1999 00:45:39 +0100
+
+devscripts (2.2.7) unstable; urgency=low
+
+  * signchanges now correctly handles signing binary-only changes files
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 31 May 1999 22:35:20 +0100
+
+devscripts (2.2.6) unstable; urgency=low
+
+  * Corrected silly dscverify bug so it now works with filenames with no
+    directory components -- duh!  (closes: #38065)
+  * Corrected perl regexp in signchanges so it now finds the dsc file
+    (closes: #38049)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 23 May 1999 16:44:32 +0100
+
+devscripts (2.2.5) unstable; urgency=high
+
+  * Now only recommend fakeroot (and not libtricks) to alleviate grave
+    bug #37592 against dpkg
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 13 May 1999 01:45:02 +0100
+
+devscripts (2.2.4) unstable; urgency=low
+
+  * debchange/dch now looks for environment variable DEBEMAIL before
+    EMAIL (closes: #37199)
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  5 May 1999 23:55:15 +0100
+
+devscripts (2.2.3) unstable; urgency=low
+
+  * Correct debdiff Perl error and inconsistency
+
+ -- Julian Gilbey <jdg@debian.org>  Tue,  4 May 1999 05:01:17 +0100
+
+devscripts (2.2.2) unstable; urgency=low
+
+  * Fixed signchanges to die if PGP fails, rather than to wipe the
+    unsigned .changes file (closes: #36625)
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 27 Apr 1999 01:57:57 +0100
+
+devscripts (2.2.1) unstable; urgency=low
+
+  * Correct copyright notice in debdiff.1
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 21 Apr 1999 02:10:59 +0100
+
+devscripts (2.2.0) unstable; urgency=low
+
+  * Merged Yann's debdiff manpage with my attempt; bumping up the minor
+    number because of the new program
+  * Simplified debdiff's exit values
+  * debdiff is now licensed under version 2 of the GPL, rather than
+    version 2 or later
+  * Modified debchange/dch to always use the current date at the end of
+    the changelog section, even when adding an entry
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 19 Apr 1999 20:00:34 +0100
+
+devscripts (2.1.6) unstable; urgency=low
+
+  * Modify debdiff to ignore the destinations of symlinks
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 13 Apr 1999 23:44:47 +0100
+
+devscripts (2.1.5) unstable; urgency=low
+
+  * Now only Suggests: rather than Recommend: perl-suid (closes: #35635)
+  * Added Roderick's patch to dscverify, and added a change directory
+    feature of my own: a .changes file may be in any directory, and the
+    program will cd to that directory before trying to read any files
+    (closes: #34255)
+  * Added a rewritten, Perl version, of Yann Dirson's debdiff script
+    (closes: #34781)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 12 Apr 1999 22:50:44 +0100
+
+devscripts (2.1.4) unstable; urgency=low
+
+  * Modify versort to be locale-independent, matching the corresponding
+    expected change in dpkg
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  3 Mar 1999 01:10:37 +0000
+
+devscripts (2.1.3) unstable; urgency=low
+
+  * Removed CVS files from .orig.tar.gz file!
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 25 Feb 1999 19:57:50 +0000
+
+devscripts (2.1.2) unstable; urgency=low
+
+  * Made debpkg pick up gid root as well as uid root
+
+ -- Julian Gilbey <jdg@debian.org>  Tue, 23 Feb 1999 18:08:23 +0000
+
+devscripts (2.1.1) unstable; urgency=low
+
+  * Moved package from utils to devel (closes: #33410)
+
+ -- Julian Gilbey <jdg@debian.org>  Sun, 21 Feb 1999 00:52:26 +0000
+
+devscripts (2.1.0) unstable; urgency=low
+
+  * Correct README to refer to libtricks package rather than fakeroot
+    package (closes: #32736)
+  * Modify uupdate to accept a -u argument to keep an Upstream pristine
+    source (closes: #32680, #12443); bump up the minor version number for
+    this
+  * A few other miscellaneous bug fixes to uupdate to be stricter about
+    seeming problems
+  * Added a new program: signchanges for signing a .changes/.dsc pair
+    without needing any of the rest of the source or binary files to be
+    present; this is useful for when a developer must build a package on
+    a machine other than the one on which he is signing
+
+ -- Julian Gilbey <jdg@debian.org>  Wed,  3 Feb 1999 02:31:15 +0000
+
+devscripts (2.0.6) unstable; urgency=low
+
+  * Updated man page for uupdate to reflect change in 2.0.5
+
+ -- Julian Gilbey <jdg@debian.org>  Wed, 20 Jan 1999 12:44:11 +0000
+
+devscripts (2.0.5) unstable; urgency=low
+
+  * Made test invocations POSIX compliant by removing -a connectives
+  * Uupdate now also accepts an absolute filename (closes: #31884)
+  * Allowed debuild to accept a space after the -r option
+  * More checks in uupdate to make it more robust
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 18 Jan 1999 16:51:16 +0000
+
+devscripts (2.0.4) unstable; urgency=low
+
+  * Changed control file to refer to package libtricks rather than old
+    name fakeroot (spotted by Edward Betts)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon, 11 Jan 1999 00:24:02 +0000
+
+devscripts (2.0.3) unstable; urgency=medium
+
+  * Second attempt at correcting critical /tmp security bug (thanks to
+    Joey Hess!)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  7 Jan 1999 22:46:01 +0000
+
+devscripts (2.0.2) unstable; urgency=low
+
+  * Disallow debchange and uupdate from being run by root or setuid; this
+    prevents possible /tmp exploits (Spotted by Joey Hess)
+  * Use the TMPDIR environment variable instead of /tmp if it is set
+    (requested by Zephaniah E, Hull)
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  7 Jan 1999 21:56:11 +0000
+
+devscripts (2.0.1) unstable; urgency=low
+
+  * Corrected silly LIBDIR bug in uscan
+  * Corrected missing newline characted in debchange
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  7 Jan 1999 18:24:58 +0000
+
+devscripts (2.0.0) unstable; urgency=low
+
+  * New maintainer
+  * Standards: 2.5.0.0
+  * New version numbering scheme: major.minor.patchlevel
+  * Changed the name of build to debuild.  build now just prints an error
+    message and will disappear completely in the near future.
+  * Correct handling of epochs in debc, debi and release (closes: #29855)
+  * Use environment variables EDITOR, then VISUAL, and failing that,
+    /usr/bin/editor in accordance with policy 5.3 (except that VISUAL is
+    not mentioned there)  (closes: #28605)
+  * Many modifications to uscan: it now compares version numbers
+    correctly, using a Perl script which works in a similar way to
+    dpkg --compare-versions, and it no longer has the extra 0 bug
+    (closes: #19235, #19467); it no longer uses ncftp but only ftp
+    (closes: #20968)
+  * uscan now expects the watch file to explicitly indicate how to deduce
+    the version number from the filename, by writing the filename as a
+    Perl regular expression and enclosing the version number part in (...)
+  * uupdate now allows a version number as an argument after the archive
+    filename, allowing it to work in harmony with uscan (closes: #20278)
+  * uupdate no longer tries to remove *.orig files, as the only ones which
+    are created by GNU patch are those where the patch failed, and we
+    probably _want_ to keep those (closes: #25774)
+  * build rewritten in Perl (now called debuild); has a nicer handling of
+    command line options (can accept a -r option with one of binary etc.,
+    and doesn't need an explicit -r option if there are other
+    dpkg-buildpackage options)  (closes: #27752)
+  * debpkg rewritten in Perl as well
+  * This package is now an Architecture: all package as there are no
+    binaries left
+  * debchange now uses the last distributions mentioned in the changelog
+    as the default for the new version (closes: #30204)
+  * debchange now uses the environment variables DEBFULLNAME and EMAIL as
+    the uploader's details if these are set
+  * release has been deprecated in favour of dupload, and now just prints
+    a message suggesting the use of dupload instead (Closes: #29826,
+    #29978)
+  * The debchange command line options have been changed.  debchange no
+    longer pays attention to the presence of a RELEASED file.  The -i
+    option is for Increasing the Debian release number; the -a option is
+    for Appending to the current version, and the -v option specifies a
+    specific version number.  One of these is mandatory
+  * Debchange now adds new changelog entries to the END of the current
+    section, rather than the beginning
+  * Improved logic of upgrading the Debian release number in debchange
+  * Debchange does not supply a release number if there is an explicit
+    version number provided
+  * Now debchange works on a version of the changelog in /tmp and only
+    overwrites the current changelog if everything is OK; this is much
+    safer than the original version.  Also, all system calls have their
+    return status checked
+  * release and build now print error messages suggesting their
+    replacements
+  * debuild now runs lintian by default if it is installed; there is an
+    override facility etc., as described in the manpage (Closes: #18254)
+  * Added Roderick Schertler's dscverify program to devscripts
+  * Rewrote many bits of many man pages
+  * debian/rules and Makefile modified to use debhelper
+
+ -- Julian Gilbey <jdg@debian.org>  Thu,  7 Jan 1999 02:46:04 +0000
+
+devscripts (1.7.1) frozen unstable; urgency=medium
+
+  * Corrected file permissions (Closes: #31447)
+
+ -- Julian Gilbey <jdg@debian.org>  Mon,  4 Jan 1999 10:29:19 +0000
+
+devscripts (1.7) frozen unstable; urgency=low
+
+  * Changed uupdate to be more choosy about the version numbers
+    automatically recognised  (Closes: #30838)
+  * New maintainer
+
+ -- Julian Gilbey <jdg@debian.org>  Thu, 24 Dec 1998 13:07:13 +0000
+
+devscripts (1.6) unstable; urgency=low
+
+  * #23098 build manpage update
+  * #23097 build: Preserve FAKEROOTKEY
+  * #19172 remove description for deblint
+  * #18564 depend on mailx
+  * #14314 release: epochs work now.
+  * #18498 conffiles are now absolute
+  * #24455 #24074 release: new scp requires -q option
+
+ -- Christoph Lameter <clameter@debian.org>  Sat, 11 Jul 1998 21:45:47 -0700
+
+devscripts (1.5) unstable; urgency=low
+
+  * #18235: build checks for executable bit on debian/rules and sets it if
+    not set before building package. build fails when debian/rules is not
+    present.
+
+ -- Christoph Lameter <clameter@debian.org>  Sun, 15 Feb 1998 20:01:09 -0800
+
+devscripts (1.4) unstable; urgency=low
+
+  * Upgrade to 2.4.0.0
+  * remove deblint from the package since there is now lintian which is much
+    better.
+
+ -- Christoph Lameter <clameter@debian.org>  Sat, 14 Feb 1998 14:37:42 -0800
+
+devscripts (1.3) unstable; urgency=low
+
+  * build: change default path. Remove sbin dirs add /usr/local/bin
+
+ -- Christoph Lameter <clameter@debian.org>  Wed,  4 Feb 1998 13:07:04 -0800
+
+devscripts (1.2) unstable; urgency=low
+
+  * Fix a problem with anonymous ftp upload of larger lists of files.
+  * Remove ftp.fuller.edu and lalug.org upload queue since they no longer exist.
+  * Add anonymous ftp type upload capability.
+  * Add third party site upload capability.
+  * Add debs.fuller.edu site information
+
+ -- Christoph Lameter <clameter@debian.org>  Tue,  2 Dec 1997 12:53:18 -0800
+
+devscripts (1.1) unstable; urgency=low
+
+  * Remove release fix for epochs introduced in 1.0 since it breaks lots of
+    things until I figure out what is wrong.
+  * Drop dependency on fileutils.
+
+ -- Christoph Lameter <clameter@debian.org>  Wed, 29 Oct 1997 17:14:26 -0800
+
+devscripts (1.0) unstable; urgency=low
+
+  * release: Make scp not ask anything so release does not hang when scp
+    wants a password.
+  * #13908 Try to fix release so that it handles epochs.
+  * #13681 Fix manpage for release to indicate that no annoucements will be
+    generated when dupload is used.
+  * #13777 no longer use printf in debchange (dch)
+  * #13846 Output Format of release changed
+  * Suggest fakeroot
+  * Split off from debmake
+  * Update documentation
+
+ -- Christoph Lameter <clameter@debian.org>  Mon, 20 Oct 1997 21:02:27 -0700
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..1e8b314
--- /dev/null
@@ -0,0 +1 @@
+6
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..38c07c8
--- /dev/null
@@ -0,0 +1,133 @@
+Source: devscripts
+Section: devel
+Priority: optional
+Maintainer: Devscripts Devel Team <pkg-devscripts@teams.debian.net>
+Uploaders: Julian Gilbey <jdg@debian.org>, Joey Hess <joeyh@debian.org>, Mohammed Adnène Trojette <adn+deb@diwi.org>, Christoph Berg <myon@debian.org>, Stefano Zacchiroli <zack@debian.org>, James McCoy <jamessan@debian.org>, Martin Zobel-Helas <zobel@debian.org>, Adam D. Barratt <adam@adam-barratt.org.uk>, Luk Claes <luk@debian.org>, Patrick Schoenfeld <schoenfeld@debian.org>, Ryan Niebur <ryanryan52@gmail.com>
+Standards-Version: 3.8.4
+Build-Depends: perl, debhelper (>= 6.0.0), docbook-xsl, libtimedate-perl,
+ libfile-desktopentry-perl, libterm-size-perl,  liburi-perl, libwww-perl,
+ po4a (>= 0.40), xsltproc, libjson-perl
+Vcs-Browser: http://git.debian.org/?p=devscripts/devscripts.git
+Vcs-Git: git://git.debian.org/devscripts/devscripts.git
+
+Package: devscripts
+Architecture: any
+Depends: dpkg-dev (>= 1.15.4.1), perl, ${shlibs:Depends}, ${misc:Depends}
+Recommends: at, curl | wget, dctrl-tools, debian-keyring, debian-maintainers,
+ dput | dupload, equivs, fakeroot, gnupg, libauthen-sasl-perl,
+ libcrypt-ssleay-perl, libparse-debcontrol-perl, libsoap-lite-perl,
+ libterm-size-perl, libtimedate-perl, liburi-perl, libwww-perl,
+ libyaml-syck-perl, lintian, lsb-release, bsd-mailx | mailx,
+ man-db, patch, patchutils, ssh-client, strace, unzip, wdiff, www-browser,
+ subversion | cvs | darcs | tla | bzr | git-core | mercurial, lzma,
+ xz-utils, sensible-utils, libjson-perl
+Suggests: build-essential, cvs-buildpackage, devscripts-el, gnuplot,
+ libfile-desktopentry-perl, libnet-smtp-ssl-perl (>= 1.01-2), mutt,
+ svn-buildpackage, w3m
+Description: scripts to make the life of a Debian Package maintainer easier
+ Contains the following scripts, dependencies/recommendations shown in
+ brackets afterwards:
+ .
+  - annotate-output: run a command and prepend time and stream (O for stdout,
+    E for stderr) for every line of output
+  - archpath: print tla/Bazaar package names [tla | bazaar]
+  - bts: a command-line tool for manipulating the BTS [www-browser,
+    libauthen-sasl-perl, libnet-smtp-ssl-perl, libsoap-lite-perl, libwww-perl,
+    bsd-mailx | mailx]
+  - build-rdeps: Searches for all packages that build-depend on a
+    given package [dctrl-tools]
+  - chdist: tool to easily play with several distributions [dctrl-tools]
+  - checkbashisms: check whether a /bin/sh script contains any common
+    bash-specific contructs
+  - 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]
+  - dcmd: run a given command replacing the name of a .changes or .dsc file
+    with each of the files referenced therein 
+  - dcontrol: remotely query package and source control files for all Debian
+    distributions. [liburl-perl, libwww-perl]
+  - dd-list: given a list of packages, pretty-print it ordered by maintainer
+  - debc: display the contents of just-built .debs
+  - debchange/dch: automagically add entries to debian/changelog files
+    [libparse-debcontrol-perl, libsoap-lite-perl, lsb-release]
+  - debcheckout: checkout the development repository of a Debian package
+  - debclean: purge a Debian source tree [fakeroot]
+  - debcommit: commit changes to cvs, darcs, svn, svk, tla, bzr, git, or hg,
+    basing commit message on changelog
+    [cvs | darcs | subversion | svk | tla | bzr | git-core | mercurial]
+  - debdiff: compare two versions of a Debian package to check for
+    added and removed files [wdiff, patchutils]
+  - debi: install a just-built package
+  - debpkg: dpkg wrapper to be able to manage/test packages without su
+  - debrelease: wrapper around dupload or dput [dupload | dput, ssh-client]
+  - debsign, debrsign: sign a .changes/.dsc pair without needing any of
+    the rest of the package to be present; can sign the pair remotely
+    or fetch the pair from a remote machine for signing [gnupg,
+    debian-keyring, ssh-client]
+  - debsnap: grab packages from http://snapshot.debian.org [libwww-perl,
+    libjson-perl]
+  - debuild: wrapper to build a package without having to su or worry
+    about how to invoke dpkg to build using fakeroot.  Also deals
+    with common environment problems, umask etc. [fakeroot,
+    lintian, gnupg]
+  - deb-reversion: increases a binary package version number and repacks the
+    archive
+  - desktop2menu: produce a skeleton menu file from a freedesktop.org
+    desktop file [libfile-desktopentry-perl]
+  - dget: downloads Debian source and binary packages [wget | curl]
+  - dpkg-depcheck, dpkg-genbuilddeps: determine the packages used during
+    the build of a Debian package; useful for determining the Build-Depends
+    control field needed [build-essential, strace]
+  - diff2patches: extract patches from a .diff.gz file placing them  under
+    debian/ or, if present, debian/patches [patchutils]
+  - dscverify: verify the integrity of a Debian package from the
+    .changes or .dsc files [gnupg, debian-keyring, libdigest-md5-perl]
+  - getbuildlog: download package build logs from Debian auto-builders [wget]
+  - grep-excuses: grep the update_excuses.html file for your packages
+    [libterm-size-perl, wget, w3m]
+  - licensecheck: attempt to determine the license of source files
+  - list-unreleased: searches for unreleased packages
+  - manpage-alert: locate binaries without corresponding manpages [man-db]
+  - mass-bug: mass-file bug reports [bsd-mailx | mailx]
+  - mergechanges: merge .changes files from a package 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 packages. [equivs]
+  - namecheck: Check project names are not already taken.
+  - nmudiff: mail a diff of the current package against the previous version
+    to the BTS to assist in tracking NMUs [patchutils, mutt]
+  - plotchangelog: view a nice plot of the data in a changelog file
+    [libtimedate-perl, gnuplot]
+  - pts-subscribe: subscribe to the PTS for a limited period of time
+    [bsd-mailx | mailx, at]
+  - rc-alert: list installed packages which have release-critical bugs [wget]
+  - rmadison: remotely query the Debian archive database about packages
+    [wget | curl, liburi-perl]
+  - svnpath: print svn repository paths [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: scan upstream sites for new releases of packages
+    [libcrypt-ssleay-perl, libwww-perl, unzip, lzma, xz-utils]
+  - uupdate: integrate upstream changes into a source package [patch]
+  - whodepends: check which maintainers' packages depend on a package
+  - who-uploads: determine the most recent uploaders of a package to the Debian
+    archive [gnupg, debian-keyring, debian-maintainers, wget]
+  - wnpp-alert: list installed packages which are orphaned or up for
+    adoption [wget]
+  - wnpp-check: check whether there is an open request for packaging or
+    intention to package bug for a package [wget]
+ .
+ Also included are a set of example mail filters for filtering mail
+ from Debian mailing lists using exim, procmail, etc.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..822b50b
--- /dev/null
@@ -0,0 +1,45 @@
+The current development version can be downloaded from the SVN
+repository at
+
+   svn://svn.debian.org/devscripts/trunk
+
+or browsed online from http://svn.debian.org/
+
+This is a package written originally by Christoph Lameter
+<clameter@debian.org> and extensively modified by Julian Gilbey
+<jdg@debian.org>.
+
+Many of the scripts were originally written by other people.  Please
+see the individual files (scripts and manpages) for more information.
+
+Most of the Devscripts::* Perl modules are from the deprecated
+dpkg-perl package, copyright (C) 1997  Klee Dienes <klee@mit.edu>
+
+With the exceptions listed below, the whole package is copyright under
+the GPL, version 2 or later.
+
+- annotate-output, debdiff and nmudiff are released under version 2 
+  (only) of the GPL.
+
+- debsnap and diff2patches are released under version 3 or later of the GPL
+
+- deb-reversion is under the Artistic License version 2.0.
+
+- namecheck and the Perl module DB_File::Lock used by bts are copyright
+  under the same terms as Perl, that is:
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of either:
+
+    a) the GNU General Public License as published by the Free Software
+       Foundation; either version 1, or (at your option) any later
+       version, or
+
+    b) the "Artistic License" which comes with Perl.
+
+- whodepends, wnpp-alert and wnpp-check are in the public domain
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License, versions 2 and 3, can be found in
+`/usr/share/common-licenses/GPL-2' and `/usr/share/common-licenses/GPL-3'
+and the Artistic License in `/usr/share/common-licenses/Artistic'.
diff --git a/debian/dirs b/debian/dirs
new file mode 100644 (file)
index 0000000..a0dd7ce
--- /dev/null
@@ -0,0 +1,5 @@
+etc/bash_completion.d
+usr/bin
+usr/lib/devscripts
+usr/share/devscripts
+usr/share/bug/devscripts
diff --git a/debian/examples b/debian/examples
new file mode 100644 (file)
index 0000000..e39721e
--- /dev/null
@@ -0,0 +1 @@
+examples/*
diff --git a/debian/genmanpage.pl b/debian/genmanpage.pl
new file mode 100644 (file)
index 0000000..806b77b
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+# Define item leadin/leadout for man output
+my $ITEM_LEADIN = '.IP "\fI';
+my $ITEM_LEADOUT = '\fR(1)"';
+
+# Open control file
+open(CONTROL, "< ../debian/control") or die "unable to open control: $!";
+
+my $package;
+my $description;
+
+# Parse the control file
+while(<CONTROL>) {
+    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/^.{3}//;
+       $description .= $_;
+    }
+}
diff --git a/debian/install b/debian/install
new file mode 100644 (file)
index 0000000..17f2e34
--- /dev/null
@@ -0,0 +1,2 @@
+debian/bug/* /usr/share/bug/devscripts
+cowpoke.conf /etc
diff --git a/debian/links b/debian/links
new file mode 100644 (file)
index 0000000..4891b68
--- /dev/null
@@ -0,0 +1,7 @@
+/usr/bin/cvs-debi                              /usr/bin/cvs-debc
+/usr/bin/debchange                             /usr/bin/dch
+/usr/bin/debi                                  /usr/bin/debc
+/usr/bin/pts-subscribe                         /usr/bin/pts-unsubscribe
+/usr/share/devscripts/conf.default             /usr/share/doc/devscripts/devscripts.conf.ex
+/usr/share/man/man1/debchange.1.gz             /usr/share/man/man1/dch.1.gz
+/usr/share/man/man1/pts-subscribe.1.gz         /usr/share/man/man1/pts-unsubscribe.1.gz
diff --git a/debian/lintian.overrides b/debian/lintian.overrides
new file mode 100644 (file)
index 0000000..646f453
--- /dev/null
@@ -0,0 +1,2 @@
+# "debsnap: grab packages from http://snapshot.debian.org" isn't a homepage
+devscripts: description-possibly-contains-homepage http://snapshot.debian.org
diff --git a/debian/manpages b/debian/manpages
new file mode 100644 (file)
index 0000000..7f1f3db
--- /dev/null
@@ -0,0 +1,4 @@
+scripts/*.1
+scripts/*.5
+po4a/fr/*.1
+po4a/fr/*.5
diff --git a/debian/postinst b/debian/postinst
new file mode 100644 (file)
index 0000000..0227377
--- /dev/null
@@ -0,0 +1,695 @@
+#! /bin/sh
+set -e
+
+if [ "$1" = configure ]
+then
+    if dpkg --compare-versions "$2" lt 2.6.90 && [ ! -f /etc/devscripts.conf ]
+    then
+       cp /usr/share/devscripts/conf.default /etc/devscripts.conf
+    elif [ -f /etc/devscripts.conf ]
+    then
+       # Are we dealing with an upgrade from pre-sarge?
+       if dpkg --compare-versions "$2" lt 2.8.14
+       then
+           if dpkg --compare-versions "$2" lt 2.7.1
+           then
+               # This is for bug #149712.  Oops.
+               perl -i -pe 's/DEBDIFF_SHOWMOVED/DEBDIFF_SHOW_MOVED/g' \
+                   /etc/devscripts.conf
+           fi
+
+           if dpkg --compare-versions "$2" lt 2.7.90
+           then
+               # Added in devscripts 2.7.90:
+               cat >> /etc/devscripts.conf <<EOF
+
+# debchange/dch option added in version 2.7.90:
+# 
+# Query the BTS when --closes is being used?
+# DEBCHANGE_QUERY_BTS=yes
+# 
+# uupdate option added in version 2.7.90:
+# 
+# Should we symlink the .orig.tar.gz file to its new name or
+# copy it instead?  yes=symlink, no=copy
+# UUPDATE_SYMLINK_ORIG=yes
+EOF
+           fi
+
+           if dpkg --compare-versions "$2" lt 2.7.93
+           then
+               # Added in devscripts 2.7.93:
+               cat >> /etc/devscripts.conf <<EOF
+
+# debuild options added in version 2.7.93:
+# 
+# Do we run linda at the end of a full run?
+# DEBUILD_LINDA=no
+# 
+# Extra options given to linda before any command-line options
+# specified.
+# DEBUILD_LINDA_OPTS=""
+
+##### Package-wide variables first introduced in version 2.7.93:
+# 
+# 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(-.+)?'
+EOF
+           fi
+
+           if [ "$2" = "2.8.6" ]
+           then
+               # Added in devscripts 2.8.6:
+               cat >> /etc/devscripts.conf <<EOF
+
+##### bts options changes between version 2.8.6 and version 2.8.7:
+# 
+# The following option replaces the previous BTS_FULL_MIRROR option.
+# 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
+# 
+# The following is a new option
+# 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'
+EOF
+           elif dpkg --compare-versions "$2" lt 2.8.7
+           then
+               # Added in devscripts 2.8.6 and 2.8.7:
+               cat >> /etc/devscripts.conf <<EOF
+
+##### bts options added in versions 2.8.6 and 2.8.7:
+# 
+# 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'
+EOF
+           fi
+
+           if dpkg --compare-versions "$2" lt 2.8.12
+           then
+               # Added in devscripts 2.8.12:
+               cat >> /etc/devscripts.conf <<EOF
+
+##### uscan option added in version 2.8.12:
+# 
+# Should we use DEHS style output (XML format)?
+# USCAN_DEHS_OUTPUT=no
+# 
+EOF
+           fi
+       fi
+
+       # The next section is all post-sarge updates
+       if dpkg --compare-versions "$2" lt 2.8.15
+       then
+       # Added in devscripts 2.8.15:
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debchange option added in version 2.8.15:
+# 
+# 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
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.9.5
+       then
+       # Added in devscripts 2.9.5:
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debchange option added in version 2.9.5:
+# 
+# Introduce multiple-maintainer markers in changelog sections?
+# DEBCHANGE_MULTIMAINT=yes
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.9.15
+       then
+       # Added in devscripts 2.9.15:
+           cat >> /etc/devscripts.conf <<EOF
+
+##### bts option added in version 2.9.15
+# 
+# What sendmail command do we use?  This will be split on whitespace.
+# BTS_SENDMAIL_COMMAND='/usr/sbin/sendmail'
+
+##### dpkg-sig options added in version 2.9.15
+# 
+# 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
+
+##### pts-subscribe added in version 2.9.15
+# 
+# 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'
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.9.17
+       then
+       # Added in devscripts 2.9.17:
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debdiff option added in version 2.9.17
+# 
+# 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
+
+##### debrelease/debc/debi option added in version 2.9.17
+# 
+# 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 option affects all of debrelease, debc and debi.
+# DEBRELEASE_DEBS_DIR=..
+
+##### debuild options added in version 2.9.17
+# 
+# Do we check for the existence of the .orig.tar.gz before calling
+# dpkg-buildpackage?
+# DEBUILD_TGZ_CHECK=yes
+# 
+# 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=""
+
+##### who-uploads options added in version 2.9.17
+# 
+# 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
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.9.26
+       then
+           # Added in devscripts 2.9.25/26, but version comparison test was
+           # incorrect in version 2.9.25:
+           cat >> /etc/devscripts.conf <<EOF
+
+##### nmudiff options added in versions 2.9.25 and 2.9.26
+# 
+# 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
+
+##### dget option added in version 2.9.26
+# 
+# Extra directories to search for files in addition to
+# /var/cache/apt/archives.  This is a colon-separated list of directories.
+# DGET_PATH=""
+EOF
+
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.3
+        then
+            # Added in devscripts 2.10.3
+            cat >> /etc/devscripts.conf <<EOF
+
+##### licensecheck options added in version 2.10.3
+#
+# Print the file header being parsed before the corresponding license
+# information?
+# LICENSECHECK_VERBOSE=no
+#
+# How many lines of each file should be parsed for license information?
+# LICENSECHECK_PARSELINES=60
+
+##### debchange option added in version 2.10.3
+#
+# Use a fixed timezone in changelog entries?
+# DEBCHANGE_TZ=UTC
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.4
+       then
+           # Added in devscripts 2.10.4
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debchange option added in version 2.10.4
+#
+# 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
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.5
+       then
+           # Added in devscripts 2.10.5
+           # BTS_ONLY_NEW was added in 2.10.2 but not added to the
+           # configuration files
+           cat >> /etc/devscripts.conf <<EOF
+
+##### bts option added in version 2.10.2
+# Download only new bugs when caching?  If set to yes, don't check for
+# updates in bugs we already have.
+# BTS_ONLY_NEW=no
+
+##### bts options added in version 2.10.5
+#
+# 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=bugs.debian.org
+#
+# Include resolved bugs when caching?
+# BTS_INCLUDE_RESOLVED=yes
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.7
+       then
+           # Added in devscripts 2.10.7
+           cat >> /etc/devscripts.conf <<EOF
+
+##### uscan option added in version 2.10.7
+#
+# What user agent string should we send with requests?
+# (Default is 'Debian uscan X.Y.Z')
+# USCAN_USER_AGENT=''
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.8
+       then
+           # Added in devscripts 2.10.8
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debcommit option added in version 2.10.8
+#   
+# Strip a leading "* " from commit messages taken from changelogs?
+# DEBCOMMIT_STRIP_MESSAGE=no
+EOF
+       fi
+       
+       if dpkg --compare-versions "$2" lt 2.10.10
+       then
+           # Added in devscripts 2.10.10
+           cat >> /etc/devscripts.conf <<EOF
+
+##### debcommit option added in version 2.10.10
+#
+# Sign created tags using gnupg?
+# DEBCOMMIT_SIGN_TAGS=no
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.12
+       then
+           # Added in devscripts 2.10.12
+           cat >> /etc/devscripts.conf <<EOF
+##### debchange option added in version 2.10.12
+#
+# When appending entries to the changelog, should the trailer line
+# be maintained as-is?
+# DEBCHANGE_MAINTTRAILER=yes
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.14
+       then
+           # Actually added in devscrips 2.10.9
+           # but not added to the configuration file
+           cat >> /etc/devscripts.conf <<EOF
+
+##### uscan option added in version 2.10.9
+#
+# Where should downloaded files be placed?
+# USCAN_DESTDIR=..
+EOF
+           # Added in devscripts 2.10.14
+           cat >> /etc/devscripts.conf <<EOF
+
+##### bts option added in version 2.10.14
+#
+# Suppress BTS acknowledgment e-mails (ignored by the control bot)
+# BTS_SUPPRESS_ACKS=no
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.17
+       then
+           # Added in devscripts 2.10.17
+           cat >> /etc/devscripts.conf <<EOF
+
+##### dget options added in version 2.10.17
+#
+# Unpack downloaded source packages
+# DGET_UNPACK=yes
+# Verify source package signatures using dscverify
+# DGET_VERIFY=yes
+#
+##### bts options added in version 2.10.17
+#
+# 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 
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.19
+       then
+           # Added in devscripts 2.10.19
+           cat >> /etc/devscripts.conf <<EOF
+##### debchange option added in version 2.10.19
+#
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.20
+       then
+           # Added in devscripts 2.10.20
+           cat >> /etc/devscripts.conf <<EOF
+##### debcommit option added in version 2.10.20
+#
+# Take any uncommitted changes in the changelog in
+# to account when determining the commit message
+# for a release?
+# DEBCOMMIT_RELEASE_USE_CHANGELOG=no
+
+##### debuild options added in version 2.10.20
+#
+# 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"
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.21
+       then
+           # Added in devscripts 2.10.21
+           cat >> /etc/devscripts.conf <<EOF
+##### bts options added in version 2.10.21
+#
+# 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
+
+##### debdiff option added in version 2.10.21
+# Include the output of diffstat?
+# DEBDIFF_SHOW_DIFFSTAT=no
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.22
+       then
+           # Added in devscripts 2.10.22
+           cat >> /etc/devscripts.conf <<EOF
+##### bts option added in version 2.10.22
+#
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.24
+       then
+           # Added in devscripts 2.10.24
+           cat >> /etc/devscripts.conf <<EOF
+##### debchange option added in version 2.10.24
+#
+# Attempt to automatically determine whether the current changelog
+# stanza represents an NMU?
+# DEBCHANGE_AUTO_NMU=yes
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.26
+       then
+           # Added in devscripts 2.10.26
+           cat >> /etc/devscripts.conf <<EOF
+##### rmadison option added in version 2.10.26
+# 
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.30
+       then
+           # Added in devscripts 2.10.30
+           cat >> /etc/devscripts.conf <<EOF
+##### who-uploads option added in version 2.10.30
+#
+# Display the date of the upload?
+#
+# WHOUPLOADS_DATE=no
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.36
+       then
+           # Added in devscripts 2.10.36
+           cat >> /etc/devscripts.conf <<EOF
+##### debdiff option added in version 2.10.36
+#
+# Compare control files in source packages using widff?
+#
+# DEBDIFF_WDIFF_SOURCE_CONTROL=no
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.38
+       then
+           if [ -f "/etc/devscripts.con" ] &&
+             [ "10cabcba2772fc97064bf2f51b39bf25" = \
+             "$(md5sum /etc/devscripts.con | cut -d" " -f1)" ]
+           then
+               rm /etc/devscripts.con
+
+               # Added in devscripts 2.10.36 but to the wrong file
+               cat >> /etc/devscripts.conf <<EOF
+##### debdiff option added in version 2.10.36
+#
+# Compare control files in source packages using widff?
+#
+# DEBDIFF_WDIFF_SOURCE_CONTROL=no
+
+EOF
+           fi
+           cat >> /etc/devscripts.conf << EOF
+##### mk-build-deps options added in version 2.10.38
+#
+# Which tool to use for installing build depends?
+# MKBUILDDEPS_TOOL=/usr/bin/apt-get
+#
+# Remove package files after install?
+# MKBUILDDEPS_REMOVE_AFTER_INSTALL=yes
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.39
+       then
+           cat >> /etc/devscripts.conf << EOF
+##### bts option added in version 2.10.39
+#
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.40
+       then
+           cat >> /etc/devscripts.conf << EOF
+##### debcheckout option added in version 2.10.40
+# 
+# List of space-separated pairs REGEXP/REPLACEMENT_TEXT to define
+# custom rules to enable authenticated mode.
+# See debcheckout(1) for a more precise description of syntax and
+# semantics of this setting.
+# DEBCHECKOUT_AUTH_URLS=''
+
+##### uscan option added in version 2.10.40
+#
+# Automatically repack bzipped tar or zip archives to gzipped tars? 
+# USCAN_REPACK=no
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.44
+       then
+           cat >> /etc/devscripts.conf << EOF
+##### bts option added in 2.10.44
+#
+# Which debbugs server should be used?
+# BTS_SERVER=bugs.debian.org
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.45
+       then
+           cat >> /etc/devscripts.conf << EOF
+##### debsnap options added in 2.10.45
+#
+# 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=http://snapshot-dev.debian.org
+
+##### debdiff option added in 2.10.45
+#
+# Always compare package in version order, rather than the order specified
+# on the command line?
+# DEBDIFF_AUTO_VER_SORT=no
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.47
+       then
+           cat >> /etc/devscripts.conf << EOF
+##### dcontrol option added in 2.10.47
+#
+# URL to query
+# DCONTROL_URL="http://qa.debian.org/cgi-bin/dcontrol"
+
+#### nmudiff option added in 2.10.47
+#
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.49
+       then
+           cat >> /etc/devscripts.conf << EOF
+#### rmadison option added in 2.10.49
+#
+# Default URL to use if none is specified on the command line.
+# RMADISON_DEFAULT_URL=debian
+
+#### debchange option added in 2.10.49
+#
+# 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
+
+EOF
+       fi
+
+       if dpkg --compare-versions "$2" lt 2.10.54
+       then
+           cat >> /etc/devscripts.conf << EOF
+#### debdiff option added in 2.10.54
+#
+# Unpack tarballs found in the top level source directory.
+# DEBDIFF_UNPACK_TARBALLS=yes
+
+EOF
+       fi
+    fi
+fi
+
+#DEBHELPER#
diff --git a/debian/postrm b/debian/postrm
new file mode 100644 (file)
index 0000000..cc5e5bc
--- /dev/null
@@ -0,0 +1,9 @@
+#! /bin/sh
+set -e
+
+if [ "$1" = purge ]
+then
+    rm -f /etc/devscripts.conf*
+fi
+
+#DEBHELPER#
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..d3573fe
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/make -f
+# debian/rules for devscripts, based on the example file rules.indep.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+optimize := -O0
+else
+optimize := -O2
+endif
+
+# Here we perform some checks to ensure that we haven't goofed or left
+# debugging code around or ... before we build the package
+test: test-stamp
+test-stamp:
+       # debugging info in bts?
+       if grep -q '\$$debug *= *1' scripts/bts.pl; then exit 1; else exit 0; fi
+       touch test-stamp
+
+build-indep: build-stamp-indep
+build-stamp-indep: test-stamp
+       dh_testdir
+       touch build-stamp-indep
+
+build-arch: build-stamp-arch
+build-stamp-arch: test-stamp
+       dh_testdir
+       $(MAKE) CFLAGS='-g $(optimize) -Wall'
+       touch build-stamp-arch
+
+build: build-arch build-indep
+
+clean:
+       dh_testdir
+       dh_testroot
+       [ ! -f Makefile ] || $(MAKE) clean
+       rm -f build-stamp* test-stamp
+       dh_clean
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k
+       dh_installdirs
+       dh_install
+       chmod +x debian/devscripts/usr/share/bug/devscripts/script
+       install -d debian/devscripts/usr/share/lintian/overrides
+       install -p -m644 debian/lintian.overrides \
+           debian/devscripts/usr/share/lintian/overrides/devscripts
+       $(MAKE) DESTDIR=$(CURDIR)/debian/devscripts install
+
+# Build architecture-independent files here.
+binary-indep: build-indep
+# We have nothing to do
+
+# Build architecture-dependent files here.
+binary-arch: build-arch install
+       dh_testdir
+       dh_testroot
+       dh_installdocs README
+       dh_installexamples
+       dh_installman
+       dh_link
+       if [ -f debian/devscripts/usr/share/man/fr/man1/debchange.1 ]; then \
+           dh_link /usr/share/man/fr/man1/debchange.1.gz \
+           /usr/share/man/fr/man1/dch.1.gz; \
+       fi
+       if [ -f debian/devscripts/usr/share/man/fr/man1/pts-subscribe.1 ]; \
+       then \
+           dh_link /usr/share/man/fr/man1/pts-subscribe.1.gz \
+           /usr/share/man/fr/man1/pts-unsubscribe.1.gz; \
+       fi
+       dh_installchangelogs
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_perl
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+
+.PHONY: build-arch build-indep build clean binary-indep binary-arch binary \
+       install
+
+# Local variables:
+# mode: makefile
+# End:
diff --git a/debian/source/format b/debian/source/format
new file mode 100644 (file)
index 0000000..89ae9db
--- /dev/null
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/debian/svn-deblayout b/debian/svn-deblayout
new file mode 100644 (file)
index 0000000..d74dbc1
--- /dev/null
@@ -0,0 +1 @@
+tagsUrl=svn+ssh://svn.debian.org/svn/devscripts/tags
diff --git a/examples/bts_autosubscription.procmail b/examples/bts_autosubscription.procmail
new file mode 100644 (file)
index 0000000..635f047
--- /dev/null
@@ -0,0 +1,32 @@
+# This handles initial submissions ("Thank you for the problem
+# report...") and also followups ("Thank you for the additional
+# information...").
+:0
+* ^To: Justin Pryzby <justinpryzby@users\.sourceforge\.net>$
+* ^From: owner@bugs\.debian\.org \(Debian Bug Tracking System\)$
+* ^Subject: Bug#\/[0-9]*
+|echo |mail "$MATCH-subscribe@bugs.debian.org"
+
+# This handles bug reports on which I've had an effect via the control
+# bot.  The 'To:' condition is necessary, otherwise I'd occasionally
+# be subscribed to a massive number of bugs when Don reassigns from
+# debbugs to bugs.d.o, or Eric from mozilla-firefox to firefox, and
+# I'm already subscribed to those packages anyway..
+:0
+* ^To: Justin Pryzby <justinpryzby@users\.sourceforge\.net>$
+* ^From: owner@bugs\.debian\.org \(Debian Bug Tracking System\)$
+* ^Subject: Processed:
+|grep -Eo '^Bug#[0-9]+:' |sed -e 's/^Bug#//' -e 's/:$/-subscribe@bugs.debian.org/ ' |tr '\n' ',' |sed -e 's/^/To: /' -e 's/,$/\n/' |sendmail -t
+
+:0
+* ^From: [0-9]+-subhelp@bugs\.debian\.org$
+* ^Subject: Please confirm subscription to [0-9]+@bugs.debian.org
+* ^Reply-To: \/.*@bugs\.debian\.org$
+|echo |mail "$MATCH"
+
+:0
+* ^From: [0-9]+-subhelp@bugs\.debian\.org$
+* ^Subject: Subscription to [0-9]+@bugs.debian.org successful$
+Mail/bug_subscription_success
+
+# vim:ft=procmail:ts
diff --git a/examples/debian.procmail b/examples/debian.procmail
new file mode 100644 (file)
index 0000000..b700197
--- /dev/null
@@ -0,0 +1,100 @@
+#   debian.procmail - Debian mailing list sorting procmail file.
+#   Copyright (C) 1999  Edward Betts <edward@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/>.
+#
+# On Debian GNU/Linux systems, the complete text of the GNU General
+# Public License can be found in `/usr/share/common-licenses/GPL'.
+
+# Instructions
+
+# To use this file either copy it to ~/.procmailrc or use INCLUDERC to load it.
+# Read the procmail, procmailrc, procmailex and procmailsc for more
+# information.
+
+# Configuration
+
+# This files assumes that you are using standard mailbox file format to save
+# your mail. You may change the directories that these variables point to, but
+# the directories exist for this rcfile to function correctly.
+
+#MAILDIR=~/Mail                                # Uncomment if in needed
+DEBIAN=debian                          # Directory for debian mailing lists
+DC_INSTALLER=$DEBIAN/installer         # New Debian Packages directory
+DC_DIR=$DEBIAN/changes-other           # Directory for debian-changes
+DDC_DIR=$DEBIAN/devel-changes-other    # Directory for debian-devel-changes
+
+# These variables are used to control the sorting of the debian-changes and
+# debian-devel-changes list. It is likely that you will want to change them.
+
+ARCHS=alpha|arm|m68k|powerpc|sparc     # Archs that do not interest me
+PACKAGES=colortail|esh|vh|x2vnc|sniffit        # Packages on other archs of interest
+
+# The Debian changes and Debian development changes mailing lists are special
+# cases. Architectures that are not of any real interest, specified using the
+# $ARCHS variable are separated out into mailboxes named after the
+# architectures. They are stored in the directory specified by $DC_DIR for the
+# Debian changes mailing lists and $DDC_DIR for the Debian development changes
+# mailing lists.
+#
+# However the uploads and installs of some packages on all architectures may
+# be of interest. These pacakges can be specified using the $PACAKGES
+# variable. I use it for the packages I maintain so I can see when they have
+# been built on other architectures.
+#
+# Note: See the master.procmail script if you are short of bandwidth and do
+# not want these messages to even reach your machine. If master.procmail is in
+# use the recipes should never be true, unless the $PACKAGES and $ARCHS
+# variables are different on master than locally.
+
+:0
+* ^X-Mailing-List: <debian-changes@lists.debian.org>
+* $^Subject: Accepted .+ \(($ARCHS )*($ARCHS)\) to .+
+* !$^Subject: Accepted ($PACKAGES) .+
+* ^Subject: Accepted .+ \(\/[-a-zA-Z0-9]+
+$DC_DIR/$MATCH
+
+:0
+* ^X-Mailing-List: <debian-devel-changes@lists.debian.org>
+* $^Subject: Accepted .+ \(($ARCHS )*($ARCHS)\) to .+
+* !$^Subject: Accepted ($PACKAGES) .+
+* ^Subject: Accepted .+ \(\/[-a-zA-Z0-9]+
+$DDC_DIR/$MATCH
+
+# Sort debian mailing lists into mailboxes under $DEBIANDIR. This dynamic
+# style means when subscribing to new Debian mailing lists no changes need be
+# made to this file. Even as yet none existant mailing lists are catered for.
+
+:0:
+* ^X-Mailing-List: <debian-.+@lists.debian.org>
+* ^X-Mailing-List: <debian-\/[-a-zA-Z0-9]+
+$DEBIAN/$MATCH
+
+# There are a few Debian related mailing lists which do not appear on
+# lists.debian.org, those that I subscribe to are listed here. I suggest you
+# leave them, even if you do not currently subscibe to them.
+
+# Debian UK list
+:0:
+* ^Sender: debian-.+-admin@chiark.greenend.org.uk
+* ^Sender: debian-\/[a-zA-Z0-9]+
+$DEBIAN/$MATCH
+
+# Debian events-de list
+:0:
+* ^Sender: owner-debian-.+@Infodrom.North.DE
+* ^Sender: owner-debian-\/[-a-zA-Z0-9]+
+$DEBIAN/$MATCH
+
+# vim:ft=procmail:ts
diff --git a/examples/forward.exim b/examples/forward.exim
new file mode 100644 (file)
index 0000000..8c42c76
--- /dev/null
@@ -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/examples/forward.procmail b/examples/forward.procmail
new file mode 100644 (file)
index 0000000..086c27f
--- /dev/null
@@ -0,0 +1 @@
+|/usr/bin/procmail
diff --git a/examples/master.procmail b/examples/master.procmail
new file mode 100644 (file)
index 0000000..a5c3879
--- /dev/null
@@ -0,0 +1,90 @@
+#   master.procmail - Debian mailing list sorting procmail file.
+#   Copyright (C) 1999  Edward Betts <edward@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/>.
+#
+# On Debian GNU/Linux systems, the complete text of the GNU General
+# Public License can be found in `/usr/share/common-licenses/GPL'.
+
+# Introduction
+
+# This rcfile is aimed at developers with a small amount of bandwidth (people
+# using modems to connect to the Internet). The mailing lists
+# debian-devel-changes and debian-changes carry the details of package uploads
+# for all of the different architectures, however, most developers are using
+# one or at most two of these architectures, and are not interested in uploads
+# for the others.
+#
+# The recipes below will erase announcements of package uploads to
+# architectures that are not of much interest, before forwarding other
+# messages to the forward address. Uploads that include source will be
+# displayed, because I think they are interesting.
+
+# Instructions
+
+# 1. Subscribe to debian-devel-changes and/or debian-changes using your Debian
+#    e-mail address so that mail goes to your account on master.
+# 2. Change the enviroment variables below to specify the:
+#      a) e-mail address that you want mail to be forwarded to
+#      b) the architectures you are NOT interested in
+#      c) the packages you are interested in
+# 3. Upload the file to master. Rename it to ~/.procmailrc, or refer to it
+#    from ~/.procmailrc using INCLUDERC
+#
+# That should be it, configured, try sending a mail to your debian.org address
+# and see if it makes its way to the specified e-mail forwarding address.
+#
+# Read the procmail, procmailrc, procmailex and procmailsc for more
+# information.
+# Master mail filtering procmail file by Edward Betts <edward@debian.org>
+
+# Configuration
+
+# Forwarding address, the place to send all the mail that is not erased.
+# PLEASE CHANGE THIS! I DO NOT WANT YOUR MAIL! I could set up some stuff with
+# LOGNAME to check this, but it would reduce performance and I trust my fellow
+# developers.
+FORWARD=edward@hairnet.demon.co.uk
+
+# The architectures that do NOT interest you. If you are an i386 man like me,
+# then this setting should be fine, you will get i386 and hurd-i386 changes.
+# If a new architectures is introduced (MIPS? ia64?) you will see uploads
+# listed here until you add it to this line.
+ARCHS=alpha|arm|powerpc|sparc|m68k
+
+# Packages changes on other architectures of interest. This is basicly a list
+# of the binary packages that I maintain. As far as I see it most developers
+# will just want to change this to a list of packages that they maintain.
+PACKAGES=colortail|esh|vh|x2vnc|sniffit        # Packages on other archs of interest
+
+# Debian Development Changes mailing list is big. Archs that are not of
+# interest to me are deleted.
+#
+# The only exception is packages that I would like to see when they are
+# compiled on other Archs; I use this for my own binary packages.
+
+:0:
+* ^X-Mailing-List: <debian-devel-changes@lists.debian.org>
+* $^Subject: Accepted .+ \(($ARCHS )*($ARCHS)\) to .+
+* !$^Subject: Accepted ($PACKAGES) .+
+/dev/null
+
+# Every thing else goes to the forward address.
+
+:0
+* !^FROM_DAEMON
+* !^X-Loop: $FORWARD
+| formail -A"X-Loop: $FORWARD" | $SENDMAIL -oi $FORWARD
+
+# vim:ft=procmail
diff --git a/po4a/Makefile b/po4a/Makefile
new file mode 100644 (file)
index 0000000..27f79d6
--- /dev/null
@@ -0,0 +1,24 @@
+include ../Makefile.common
+GEN_TR_MAN1S := $(patsubst %.1,fr/%.fr.1,$(GEN_MAN1S))
+
+all: translate $(GEN_TR_MAN1S)
+
+translate:
+       $(MAKE) -C ../scripts/ devscripts.1
+       po4a --previous --no-backups devscripts-po4a.conf
+       touch translate
+clean:
+# The po4a cleanup fails if devscripts.1 has already been cleaned up
+       $(MAKE) -C ../scripts/ devscripts.1
+       po4a --previous --rm-translations --no-backups devscripts-po4a.conf
+       rm -f $(GEN_TR_MAN1S) translate ../scripts/devscripts.1
+
+fr/%.fr.1: fr/%.fr.pl translate
+       podchecker $<
+       pod2man --utf8 --center=" " --release="Utilitaires Debian" $< > $@
+fr/%.fr.1: fr/%.fr.dbk translate
+       xsltproc --nonet -o $@ \
+         /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl $<
+# xsltproc writes out to foo.1 even if you tell it to do otherwise, so we have
+# to rename the file after it's generated
+       mv fr/$*.1 $@
diff --git a/po4a/add_fr/translator_dbk.add b/po4a/add_fr/translator_dbk.add
new file mode 100644 (file)
index 0000000..f59812b
--- /dev/null
@@ -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 et
+      Thomas Huriaux.
+    </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 (file)
index 0000000..699deaf
--- /dev/null
@@ -0,0 +1,16 @@
+PO4A-HEADER:mode=after;position=^\.SH NOM;beginboundary=FakePo4aBoundary
+.SH TRADUCTION
+Ce document est une traduction, réalisée par Nicolas François,
+Guillaume Delacour, Cyril Brulebois et Thomas Huriaux.
+
+L'équipe de traduction a fait le maximum pour réaliser une adaptation
+française de qualité.
+
+La version anglaise la plus à jour de ce document est toujours consultable
+en ajoutant l'option «\ \-L\ C\ » à la commande \fBman\fR.
+
+N'hésitez pas à signaler à l'auteur ou à la liste de traduction
+.nh
+<\fIdebian\-l10\-french@lists.debian.org\fR>,
+.hy
+selon le cas, toute erreur dans cette page de manuel.
diff --git a/po4a/add_fr/translator_pod.add b/po4a/add_fr/translator_pod.add
new file mode 100644 (file)
index 0000000..bde9eae
--- /dev/null
@@ -0,0 +1,6 @@
+PO4A-HEADER:mode=after;position=^=head1 NOM;beginboundary=FakePo4aBoundary
+=head1 TRADUCTION
+
+Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>, 2006
+
+Thomas Huriaux <thomas.huriaux@gmail.com>, 2006
diff --git a/po4a/devscripts-po4a.conf b/po4a/devscripts-po4a.conf
new file mode 100644 (file)
index 0000000..eae9d1e
--- /dev/null
@@ -0,0 +1,124 @@
+# first explain where are the transaltors input files
+[po4a_paths] po/devscripts.pot \
+       fr:po/fr.po
+
+# Then 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 \
+       fr:fr/annotate-output.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/archpath.1 \
+       fr:fr/archpath.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/bts.pl \
+       fr:fr/bts.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/build-rdeps.pl \
+       fr:fr/build-rdeps.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/chdist.pl \
+       fr:fr/chdist.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/checkbashisms.1 \
+       fr:fr/checkbashisms.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/cowpoke.1 \
+       fr:fr/cowpoke.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/cvs-debc.1 \
+       fr:fr/cvs-debc.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/cvs-debi.1 \
+       fr:fr/cvs-debi.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/cvs-debrelease.1 \
+       fr:fr/cvs-debrelease.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/cvs-debuild.1 \
+       fr:fr/cvs-debuild.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/dcmd.1 \
+       fr:fr/dcmd.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/dcontrol.pl \
+       fr:fr/dcontrol.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/dd-list.1 \
+       fr:fr/dd-list.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debc.1 \
+       fr:fr/debc.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debchange.1 \
+       fr:fr/debchange.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/debcheckout.pl \
+       fr:fr/debcheckout.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/debclean.1 \
+       fr:fr/debclean.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/debcommit.pl \
+       fr:fr/debcommit.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/debdiff.1 \
+       fr:fr/debdiff.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debi.1 \
+       fr:fr/debi.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debpkg.1 \
+       fr:fr/debpkg.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debrelease.1 \
+       fr:fr/debrelease.fr.1 add_fr:add_fr/translator_man.add
+[type:docbook] ../scripts/deb-reversion.dbk \
+       fr:fr/deb-reversion.fr.dbk add_fr:add_fr/translator_dbk.add
+[type:man] ../scripts/debrsign.1 \
+       fr:fr/debrsign.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debsign.1 \
+       fr:fr/debsign.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debsnap.1 \
+       fr:fr/debsnap.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/debuild.1 \
+       fr:fr/debuild.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/desktop2menu.pl \
+       fr:fr/desktop2menu.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/devscripts.1 \
+       fr:fr/devscripts.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/dget.pl \
+       fr:fr/dget.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/diff2patches.1 \
+       fr:fr/diff2patches.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/dpkg-depcheck.1 \
+       fr:fr/dpkg-depcheck.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/dpkg-genbuilddeps.1 \
+       fr:fr/dpkg-genbuilddeps.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/dscverify.1 \
+       fr:fr/dscverify.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/getbuildlog.1 \
+       fr:fr/getbuildlog.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/grep-excuses.1 \
+       fr:fr/grep-excuses.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/licensecheck.pl \
+       fr:fr/licensecheck.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/list-unreleased.1 \
+       fr:fr/list-unreleased.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/manpage-alert.1 \
+       fr:fr/manpage-alert.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/mass-bug.pl \
+       fr:fr/mass-bug.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/mergechanges.1 \
+       fr:fr/mergechanges.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/mk-build-deps.pl \
+       fr:fr/mk-build-deps.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/namecheck.pl \
+       fr:fr/namecheck.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/nmudiff.1 \
+       fr:fr/nmudiff.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/plotchangelog.1 \
+       fr:fr/plotchangelog.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/pts-subscribe.1 \
+       fr:fr/pts-subscribe.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/rc-alert.1 \
+       fr:fr/rc-alert.fr.1 add_fr:add_fr/translator_man.add
+[type:pod] ../scripts/rmadison.pl \
+       fr:fr/rmadison.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/svnpath.pl \
+       fr:fr/svnpath.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/tagpending.pl \
+       fr:fr/tagpending.fr.pl add_fr:add_fr/translator_pod.add
+[type:pod] ../scripts/transition-check.pl \
+       fr:fr/transition-check.fr.pl add_fr:add_fr/translator_pod.add
+[type:man] ../scripts/uscan.1 \
+       fr:fr/uscan.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/uupdate.1 \
+       fr:fr/uupdate.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/whodepends.1 \
+       fr:fr/whodepends.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/who-uploads.1 \
+       fr:fr/who-uploads.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/wnpp-alert.1 \
+       fr:fr/wnpp-alert.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/wnpp-check.1 \
+       fr:fr/wnpp-check.fr.1 add_fr:add_fr/translator_man.add
+[type:man] ../scripts/devscripts.conf.5 \
+       fr:fr/devscripts.conf.fr.5 add_fr:add_fr/translator_man.add
diff --git a/po4a/fr/translator_man.add b/po4a/fr/translator_man.add
new file mode 100644 (file)
index 0000000..6cd07f4
--- /dev/null
@@ -0,0 +1,16 @@
+PO4A-HEADER:mode=after;position=^\.SH NOM;beginboundary=FakePo4aBoundary
+.SH TRADUCTION
+Ce document est une traduction, réalisée par Nicolas FRANÇOIS et
+Guillaume DELACOUR.
+
+L'équipe de traduction a fait le maximum pour réaliser une adaptation
+française de qualité.
+
+La version anglaise la plus à jour de ce document est toujours consultable
+en ajoutant l'option «\ \-L\ C\ » à la commande \fBman\fR.
+
+N'hésitez pas à signaler à l'auteur ou à la liste de traduction
+.nh
+<\fIdebian\-l10\-french@lists.debian.org\fR>,
+.hy
+selon le cas, toute erreur dans cette page de manuel.
diff --git a/po4a/po/devscripts.pot b/po4a/po/devscripts.pot
new file mode 100644 (file)
index 0000000..8d85f30
--- /dev/null
@@ -0,0 +1,14513 @@
+# 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: 2010-09-28 22:34+0000\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/debi.1:1 ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1 ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/devscripts.1:1 ../scripts/dpkg-genbuilddeps.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 ../scripts/uscan.1:1 ../scripts/uupdate.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1 ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1 ../scripts/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/debi.1:1 ../scripts/debpkg.1:1 ../scripts/debrelease.1:1 ../scripts/debrsign.1:1 ../scripts/debsign.1:1 ../scripts/debuild.1:1 ../scripts/devscripts.1:1 ../scripts/dpkg-depcheck.1:1 ../scripts/dpkg-genbuilddeps.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 ../scripts/uscan.1:1 ../scripts/uupdate.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1 ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1 ../scripts/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:27 ../scripts/build-rdeps.pl:18 ../scripts/chdist.pl:19 ../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/dcontrol.pl:199 ../scripts/dd-list.1:19 ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:23 ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2 ../scripts/debi.1:2 ../scripts/debpkg.1:2 ../scripts/debrelease.1:2 ../scripts/debrsign.1:2 ../scripts/debsign.1:2 ../scripts/debsnap.1:3 ../scripts/debuild.1:2 ../scripts/desktop2menu.pl:24 ../scripts/devscripts.1:2 ../scripts/dget.pl:479 ../scripts/diff2patches.1:2 ../scripts/dpkg-depcheck.1:2 ../scripts/dpkg-genbuilddeps.1:2 ../scripts/dscverify.1:2 ../scripts/getbuildlog.1:2 ../scripts/grep-excuses.1:2 ../scripts/licensecheck.pl:22 ../scripts/list-unreleased.1:2 ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:22 ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24 ../scripts/namecheck.pl:3 ../scripts/nmudiff.1:2 ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2 ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:181 ../scripts/svnpath.pl:3 ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23 ../scripts/uscan.1:2 ../scripts/uupdate.1:2 ../scripts/whodepends.1:2 ../scripts/who-uploads.1:2 ../scripts/wnpp-alert.1:2 ../scripts/wnpp-check.1:2 ../scripts/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:151 ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:23 ../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/dcontrol.pl:203 ../scripts/dd-list.1:22 ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:27 ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4 ../scripts/debi.1:4 ../scripts/debpkg.1:4 ../scripts/debrelease.1:4 ../scripts/debrsign.1:4 ../scripts/debsign.1:4 ../scripts/debsnap.1:6 ../scripts/debuild.1:4 ../scripts/desktop2menu.pl:28 ../scripts/dget.pl:483 ../scripts/dpkg-depcheck.1:4 ../scripts/dpkg-genbuilddeps.1:4 ../scripts/dscverify.1:4 ../scripts/getbuildlog.1:4 ../scripts/grep-excuses.1:4 ../scripts/licensecheck.pl:26 ../scripts/list-unreleased.1:4 ../scripts/manpage-alert.1:4 ../scripts/mass-bug.pl:26 ../scripts/mergechanges.1:4 ../scripts/mk-build-deps.pl:28 ../scripts/nmudiff.1:4 ../scripts/plotchangelog.1:4 ../scripts/pts-subscribe.1:4 ../scripts/rc-alert.1:4 ../scripts/rmadison.pl:185 ../scripts/svnpath.pl:7 ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27 ../scripts/uscan.1:4 ../scripts/uupdate.1:4 ../scripts/whodepends.1:4 ../scripts/who-uploads.1:4 ../scripts/wnpp-alert.1:4 ../scripts/wnpp-check.1:4
+#, 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:155 ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:27 ../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:7 ../scripts/dcontrol.pl:211 ../scripts/dd-list.1:26 ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:39 ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15 ../scripts/debi.1:6 ../scripts/debpkg.1:6 ../scripts/debrelease.1:6 ../scripts/deb-reversion.dbk:82 ../scripts/debrsign.1:7 ../scripts/debsign.1:6 ../scripts/debsnap.1:14 ../scripts/debuild.1:10 ../scripts/desktop2menu.pl:34 ../scripts/devscripts.1:4 ../scripts/dget.pl:493 ../scripts/diff2patches.1:10 ../scripts/dpkg-depcheck.1:6 ../scripts/dpkg-genbuilddeps.1:6 ../scripts/dscverify.1:6 ../scripts/getbuildlog.1:8 ../scripts/grep-excuses.1:6 ../scripts/licensecheck.pl:34 ../scripts/list-unreleased.1:6 ../scripts/manpage-alert.1:8 ../scripts/mass-bug.pl:30 ../scripts/mergechanges.1:6 ../scripts/mk-build-deps.pl:34 ../scripts/nmudiff.1:6 ../scripts/plotchangelog.1:7 ../scripts/pts-subscribe.1:8 ../scripts/rc-alert.1:8 ../scripts/rmadison.pl:193 ../scripts/svnpath.pl:17 ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33 ../scripts/uscan.1:6 ../scripts/uupdate.1:8 ../scripts/whodepends.1:6 ../scripts/who-uploads.1:6 ../scripts/wnpp-alert.1:8 ../scripts/wnpp-check.1:8 ../scripts/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:206 ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:34 ../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:16 ../scripts/dcontrol.pl:245 ../scripts/dd-list.1:58 ../scripts/debc.1:64 ../scripts/debchange.1:146 ../scripts/debcheckout.pl:67 ../scripts/debclean.1:60 ../scripts/debcommit.pl:19 ../scripts/debdiff.1:50 ../scripts/debi.1:65 ../scripts/debrelease.1:56 ../scripts/deb-reversion.dbk:128 ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26 ../scripts/debuild.1:219 ../scripts/dget.pl:532 ../scripts/diff2patches.1:16 ../scripts/dpkg-depcheck.1:15 ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24 ../scripts/grep-excuses.1:13 ../scripts/licensecheck.pl:43 ../scripts/list-unreleased.1:12 ../scripts/manpage-alert.1:14 ../scripts/mass-bug.pl:60 ../scripts/mk-build-deps.pl:44 ../scripts/nmudiff.1:21 ../scripts/plotchangelog.1:43 ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17 ../scripts/rmadison.pl:202 ../scripts/tagpending.pl:94 ../scripts/transition-check.pl:42 ../scripts/uscan.1:333 ../scripts/uupdate.1:52 ../scripts/whodepends.1:10 ../scripts/who-uploads.1:15 ../scripts/wnpp-alert.1:17 ../scripts/wnpp-check.1:16
+#, 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: =item
+#: ../scripts/annotate-output.1:16 ../scripts/dcontrol.pl:257 ../scripts/debcheckout.pl:92 ../scripts/debsnap.1:47 ../scripts/dget.pl:585 ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25 ../scripts/mk-build-deps.pl:79 ../scripts/rmadison.pl:226
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:359 ../scripts/debclean.1:87 ../scripts/debrelease.1:102 ../scripts/debsign.1:108 ../scripts/dscverify.1:39 ../scripts/nmudiff.1:76 ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:85 ../scripts/who-uploads.1:47
+msgid "Display a help message and exit successfully."
+msgstr ""
+
+#. type: SH
+#: ../scripts/annotate-output.1:20 ../scripts/uscan.1:318
+#, 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:109 ../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:4070 ../scripts/checkbashisms.1:60 ../scripts/cowpoke.1:241 ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62 ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53 ../scripts/dcmd.1:98 ../scripts/dcontrol.pl:290 ../scripts/debc.1:115 ../scripts/debchange.1:435 ../scripts/debcheckout.pl:181 ../scripts/debclean.1:107 ../scripts/debcommit.pl:845 ../scripts/debdiff.1:215 ../scripts/debi.1:122 ../scripts/debrelease.1:132 ../scripts/deb-reversion.dbk:247 ../scripts/debrsign.1:66 ../scripts/debsign.1:140 ../scripts/debsnap.1:91 ../scripts/debuild.1:410 ../scripts/dget.pl:639 ../scripts/diff2patches.1:45 ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30 ../scripts/dscverify.1:73 ../scripts/grep-excuses.1:38 ../scripts/list-unreleased.1:19 ../scripts/nmudiff.1:108 ../scripts/plotchangelog.1:124 ../scripts/pts-subscribe.1:51 ../scripts/rc-alert.1:121 ../scripts/rmadison.pl:302 ../scripts/tagpending.pl:149 ../scripts/uscan.1:535 ../scripts/uupdate.1:170 ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:23 ../scripts/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:347 ../scripts/checkbashisms.1:62 ../scripts/cowpoke.1:247 ../scripts/cvs-debc.1:64 ../scripts/cvs-debi.1:68 ../scripts/cvs-debrelease.1:69 ../scripts/cvs-debuild.1:59 ../scripts/dcmd.1:101 ../scripts/dcontrol.pl:283 ../scripts/dd-list.1:93 ../scripts/debc.1:120 ../scripts/debchange.1:442 ../scripts/debcheckout.pl:186 ../scripts/debclean.1:111 ../scripts/debcommit.pl:841 ../scripts/debdiff.1:222 ../scripts/debi.1:126 ../scripts/debpkg.1:23 ../scripts/debrelease.1:137 ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:71 ../scripts/debsign.1:153 ../scripts/debuild.1:423 ../scripts/desktop2menu.pl:52 ../scripts/dget.pl:631 ../scripts/diff2patches.1:48 ../scripts/dpkg-genbuilddeps.1:36 ../scripts/dscverify.1:78 ../scripts/getbuildlog.1:41 ../scripts/grep-excuses.1:40 ../scripts/licensecheck.pl:121 ../scripts/list-unreleased.1:21 ../scripts/manpage-alert.1:20 ../scripts/mass-bug.pl:521 ../scripts/mergechanges.1:18 ../scripts/mk-build-deps.pl:89 ../scripts/namecheck.pl:30 ../scripts/nmudiff.1:113 ../scripts/plotchangelog.1:126 ../scripts/pts-subscribe.1:56 ../scripts/rc-alert.1:125 ../scripts/rmadison.pl:306 ../scripts/svnpath.pl:97 ../scripts/transition-check.pl:81 ../scripts/uscan.1:541 ../scripts/uupdate.1:177 ../scripts/whodepends.1:19 ../scripts/who-uploads.1:71 ../scripts/wnpp-alert.1:31 ../scripts/wnpp-check.1:33 ../scripts/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>--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:29
+msgid "bts - developers' command line interface to the BTS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:153
+msgid ""
+"B<bts> [options] command [args] [#comment] [.|, command [args] [#comment]] "
+"..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:157
+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:165
+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:169
+#, 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:173
+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:179
+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:183
+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:191
+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. For example (quoting where "
+"necessary so that B<bts> sees the comment):"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:196
+#, no-wrap
+msgid ""
+" % bts severity 95672 normal , merge 95672 95673 \\#they are the same!\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:198
+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:201
+#, no-wrap
+msgid ""
+" % bts severity 95672 wishlist , retitle it \"bts: please add a --foo "
+"option\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:203
+msgid ""
+"Please use this program responsibly, and do take our users into "
+"consideration."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:208
+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:214
+msgid "-o, --offline"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:216
+msgid ""
+"Make bts use cached bugs for the 'show' and 'bugs' commands, if a cache is "
+"available for the requested data. See the cache command, below for "
+"information on setting up a cache."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:220
+msgid "--online, --no-offline"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:222
+msgid ""
+"Opposite of --offline; overrides any configuration file directive to work "
+"offline."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:225
+msgid "-n, --no-action"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:227
+msgid "Do not send emails but print them to standard output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:229
+msgid "--cache, --no-cache"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing "
+"show/bugs commands? Default is to cache."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:234
+msgid "--cache-mode={min|mbox|full}"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:236
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(min), or should we also mirror the mbox version (mbox), or should we mirror "
+"the whole thing, including the mbox and the boring attachments to the BTS "
+"bug pages and the acknowledgement emails (full)? Default is min."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:242
+msgid "--cache-delay=seconds"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+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:247
+msgid "--mbox"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"show and bugs commands."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:252
+msgid "--mailreader=READER"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:254
+msgid ""
+"Specify the command to read the mbox.  Must contain a \"%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 'mutt -f %s'.  (Also, %% will be substituted by a single % if "
+"this is needed.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:260
+msgid "--cc-addr=CC_EMAIL_ADDRESS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:262
+msgid ""
+"Send carbon copies to a list of users. CC_EMAIL_ADDRESS should be a "
+"comma-separated list of emails."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:265
+msgid "--use-default-cc"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:267
+msgid ""
+"Add the addresses specified in the configuation file option BTS_DEFAULT_CC "
+"to the list specified using --cc-addr.  This is the default."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:271
+msgid "--no-use-default-cc"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:273
+msgid "Do not add addresses specified in BTS_DEFAULT_CC to the carbon copy list."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:276 ../scripts/mass-bug.pl:104
+msgid "--sendmail=SENDMAILCMD"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:278
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will not be passed to a shell.  Default is '/usr/sbin/sendmail'.  The -t "
+"option will be automatically added if the command is /usr/sbin/sendmail or "
+"/usr/sbin/exim*.  For other mailers, if they require a -t option, this must "
+"be included in the SENDMAILCMD, for example: --sendmail=\"/usr/sbin/mymailer "
+"-t\""
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:285
+msgid "--mutt"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:287
+msgid ""
+"Use mutt for sending of mails. Default is not to use mutt, except for some "
+"commands."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:290
+msgid ""
+"Note that one of $DEBEMAIL or $EMAIL must be set in the environment in order "
+"to use mutt to send emails."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "--no-mutt"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid "Don't use mutt for sending of mails."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:297
+msgid "--smtp-host=SMTPHOST"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:299
+msgid ""
+"Specify an SMTP host.  If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a sendmail command."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:302
+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:306
+msgid ""
+"Note that one of $DEBEMAIL or $EMAIL must be set in the environment in order "
+"to use direct SMTP connections to send emails."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:309
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in "
+"--cc-addr or 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:313
+msgid ""
+"Note also that the use of the reassign command may, when either interactive "
+"or force-interactive mode is enabled, lead to the automatic addition of a Cc "
+"to $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:320
+msgid "--smtp-username=USERNAME, --smtp-password=PASSWORD"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:322
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by --smtp-host.  If the server does not require authentication then these "
+"options should not be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:326
+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:329
+msgid "--smtp-helo=HELO"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Specify the name to use in the 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:335
+msgid ""
+"Note that some SMTP servers may reject the use of a HELO which either does "
+"not resolve or does not appear to belong to the host using it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:338
+msgid "--bts-server"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid "Use a debbugs server other than bugs.debian.org."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "-f, --force-refresh"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last cache command.  Useful if a --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:350
+msgid "--no-force-refresh"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:352
+msgid "Suppress any configuration file --force-refresh option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:354
+msgid "--only-new"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:356
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:359
+msgid "--include-resolved"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+msgid ""
+"When caching bug reports, include those that are marked as resolved.  This "
+"is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:364
+msgid "--no-include-resolved"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:366
+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:369
+msgid "--no-ack"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:371
+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:375
+msgid "--ack"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:377
+msgid "Do not suppress acknowledgement mails.  This is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:379 ../scripts/tagpending.pl:136
+msgid "-i, --interactive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:381
+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:384
+msgid "--force-interactive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:386
+msgid ""
+"Similar to --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:389
+msgid "--no-interactive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:391
+msgid "Send control e-mails without confirmation.  This is the default behaviour."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:393
+msgid "-q, --quiet"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:395
+msgid ""
+"When running 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: =item
+#: ../scripts/bts.pl:399 ../scripts/mass-bug.pl:113
+msgid "--no-conf, --noconf"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/bts.pl:401 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:89 ../scripts/debchange.1:351 ../scripts/debclean.1:81 ../scripts/debdiff.1:155 ../scripts/debi.1:96 ../scripts/debrelease.1:99 ../scripts/debsign.1:105 ../scripts/debuild.1:225 ../scripts/dpkg-depcheck.1:96 ../scripts/dscverify.1:28 ../scripts/grep-excuses.1:18 ../scripts/mass-bug.pl:115 ../scripts/nmudiff.1:73 ../scripts/uscan.1:442 ../scripts/uupdate.1:82 ../scripts/who-uploads.1:44
+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:755 ../scripts/chdist.pl:56
+msgid "COMMANDS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:757
+msgid ""
+"For full details about the commands, see the BTS documentation.  "
+"L<http://www.debian.org/Bugs/server-control>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:762
+msgid "show [options] [<bug number> | <package> | <maintainer> | : ] [opt=val ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:764
+msgid "show [options] [src:<package> | from:<submitter>] [opt=val ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:766
+msgid "show [options] [tag:<tag> | usertag:<tag> ] [opt=val ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:768
+msgid "show [release-critical | release-critical/... | RC]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:770
+msgid "This is a synonym for bts bugs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:778
+msgid "bugs [options] [<bug number> | <package> | <maintainer> | : ] [opt=val ..]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:780
+msgid "bugs [options] [src:<package> | from:<submitter>] [opt=val ..]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:782
+msgid "bugs [options] [tag:<tag> | usertag:<tag> ] [opt=val ..]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:784
+msgid "bugs [release-critical | release-critical/... | RC]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:786
+msgid ""
+"Display the page listing the requested bugs in a web browser using "
+"sensible-browser(1)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:789
+msgid ""
+"Options may be specified after the \"bugs\" command in addition to or "
+"instead of options at the start of the command line: recognised options at "
+"this point are: -o/--offline/--online, --mbox, --mailreader and "
+"--[no-]cache.  These are described earlier in this manpage.  If either the "
+"-o or --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:796
+msgid "The meanings of the possible arguments are as follows:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:800
+msgid "(none)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:802
+msgid ""
+"If nothing is specified, bts bugs will display your bugs, assuming that "
+"either DEBEMAIL or EMAIL (examined in that order) is set to the appropriate "
+"email address."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:806
+msgid "<bug number>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:808
+msgid "Display bug number <bug number>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:810
+msgid "<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:812
+msgid "Display the bugs for the package <package>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:814
+msgid "src:<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:816
+msgid "Display the bugs for the source package <package>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:818
+msgid "<maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:820
+msgid "Display the bugs for the maintainer email address <maintainer>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid "from:<submitter>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:824
+msgid "Display the bugs for the submitter email address <submitter>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "tag:<tag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "Display the bugs which are tagged with <tag>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:830
+msgid "usertag:<tag>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:832
+msgid ""
+"Display the bugs which are tagged with usertag <tag>.  See the BTS "
+"documentation for more information on usertags.  This will require the use "
+"of a users=<email> option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ":"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:838
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on "
+"http://bugs.debian.org/.  This page itself will be opened if the command "
+"'bts bugs :' is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:843
+msgid "release-critical, RC"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:845
+msgid ""
+"Display the front page of the release-critical pages on the BTS.  This is a "
+"synonym for http://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:852
+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:859
+msgid ""
+"If caching has been enabled (that is, --no-cache has not been used, and "
+"BTS_CACHE has not been set to \"no\"), then any page requested by \"bts "
+"show\" will automatically be cached, and be available offline thereafter.  "
+"Pages which are automatically cached in this way will be deleted on "
+"subsequent \"bts show|bugs|cache\" invocations if they have not been "
+"accessed in 30 days.  Warning: on a filesystem mounted with the \"noatime\" "
+"option, running \"bts show|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:870
+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:873
+msgid ""
+"The desired browser can be specified and configured by setting the 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:878
+msgid ""
+"The value of 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 \"%s\"; if it does, the URL "
+"to be viewed is substituted there. If a command part does not contain %s, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string %% must be substituted as a single %."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+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 .profile across multiple "
+"systems. We need %s because some popular browsers have remote-invocation "
+"syntax that requires it. Unless %% reduces to %, it won't be possible to "
+"have a literal %s in the string."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:894
+msgid "For example, on most Linux systems a good thing to do would be:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:896
+msgid "BROWSER='mozilla -raise -remote \"openURL(%s,new-window)\":links'"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:971
+msgid "select [key:value ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:973
+msgid ""
+"Uses the SOAP interface to output a list of bugs which match the given "
+"selection requirements."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:976
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:980 ../scripts/bts.pl:1839
+msgid "package"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:982 ../scripts/bts.pl:1841
+msgid "Binary package name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:984 ../scripts/bts.pl:1843
+msgid "source"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:986 ../scripts/bts.pl:1845
+msgid "Source package name."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:988
+msgid "maintainer"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:990
+msgid "E-mail address of the maintainer."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:992 ../scripts/bts.pl:1823
+msgid "submitter"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:994 ../scripts/bts.pl:1825
+msgid "E-mail address of the submitter."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:996 ../scripts/bts.pl:1851
+msgid "severity"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:998 ../scripts/bts.pl:1853
+msgid "Bug severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1000
+msgid "status"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1002
+msgid "Status of the bug.  One of \"open\", \"done\", or \"forwarded\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1004 ../scripts/bts.pl:1847
+msgid "tag"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1006
+msgid ""
+"Tags applied to the bug. If I<users> is specified, may include usertags in "
+"addition to the standard tags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1009 ../scripts/bts.pl:1855
+msgid "owner"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1011 ../scripts/bts.pl:1857
+msgid "Bug's owner."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1013
+msgid "correspondent"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1015
+msgid "Address of someone who sent mail to the log."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1017 ../scripts/bts.pl:1859
+msgid "affects"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1019
+msgid "Bugs which affect this package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1021
+msgid "bugs"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1023
+msgid "List of bugs to search within."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1025
+msgid "users"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1027
+msgid "Users to use when looking up usertags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1029 ../scripts/bts.pl:1863
+msgid "archive"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1031 ../scripts/bts.pl:1865
+msgid ""
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1037
+msgid ""
+"For example, to select the set of bugs submitted by "
+"jrandomdeveloper@example.com and tagged wontfix, one would use"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1040
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1877
+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:1045
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1047
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "status [<bug> | file:<file> | fields:<field,field,...> | verbose] ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use '-' to indicate STDIN)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1065
+msgid "By default, all populated fields for a bug are displayed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1067
+msgid "If B<verbose> is given, empty fields will also be displayed."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1069
+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:1146
+msgid "clone <bug> <new ID> [<new ID> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1148
+msgid ""
+"The clone control command allows you to duplicate a 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:1198
+msgid "done <bug> <version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1200
+msgid ""
+"Mark a bug as Done. This forces interactive mode since done messages should "
+"include an explanation why the bug is being closed.  You should specify "
+"which version of the package closed the bug, if possible."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1218
+msgid "reopen <bug> [<submitter>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1220
+msgid "Reopen a bug, with optional submitter."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1231
+msgid "archive <bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1233
+msgid ""
+"Archive a bug that has previously been archived but is currently not.  The "
+"bug must fulfil all of the requirements for archiving with the exception of "
+"those that are time-based."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1245
+msgid "unarchive <bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1247
+msgid "Unarchive a bug that is currently archived."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1257
+msgid "retitle <bug> <title>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1259
+msgid "Change the title of the bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1272
+msgid "summary <bug> <messagenum>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1274
+msgid "Select a message number that should be used as the summary of a bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1288
+msgid "submitter <bug> [<bug> ...] <submitter-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1290
+msgid ""
+"Change the submitter address of a bug or a number of bugs, with `!' meaning "
+"`use the address on the current email as the new submitter address'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1307
+msgid "reassign <bug> [<bug> ...] <package> [<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1309
+msgid ""
+"Reassign a bug or a number of bugs to a different package.  The version "
+"field is optional; see the explanation at "
+"L<http://www.debian.org/Bugs/server-control>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1339
+msgid "found <bug> [<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1341
+msgid "Indicate that a bug was found to exist in a particular package version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1356
+msgid "notfound <bug> <version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1358
+msgid ""
+"Remove the record that bug was encountered in the given version of the "
+"package to which it is assigned."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1370
+msgid "fixed <bug> <version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1372
+msgid ""
+"Indicate that a bug was fixed in a particular package version, without "
+"affecting the bug's open/closed status."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1384
+msgid "notfixed <bug> <version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1386
+msgid ""
+"Remove the record that a bug was fixed in the given version of the package "
+"to which it is assigned."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1389
+msgid ""
+"This is equivalent to the sequence of commands \"found <bug> <version>\", "
+"\"notfound <bug> <version>\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1401
+msgid "block <bug> by|with <bug> [<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1403
+msgid "Note that a bug is blocked from being fixed by a set of other bugs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1422
+msgid "unblock <bug> by|with <bug> [<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1424
+msgid ""
+"Note that a bug is no longer blocked from being fixed by a set of other "
+"bugs."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1443
+msgid "merge <bug> <bug> [<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1445
+msgid "Merge a set of bugs together."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1460
+msgid "forcemerge <bug> <bug> [<bug> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1462
+msgid ""
+"Forcibly merge a set of bugs together. The first bug listed is the master "
+"bug, and its settings (those which must be equal in a normal merge) are "
+"assigned to the bugs listed next."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1480
+msgid "unmerge <bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1482
+msgid "Unmerge a bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1492
+msgid "tag <bug> [+|-|=] tag [tag ..]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1494
+msgid "tags <bug> [+|-|=] tag [tag ..]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1496
+msgid ""
+"Set or unset a tag on a bug. The tag may either be the exact tag name or it "
+"may be abbreviated to any unique tag substring. (So using \"fixed\" will set "
+"the tag \"fixed\", not \"fixed-upstream\", for example, but \"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 "
+"'=' flag is used, where the command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:1503
+#, no-wrap
+msgid ""
+"  bts tags <bug> =\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1505
+msgid "will remove all tags from the specified bug."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1507
+msgid ""
+"As a special case, the unofficial \"gift\" tag name is supported in addition "
+"to official tag names. \"gift\" is used as a shorthand for the gift usertag; "
+"see L<http://wiki.debian.org/qa.debian.org/GiftTag>.  Adding/removing the "
+"gift tag will add/remove the gift usertag, belonging to the "
+"\"debian-qa@lists.debian.org\" user."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1583
+msgid "affects <bug> [+|-|=] <package> [<package> ..]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1585
+msgid ""
+"Indicates that a bug affects a package other than that against which it is "
+"filed, causing the bug to be listed by default in the package list of the "
+"other package.  This should generally be used where the bug is severe enough "
+"to cause multiple reports from users to be assigned to the wrong package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1621
+msgid "user <email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1623
+msgid "Specify a user email address before using the usertags command."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1639
+msgid "usertag <bug> [+|-|=] tag [tag ..]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1641
+msgid "usertags <bug> [+|-|=] tag [tag ..]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1643
+msgid ""
+"Set or unset a user tag on a bug. The 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 (usertag and usertags) are identical.  "
+"At least one tag must be specified, unless the '=' flag is used, where the "
+"command"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:1649
+#, no-wrap
+msgid ""
+"  bts usertags <bug> =\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1651
+msgid "will remove all user tags from the specified bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1706
+msgid "claim <bug> [<claim>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1708
+msgid ""
+"Record that you have claimed a bug (e.g. for a bug squashing party).  "
+"<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:1712 ../scripts/bts.pl:1732
+msgid ""
+"If no claim is specified, the environment variable DEBEMAIL or EMAIL "
+"(checked in that order) is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1728
+msgid "unclaim <bug> [<claim>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1730
+msgid "Remove the record that you have claimed a bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1748
+msgid "severity <bug> <severity>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1750
+msgid ""
+"Change the severity of a bug. Available severities are: wishlist, minor, "
+"normal, important, serious, grave, critical. The severity may be abbreviated "
+"to any unique substring."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1767
+msgid "forwarded <bug> <address>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1769
+msgid ""
+"Mark the bug as forwarded to the given address (usually an email address or "
+"a URL for an upstream bug tracker)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1786
+msgid "notforwarded <bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1788
+msgid "Mark a bug as not forwarded."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "package [<package> ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid ""
+"The following commands will only apply to bugs against the listed packages; "
+"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:1814
+msgid "limit [<key>[:<value>] ...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1816
+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 C<value>s are "
+"listed, the limits for that C<key> are turned off again.  If no C<key>s are "
+"specified, all limits are reset."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1827
+msgid "date"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1829
+msgid "Date the bug was submitted."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1831
+msgid "subject"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1833
+msgid "Subject of the bug."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1835
+msgid "msgid"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1837
+msgid "Message-id of the initial bug report."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1849
+msgid "Tags applied to the bug."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1861
+msgid "Bugs affecting this package."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1871
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"wontfix, one would use"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1875
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1880
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1882
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either wishlist or minor severity."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1957
+msgid "owner <bug> <owner-email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1959
+msgid ""
+"Change the \"owner\" address of a bug, with `!' meaning `use the address on "
+"the current email as the new owner address'."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1962
+msgid ""
+"The owner of a bug accepts responsibility for dealing with it. Note that the "
+"\"owner\" of a bug does not automatically receive all of the email "
+"corresponding to it; use \"subscribe\" to achieve that."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1975
+msgid "noowner <bug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1977
+msgid "Mark a bug as having no \"owner\"."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:1987
+msgid "subscribe <bug> <email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1989
+msgid ""
+"Subscribe the given email address to the specified bug report.  If no email "
+"address is specified, the environment variable DEBEMAIL or EMAIL (in that "
+"order) is used.  If those are not set, or `!' is given as email address, "
+"your default address will be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:1994
+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:2014
+msgid "unsubscribe <bug> <email>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2016
+msgid ""
+"Unsubscribe the given email address from the specified bug report.  As with "
+"subscribe above, if no email address is specified, the environment variables "
+"DEBEMAIL or EMAIL (in that order) is used.  If those are not set, or `!' is "
+"given as email address, your default address will be used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2021
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the subscribe command to, well, "
+"subscribe."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2040
+msgid "reportspam <bug> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2042
+msgid ""
+"The reportspam command allows you to report a 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:2078
+msgid "spamreport <bug> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2080
+msgid "spamreport is a synonym for reportspam."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2088
+msgid "cache [options] [<maint email> | <pkg> | src:<pkg> | from:<submitter>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2090
+msgid "cache [options] [release-critical | release-critical/... | RC]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2092
+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 DEBEMAIL environment variable (or the EMAIL environment variable if "
+"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 ~/.devscripts_cache/bts/"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2101
+msgid "You can use the cached bugs with the -o switch. For example:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/bts.pl:2103
+#, no-wrap
+msgid ""
+"  bts -o bugs\n"
+"  bts -o show 12345\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2106
+msgid ""
+"Also, bts will update the files in it in a piecemeal fashion as it downloads "
+"information from the BTS using the '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:2112
+msgid ""
+"Some options affect the behaviour of the cache command.  The first is the "
+"setting of --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: min (the minimum), mbox (download "
+"the minimum plus the mbox version of the bug report) or full (the whole "
+"works).  The second is --force-refresh or -f, which forces the download, "
+"even if the cached bug report is up-to-date.  The --include-resolved option "
+"indicates whether bug reports marked as resolved should be downloaded during "
+"caching."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2123
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below.  They may also be specified after the \"cache\" command as well as at "
+"the start of the command line."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2127
+msgid ""
+"Finally, -q or --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:2131
+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:2260
+msgid "cleancache <package> | src:<package> | <maintainer>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2262
+msgid "cleancache from:<submitter> | tag:<tag> | usertag:<tag> | <number> | ALL"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2264
+msgid ""
+"Clean the cache for the specified package, maintainer, etc., as described "
+"above for the \"bugs\" command, or clean the entire cache if \"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 DEBEMAIL or EMAIL."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2313
+msgid "version"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2315
+msgid "Display version and copyright information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:2330
+msgid "help"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:2332
+msgid ""
+"Display a short summary of commands, suspiciously similar to parts of this "
+"man page."
+msgstr ""
+
+#. type: SH
+#: ../scripts/bts.pl:3944 ../scripts/debuild.1:86 ../scripts/diff2patches.1:40 ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr ""
+
+#. type: IX
+#: ../scripts/bts.pl:3948 ../scripts/devscripts.1:22
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3950
+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: IX
+#: ../scripts/bts.pl:3954 ../scripts/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3956
+msgid ""
+"If DEBEMAIL is set, DEBFULLNAME is examined to determine the full name to "
+"use; if this is not set, B<bts> attempts to determine a name from your "
+"passwd entry."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:3960
+msgid "BROWSER"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3962
+msgid ""
+"If set, it specifies the browser to use for the 'show' and 'bugs' options.  "
+"See the description above."
+msgstr ""
+
+#. type: SH
+#: ../scripts/bts.pl:3967 ../scripts/dcontrol.pl:267 ../scripts/debc.1:92 ../scripts/debchange.1:362 ../scripts/debcheckout.pl:142 ../scripts/debclean.1:90 ../scripts/debcommit.pl:97 ../scripts/debdiff.1:167 ../scripts/debi.1:99 ../scripts/debrelease.1:105 ../scripts/debrsign.1:57 ../scripts/debsign.1:111 ../scripts/debuild.1:290 ../scripts/dget.pl:595 ../scripts/dpkg-depcheck.1:102 ../scripts/dscverify.1:42 ../scripts/grep-excuses.1:28 ../scripts/licensecheck.pl:88 ../scripts/mass-bug.pl:133 ../scripts/nmudiff.1:79 ../scripts/plotchangelog.1:106 ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:266 ../scripts/uscan.1:448 ../scripts/uupdate.1:88 ../scripts/who-uploads.1:50
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3969 ../scripts/debcommit.pl:99 ../scripts/licensecheck.pl:90 ../scripts/mass-bug.pl:135
+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:3977
+msgid "BTS_OFFLINE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3979
+msgid ""
+"If this is set to I<yes>, then it is the same as the --offline command line "
+"parameter being used.  Only has an effect on the show and bugs commands.  "
+"The default is I<no>.  See the description of the show command above for "
+"more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:3984
+msgid "BTS_CACHE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3986
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-cache command line "
+"parameter being used.  Only has an effect on the show and bug commands.  The "
+"default is I<yes>.  Again, see the show command above for more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:3991
+msgid "BTS_CACHE_MODE={min,mbox,full}"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:3993
+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 "
+"I<min>, and it has the same meaning as the --cache-mode command line "
+"parameter.  Only has an effect on the cache.  See the cache command for more "
+"information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:3999
+msgid "BTS_FORCE_REFRESH"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4001
+msgid ""
+"If this is set to I<yes>, then it is the same as the --force-refresh command "
+"line parameter being used.  Only has an effect on the cache command.  The "
+"default is I<no>.  See the cache command for more information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4006
+msgid "BTS_MAIL_READER"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4008
+msgid ""
+"If this is set, specifies a mail reader to use instead of mutt.  Same as the "
+"--mailreader command line option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4011 ../scripts/mass-bug.pl:143
+msgid "BTS_SENDMAIL_COMMAND"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/bts.pl:4013 ../scripts/mass-bug.pl:145 ../scripts/nmudiff.1:108
+msgid ""
+"If this is set, specifies a sendmail command to use instead of "
+"/usr/sbin/sendmail.  Same as the --sendmail command line option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4016
+msgid "BTS_ONLY_NEW"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4018
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have.  The default is I<no>.  Same as the --only-new command line "
+"option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4022
+msgid "BTS_SMTP_HOST"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4024
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the sendmail command.  Same as the --smtp-host command line option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4028
+msgid ""
+"Note that this option takes priority over BTS_SENDMAIL_COMMAND if both are "
+"set, unless the --sendmail option is used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4031
+msgid "BTS_SMTP_AUTH_USERNAME, BTS_SMTP_AUTH_PASSWORD"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4033
+msgid ""
+"If these options are set, then it is the same as the --smtp-username and "
+"--smtp-password options being used."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4036
+msgid "BTS_SMTP_HELO"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4038
+msgid "Same as the --smtp-helo command line option."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4040
+msgid "BTS_INCLUDE_RESOLVED"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4042
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-include-resolved "
+"command line parameter being used.  Only has an effect on the cache "
+"command.  The default is I<yes>.  See the cache command for more "
+"information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4047
+msgid "BTS_SUPPRESS_ACKS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4049
+msgid ""
+"If this is set to I<yes>, then it is the same as the --no-ack command line "
+"parameter being used.  The default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4052
+msgid "BTS_INTERACTIVE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4054
+msgid ""
+"If this is set to I<yes> or I<force>, then it is the same as the "
+"--interactive or --force-interactive command line parameter being used.  The "
+"default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/bts.pl:4058
+msgid "BTS_DEFAULT_CC"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4060
+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:4063
+msgid "BTS_SERVER"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4065
+msgid ""
+"Specify the name of a debbugs server which should be used instead of "
+"bugs.debian.org."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4072
+msgid ""
+"Please see L<http://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<http://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4076
+msgid "reportbug(1), querybts(1)"
+msgstr ""
+
+#. type: =head1
+#: ../scripts/bts.pl:4078 ../scripts/chdist.pl:92 ../scripts/debsnap.1:99 ../scripts/mass-bug.pl:514 ../scripts/tagpending.pl:431
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/bts.pl:4080
+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:4085 ../scripts/chdist.pl:97 ../scripts/mass-bug.pl:518
+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:20
+msgid ""
+"build-rdeps - find packages that depend on a specific package to build "
+"(reverse build depends)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:24
+msgid "B<build-rdeps> I<package>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+msgid ""
+"B<build-rdeps> searches for all packages that build-depend on the specified "
+"package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:34
+msgid "B<-u> B<--update>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:36
+msgid "Run apt-get update before searching for build-depends."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:38
+msgid "B<-s> B<--sudo>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:40
+msgid "Use sudo when running apt-get update. Has no effect if -u is omitted."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:42
+msgid "B<--distribution>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:44
+msgid "Select another distribution, which is searched for build-depends."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:46
+msgid "B<--only-main>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:48
+msgid "Ignore contrib and non-free"
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<--exclude-component>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<--origin>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+msgid "Restrict the search to only the specified origin (such as \"Debian\")."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:58
+msgid "B<-m> B<--print-maintainer>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+msgid "Print the value of the maintainer field for each package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:62
+msgid "B<-d> B<--debug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Run the debug mode"
+msgstr ""
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:66 ../scripts/cowpoke.1:68 ../scripts/debclean.1:84 ../scripts/grep-excuses.1:22 ../scripts/nmudiff.1:73 ../scripts/plotchangelog.1:92 ../scripts/uscan.1:442
+#, no-wrap
+msgid "B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Show the usage information."
+msgstr ""
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:70 ../scripts/cowpoke.1:72 ../scripts/debchange.1:359 ../scripts/debclean.1:87 ../scripts/debrelease.1:102 ../scripts/debsign.1:108 ../scripts/debsnap.1:51 ../scripts/diff2patches.1:25 ../scripts/dscverify.1:39 ../scripts/grep-excuses.1:25 ../scripts/nmudiff.1:76 ../scripts/plotchangelog.1:95 ../scripts/pts-subscribe.1:31 ../scripts/rmadison.pl:253 ../scripts/uscan.1:445 ../scripts/uupdate.1:85 ../scripts/who-uploads.1:47
+#, no-wrap
+msgid "B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Show the version information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:76 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:78
+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:82
+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:85
+msgid "deb-src http://<mirror>/debian <dist> main contrib non-free"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:87
+msgid "and run apt-get update afterwards or use the update option of this tool."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/build-rdeps.pl:339 ../scripts/desktop2menu.pl:43 ../scripts/licensecheck.pl:112 ../scripts/namecheck.pl:36 ../scripts/svnpath.pl:93 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:341
+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:349
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:21
+msgid "chdist - script to easily play with several distributions"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:25
+msgid "B<chdist> [options] [command] [command parameters]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:29
+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: =item
+#: ../scripts/chdist.pl:38
+msgid "-h, --help"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:40 ../scripts/mass-bug.pl:120
+msgid "Provide a usage message."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:42
+msgid "-d, --data-dir DIR"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:44
+msgid "Choose data directory (default: $HOME/.chdist/)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:46
+msgid "-a, --arch ARCH"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:48
+msgid "Choose architecture (default: `dpkg --print-architecture`)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:50 ../scripts/mass-bug.pl:122
+msgid "--version"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/chdist.pl:52 ../scripts/deb-reversion.dbk:239 ../scripts/mass-bug.pl:124 ../scripts/uscan.1:448
+msgid "Display version information."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:60
+msgid "create DIST : prepare a new tree named DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:62
+msgid "apt-get DIST (update|source|...) : run apt-get inside DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:64
+msgid "apt-cache DIST (show|showsrc|...) : run apt-cache inside DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:66
+msgid "apt-rdepends DIST [...] : run apt-rdepends inside DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:68
+msgid "src2bin DIST PKG : get binary packages for a source package in DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:70
+msgid "bin2src DIST PKG : get source package for a binary package in DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:72
+msgid ""
+"compare-packages DIST1 DIST2 [DIST3, ...] : list versions of packages in "
+"several DISTributions"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:74
+msgid "compare-bin-packages DIST1 DIST2 [DIST3, ...]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:76
+msgid ""
+"compare-versions DIST1 DIST2 : same as compare-packages, but also run dpkg "
+"--compare-versions and display where the package is newer."
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:78
+msgid "compare-bin-versions DIST1 DIST2"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:80
+msgid "compare-src-bin-packages DIST : compare sources and binaries for DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:82
+msgid ""
+"compare-src-bin-versions DIST : same as compare-src-bin-versions, but also "
+"run dpkg --compare-versions and display where the package is newer"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:84
+msgid "grep-dctrl-packages DIST [...] : run grep-dctrl on *_Packages inside DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:86
+msgid "grep-dctrl-sources DIST [...] : run grep-dctrl on *_Sources inside DIST"
+msgstr ""
+
+#. type: =item
+#: ../scripts/chdist.pl:88
+msgid "list : list available DISTs"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/chdist.pl:94
+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|--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:356 ../scripts/debdiff.1:155 ../scripts/debrelease.1:99 ../scripts/debsign.1:105 ../scripts/dscverify.1:36 ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21 ../scripts/uupdate.1:82 ../scripts/who-uploads.1:44 ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:158 ../scripts/mk-build-deps.pl:81 ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:20
+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 \"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 -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<--extra>, B<-x>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:46
+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 \"$BASH_ENV\" may be preceded by checking "
+"whether \"$BASH\" is set."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:46 ../scripts/debdiff.1:158 ../scripts/manpage-alert.1:17 ../scripts/rc-alert.1:24 ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:49 ../scripts/debdiff.1:161 ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:28 ../scripts/manpage-alert.1:20 ../scripts/mk-build-deps.pl:85 ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17 ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:23
+msgid "Show version and copyright information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/checkbashisms.1:49 ../scripts/debdiff.1:211
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:53
+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:53 ../scripts/transition-check.pl:66 ../scripts/uscan.1:506 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "1"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:56
+msgid "A possible bashism was detected."
+msgstr ""
+
+#. type: TP
+#: ../scripts/checkbashisms.1:56
+#, no-wrap
+msgid "2"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:60
+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: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid "B<lintian>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid ""
+"B<checkbashisms> 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>."
+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 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<arch>"
+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<dist>"
+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 sid, or lenny) or distribution names (such as unstable, "
+"or 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: TP
+#: ../scripts/cowpoke.1:48
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:51
+msgid "Specify the remote host to build on."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:52
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid "Specify the remote user to build as."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:56 ../scripts/debchange.1:185
+#, no-wrap
+msgid "B<--create>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:61
+msgid ""
+"Create the remote 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 cowbuilder root in the expected location."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:62
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:67
+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 DEBBUILDOPTS in the build host's pbuilderrc."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:71
+msgid "Display a brief summary of the available options and current configuration."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:75
+msgid "Display the current version information."
+msgstr ""
+
+#. type: SH
+#: ../scripts/cowpoke.1:77 ../scripts/debsnap.1:56
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:83
+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 "
+"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:84
+#, no-wrap
+msgid "Global defaults"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:86
+msgid "These apply to every arch and dist in a single cowpoke invocation."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:87
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:91
+msgid ""
+"The network address or fqdn of the build machine where cowbuilder is "
+"configured.  This may be overridden by the B<--buildd> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+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 config for BUILDD_HOST), and may be "
+"overridden by the B<--buildd-user> command line option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:97
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:104
+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:104
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:109
+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:110
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:114
+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:114
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:119
+msgid ""
+"The filesystem root for all pbuilder COW and result files.  Arch and 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:120
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:127
+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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:127
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:135
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:143
+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 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:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:147
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:153
+msgid ""
+"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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:154
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:158
+msgid ""
+"The utility to use when creating a new build root.  Alternatives are "
+"B<debootstrap> or B<cdebootstrap>."
+msgstr ""
+
+#. type: SS
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:163
+msgid ""
+"These are variables of the form: $arch_$dist_VAR which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:164
+#, no-wrap
+msgid "archB<_>distB<_RESULT_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:175
+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, 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:176
+#, no-wrap
+msgid "archB<_>distB<_BASE_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+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: SH
+#: ../scripts/cowpoke.1:184
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:185
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:188
+msgid "Global configuration options.  Will override hardcoded defaults."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:188
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:191 ../scripts/debsnap.1:90
+msgid "Per-user configuration options.  Will override any global configuration."
+msgstr ""
+
+#. type: TP
+#: ../scripts/cowpoke.1:191
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:195
+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:199
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"addtional 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:201
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:210
+msgid ""
+"There is nothing particularly special required to configure a cowbuilder "
+"instance for use with B<cowpoke>.  Simply create them in the flavour you "
+"require with `cowbuilder --create` according to the 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 cowbuilder does not require B<cowpoke> "
+"installed locally."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The build machine should have the lintian and 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 'host' alias specified by "
+"B<UPLOAD_QUEUE>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:222
+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 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:229
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the 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 cowbuilder during the update (or creation) of the build root."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/cowpoke.1:231 ../scripts/rmadison.pl:290
+#, no-wrap
+msgid "NOTES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:240
+msgid ""
+"Since 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.  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:246
+msgid "B<cowbuilder>(1), B<pbuilder>(1), B<ssh-agent>(1), B<sudoers>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:250
+msgid "B<cowpoke> was written by Ron E<lt>ron@debian.orgE<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 .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:77
+#, 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:83
+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<-ME<lt>moduleE<gt>>"
+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<-PE<lt>packageE<gt>>"
+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<-VE<lt>versionE<gt>>"
+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<-TE<lt>tagE<gt>>"
+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<-RE<lt>root\\ directoryE<gt>>"
+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<-WE<lt>work directoryE<gt>>"
+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<-xE<lt>prefixE<gt>>"
+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:89 ../scripts/debi.1:96 ../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:92 ../scripts/debi.1:99 ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:64
+msgid "B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1)  and B<debc>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:68 ../scripts/cvs-debi.1:72
+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:68
+msgid "B<cvs-buildpackage>(1), B<cvs-debc>(1)  B<cvs-debuild>(1)  and 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: TP
+#: ../scripts/cvs-debrelease.1:57 ../scripts/debc.1:85 ../scripts/debchange.1:347 ../scripts/debclean.1:77 ../scripts/debdiff.1:151 ../scripts/debi.1:92 ../scripts/debrelease.1:95 ../scripts/debsign.1:101 ../scripts/dpkg-depcheck.1:92 ../scripts/dscverify.1:24 ../scripts/grep-excuses.1:14 ../scripts/nmudiff.1:69 ../scripts/rmadison.pl:257 ../scripts/uscan.1:438 ../scripts/uupdate.1:78 ../scripts/who-uploads.1:40
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:69
+msgid "B<cvs-buildpackage>(1), B<debrelease>(1)  and B<cvs-debuild>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:73
+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:38 ../scripts/debuild.1:221
+#, no-wrap
+msgid "B<--no-conf, --noconf>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:225
+#, 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:228
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:231
+#, no-wrap
+msgid "B<--preserve-envvar=>I<var, >B<-e>I<var>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:46 ../scripts/debuild.1:238
+#, 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, --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:59
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1)  and "
+"B<lintian>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:60
+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:7
+msgid "B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] [I<...>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:12
+msgid ""
+"B<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 file itself.  "
+"It allows easy manipulation of all the files involved in an upload (for "
+"changes files) or a source package (for dsc files)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:16
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing .dsc or "
+".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:20
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the .dsc or .changes file. If a requested file "
+"is not found, an error message will be printed."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:20
+#, no-wrap
+msgid "B<--dsc>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:23
+msgid "Select the .dsc file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:23
+#, no-wrap
+msgid "B<--schanges>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:26
+msgid "Select .changes files for the 'source' architecture."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:26
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:29
+msgid "Select .changes files for binary architectures."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:29
+#, no-wrap
+msgid "B<--changes>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:32
+msgid "Select .changes files. Implies --schanges and --bchanges."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:32
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:35
+msgid "Select architecture-dependent binary packages (.deb files)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:35
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:38
+msgid "Select architecture-independent binary packages (.deb files)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:38
+#, no-wrap
+msgid "B<--deb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:41
+msgid "Select binary packages (.deb files). Implies --archdeb and --indepdeb."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:41
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:44
+msgid "Select architecture-dependent udeb binary packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:44
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:47
+msgid "Select architecture-independent udeb binary packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:47
+#, no-wrap
+msgid "B<--udeb>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:50
+msgid "Select udeb binary packages. Implies --archudeb and --indepudeb."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:50
+#, no-wrap
+msgid "B<--tar, --orig>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:53
+msgid "Select the tar file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:53
+#, no-wrap
+msgid "B<--diff>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:56
+msgid "Select the Debian diff file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:59
+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:63
+msgid ""
+"It is not possible to combine positive filtering options (e.g. --dsc)  and "
+"negative filtering options (e.g. --no-changes) in the same B<dcmd> "
+"invocation."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcmd.1:63
+#, no-wrap
+msgid "B<--no-fail-on-missing, -r>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:66
+msgid "If any of the requested files were not found, do not output an error."
+msgstr ""
+
+#. type: SH
+#: ../scripts/dcmd.1:66 ../scripts/debuild.1:367 ../scripts/getbuildlog.1:31 ../scripts/rc-alert.1:96
+#, no-wrap
+msgid "EXAMPLES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+msgid "Copy the result of a build to another machine:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:76
+#, 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:81
+#, 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:84
+msgid "Check the contents of a source package:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:91
+#, 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:96
+#, 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:101
+msgid "B<dpkg-source>(1), B<dpkg-genchanges>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dcmd.1:103
+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: textblock
+#: ../scripts/dcontrol.pl:201
+msgid ""
+"dcontrol -- Query package and source control files for all Debian "
+"distributions"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:207
+msgid "B<dcontrol> [I<options>] I<package>[I<modifiers>] [I<...>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:213
+msgid ""
+"B<dcontrol> queries a remote database of Debian binary and source package "
+"control files. It can be thought of as an B<apt-cache> webservice that also "
+"operates for distributions and architectures different from the local "
+"machine."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/dcontrol.pl:217
+msgid "MODIFIERS"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:219
+msgid "Like B<apt-cache>, packages can be suffixed by modifiers:"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:223
+msgid "B<=>I<version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:225
+msgid "Exact version match"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:227
+msgid "B<@>I<architecture>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:229
+msgid ""
+"Query this only architecture. Use B<@source> for source packages, B<@binary> "
+"excludes source packages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:232
+msgid "B</>[I<archive>B<:>][I<suite>][B</>I<component>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:234
+msgid ""
+"Restrict to I<archive> (debian, debian-backports, debian-security, "
+"debian-volatile), I<suite> (always codenames, with the exception of "
+"experimental), and/or I<component> (main, updates/main, ...). Use two "
+"slashes (B<//>) to separate suite and component if the suite name contains "
+"slashes.  (Component can be left empty.)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:242
+msgid ""
+"By default, all versions, suites, and architectures are queried. Refer to "
+"B<http://qa.debian.org/cgi-bin/dcontrol> for currently supported values."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:249
+msgid "B<-s>, B<--show-suites>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:251
+msgid "Add headers showing which distribution the control file is from."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dcontrol.pl:253
+msgid "B<-d>, B<--debug>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:255
+msgid "Print URL queried."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:259 ../scripts/dget.pl:587
+msgid "Show a help message."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dcontrol.pl:261 ../scripts/dget.pl:589 ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:263 ../scripts/dget.pl:591
+msgid "Show version information."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:269 ../scripts/dget.pl:597
+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/dcontrol.pl:277
+msgid "DCONTROL_URL"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:279
+msgid "URL to query. Default is B<http://qa.debian.org/cgi-bin/dcontrol>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:285
+msgid "This program is Copyright (C) 2009 by Christoph Berg <myon@debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:287 ../scripts/dget.pl:636 ../scripts/tagpending.pl:440
+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/dcontrol.pl:292
+msgid "B<apt-cache>(1)."
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "DD-LIST"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "2005-06-28"
+msgstr ""
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "Debian"
+msgstr ""
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:22
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr ""
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiuV>] [B<--help>] [B<--stdin>] [B<--dctrl>] [B<--version>] "
+"[B<--uploaders>] [B<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: TP
+#: ../scripts/dd-list.1:59
+#, no-wrap
+msgid "B<-h>,B<--help>"
+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<-u>,B<--uploaders>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:81
+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:81
+#, no-wrap
+msgid "B<-nou>,B<--nouploaders>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:84
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dd-list.1:84
+#, no-wrap
+msgid "B<-b>,B<--print-binary>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:89
+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:89
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr ""
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:93
+msgid "Print the version."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+msgid "Lars Wirzenius E<lt>liw@iki.fiE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dd-list.1:96
+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 .deb and .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: SH
+#: ../scripts/debc.1:28 ../scripts/debchange.1:106 ../scripts/debclean.1:24 ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:49 ../scripts/uscan.1:276
+#, 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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and their "
+"corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:41 ../scripts/debchange.1:119 ../scripts/debclean.1:37 ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:63 ../scripts/uscan.1:293
+msgid "DEVSCRIPTS_CHECK_DIRNAME_LEVEL can take the following values:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:41 ../scripts/debchange.1:119 ../scripts/debclean.1:37 ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:63 ../scripts/uscan.1:293
+#, no-wrap
+msgid "B<0>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:44 ../scripts/debchange.1:122 ../scripts/debclean.1:40 ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:66 ../scripts/uscan.1:296
+msgid "Never check the directory name."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:44 ../scripts/debchange.1:122 ../scripts/debclean.1:40 ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:66 ../scripts/uscan.1:296
+#, no-wrap
+msgid "B<1>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:126 ../scripts/debclean.1:44 ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:70
+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: TP
+#: ../scripts/debc.1:48 ../scripts/debchange.1:126 ../scripts/debclean.1:44 ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:70 ../scripts/uscan.1:302
+#, no-wrap
+msgid "B<2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:51 ../scripts/debchange.1:129 ../scripts/debclean.1:47 ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:73 ../scripts/uscan.1:305
+msgid "Always check the directory name."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debchange.1:142 ../scripts/debclean.1:60 ../scripts/debi.1:65 ../scripts/debrelease.1:56 ../scripts/debuild.1:86 ../scripts/uscan.1:318
+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 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/debi.1:72 ../scripts/debrelease.1:81 ../scripts/debsign.1:95
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files 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/debc.1:77 ../scripts/debchange.1:339 ../scripts/debclean.1:69 ../scripts/debi.1:84 ../scripts/debrelease.1:87 ../scripts/debuild.1:276 ../scripts/uscan.1:427
+#, no-wrap
+msgid "B<--check-dirname-level> I<N>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:81 ../scripts/debc.1:85 ../scripts/debchange.1:343 ../scripts/debchange.1:347 ../scripts/debclean.1:73 ../scripts/debclean.1:77 ../scripts/debi.1:88 ../scripts/debi.1:92 ../scripts/debrelease.1:91 ../scripts/debrelease.1:95 ../scripts/debuild.1:280 ../scripts/debuild.1:284 ../scripts/uscan.1:431 ../scripts/uscan.1:435
+msgid ""
+"See the above section \"Directory name checking\" for an explanation of this "
+"option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debc.1:81 ../scripts/debchange.1:343 ../scripts/debclean.1:73 ../scripts/debi.1:88 ../scripts/debrelease.1:91 ../scripts/debuild.1:280 ../scripts/uscan.1:431
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:98 ../scripts/debchange.1:368 ../scripts/debclean.1:96 ../scripts/debi.1:105 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63 ../scripts/debsign.1:117 ../scripts/nmudiff.1:85 ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:94 ../scripts/who-uploads.1:56
+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:98 ../scripts/debi.1:105 ../scripts/debrelease.1:116 ../scripts/debsign.1:130
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:108
+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:108 ../scripts/debchange.1:376 ../scripts/debclean.1:100 ../scripts/debi.1:115 ../scripts/debrelease.1:125 ../scripts/debuild.1:360 ../scripts/devscripts.conf.5:42
+#, no-wrap
+msgid "B<DEVSCRIPTS_CHECK_DIRNAME_LEVEL>, B<DEVSCRIPTS_CHECK_DIRNAME_REGEX>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:115 ../scripts/debchange.1:383 ../scripts/debclean.1:107 ../scripts/debi.1:122 ../scripts/debrelease.1:132 ../scripts/debuild.1:367
+msgid ""
+"See the above section \"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:120
+msgid "B<dpkg-deb>(1), B<debdiff>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debc.1:122
+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:29
+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 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 changelog or NEWS "
+"file can be created from scratch using the B<--create> option described "
+"below."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:42
+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 http://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:49
+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:65
+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<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. The alternate I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains I<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to I<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."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:83
+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:96
+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<--[no]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:102
+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:106
+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:117
+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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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:146
+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 CHANGELOG "
+"environment variable, as described below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:147
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:150
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:157
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number.  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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:157
+#, no-wrap
+msgid "B<--newversion >I<version>, B<-v >I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:163
+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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:163
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid "Edit the changelog in an editor."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:174
+msgid ""
+"Finalize the changelog for a release.  Update the changelog timestamp. If "
+"the distribution is set to I<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, I<unstable> will be used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:174
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid ""
+"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)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:185
+msgid ""
+"Do not do so. Note that a dummy changelog entry made 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:197
+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 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 "
+"changelog file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:197
+#, no-wrap
+msgid "B<--empty>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:204
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"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: TP
+#: ../scripts/debchange.1:204 ../scripts/uscan.1:390
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:209
+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:209
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \".1\" to a non-NMU version number (unless the package is Debian "
+"native, in which case \"+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 Maintainer nor the 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:218
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"+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:223
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:227
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"QA upload changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:227
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:231
+msgid ""
+"Increment the Debian release number for a Debian Security Team "
+"non-maintainer upload, and add a Security Team upload changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:231
+#, no-wrap
+msgid "B<--team>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:235
+msgid ""
+"Increment the Debian release number for a team upload, and add a team upload "
+"changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:235
+#, no-wrap
+msgid "B<--bpo>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:239
+msgid ""
+"Increment the Debian release number for an upload to lenny-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:239
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:242
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:242
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:246
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:246
+#, no-wrap
+msgid "B<--allow-lower-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:250
+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:250
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:254
+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:254
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:258
+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:258
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:262
+msgid ""
+"Disable automatic NMU detection.  Equivalent to setting "
+"B<DEBCHANGE_AUTO_NMU> to I<no>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:262
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:272
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>-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>-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:272
+#, no-wrap
+msgid "B<--closes>I< nnnnn,[nnnnn,...]>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:278
+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:278
+#, no-wrap
+msgid "B<--[no]query>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:281
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:281
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:286
+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:286
+#, no-wrap
+msgid " B<--no-preserve>, B<--nopreserve>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:289
+msgid "Do not preserve the source tree directory name (default)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:289
+#, no-wrap
+msgid "B<--distribution >I<dist>, B<-D >I<dist>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:294
+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:294
+#, no-wrap
+msgid "B<--urgency >I<urgency>, B<-u >I<urgency>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:299
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"low\" for new entries or the existing value for existing "
+"entries."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:299
+#, no-wrap
+msgid "B<--changelog >I<file>, B<-c >I<file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:305
+msgid ""
+"This will edit the changelog I<file> instead of the standard "
+"I<debian/changelog>.  This option overrides any CHANGELOG environment "
+"variable setting.  Also, no directory traversing or checking will be "
+"performed when this option is used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:305
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+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:311
+#, no-wrap
+msgid "B<--[no]multimaint>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+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:316
+#, no-wrap
+msgid "B<--[no]multimaint-merge>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:321
+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:321
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+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:329
+#, no-wrap
+msgid "B<--[no]mainttrailer>, B<-t>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:339
+msgid ""
+"If 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: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<--release-heuristic> I<log|changelog>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+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:362 ../scripts/debclean.1:90 ../scripts/debrelease.1:105 ../scripts/debsign.1:111 ../scripts/dscverify.1:42 ../scripts/nmudiff.1:79 ../scripts/pts-subscribe.1:34 ../scripts/uupdate.1:88 ../scripts/who-uploads.1:50
+msgid "Display version and copyright information and exit successfully."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:368
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+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:372
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:376
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:383
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:388
+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:388
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:393
+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:393
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+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:399
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:403
+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:403
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:407
+msgid ""
+"Use this timezone for changelog entries.  Default is the user/system "
+"timezone as shown by `date -R` and affected by the environment variable TZ."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:407
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:411
+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:411
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:417
+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:417
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:421
+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: =head1
+#: ../scripts/debchange.1:421 ../scripts/devscripts.1:16 ../scripts/devscripts.1:20 ../scripts/mass-bug.pl:128
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:422
+#, no-wrap
+msgid "B<DEBEMAIL>, B<EMAIL>, B<DEBFULLNAME>, B<NAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:425
+msgid "See the above description of the use of these environment variables."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debchange.1:425
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+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:431
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:435
+msgid ""
+"These environment variables (in this order) determine the editor used by "
+"B<sensible-editor>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:442
+msgid ""
+"B<debclean>(1), B<dupload>(1), B<dput>(1), B<debc>(1)  and "
+"B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debchange.1:445
+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:25
+msgid "debcheckout - checkout the development repository of a Debian package"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:31
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:33
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:35
+msgid "B<debcheckout> B<--help>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:41
+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:47
+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 vim package exposes such information with a field like "
+"S<Vcs-Git: git://git.debian.org/git/pkg-vim/vim.git>, you can see it by "
+"grepping through C<apt-cache showsrc vim>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:53
+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:58
+msgid ""
+"If you already know the URL of a given repository you can invoke 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:64
+msgid ""
+"The currently supported version control systems are: arch, bzr, cvs, darcs, "
+"git, hg, svn."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:69
+msgid "B<GENERAL OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:73
+msgid "B<-a>, B<--auth>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:75
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<http://alioth.debian.org>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for subversion repositories hosted on alioth this means that "
+"S<svn+ssh://svn.debian.org/...> will be used instead of "
+"S<svn://svn.debian.org/...>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:82
+msgid "B<-d>, B<--details>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:84
+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:90
+msgid "Also see B<-p>. This option and B<-p> are mutually exclusive."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:94
+msgid "Print a detailed help message and exit."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:96
+msgid "B<-p>, B<--print>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+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:103
+msgid "Also see B<-d>. This option and B<-d> are mutually exclusive."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:105
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"svn\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:111
+msgid "B<-u> I<USERNAME>, B<--user> I<USERNAME>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:113
+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:116
+msgid "B<-f>, B<--file>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:118
+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 "
+"mutliple files."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:124
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:126
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcheckout.pl:130
+msgid "B<--git-track> I<BRANCHES>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:132
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<git branch --track>, see 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:137
+msgid ""
+"As a shorthand, the string \"*\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:144 ../scripts/rmadison.pl:268
+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:152
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:154
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: REGEXP TEXT REGEXP 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:160
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of $1, $2, ... and so on."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:163
+msgid ""
+"This setting can be used to enable authenticated mode for most repositories "
+"out there.  Note that the Debian repositories on S<alioth.debian.org> "
+"(S<$vcs.debian.org>) are implicitly defined."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:167
+msgid "Here is a sample snippet suitable for the configuration files:"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/debcheckout.pl:169
+#, 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:174
+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: textblock
+#: ../scripts/debcheckout.pl:183
+msgid ""
+"apt-cache(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about Vcs-* fields): "
+"S<http://www.debian.org/doc/developers-reference/best-pkging-practices.html#bpp-vcs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:188
+msgid ""
+"debcheckout and this manpage have been written by Stefano Zacchiroli "
+"<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<debian/rules 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:22
+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:24
+msgid "B<debclean> uses B<debuild>(1) to clean the source tree."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:35
+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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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:61
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:65
+msgid "Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:65
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:69
+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:81 ../scripts/debuild.1:284
+#, no-wrap
+msgid "B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:84
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debclean.1:96
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:100
+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:111
+msgid "B<debuild>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+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> [B<--release>] [B<--release-use-changelog>] "
+"[B<--message=>I<text>] [B<--noact>] [B<--diff>] [B<--confirm>] [B<--edit>] "
+"[B<--changelog=>I<path>] [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 --release, if there are uncommited 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
+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: =item
+#: ../scripts/debcommit.pl:71
+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 "I<files to commit>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"Specify which files to commit (debian/changelog is added to the list "
+"automatically.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:81
+msgid "B<-s> B<--strip-message>, B<--no-strip-message>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:83
+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:87
+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: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:107
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:109
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-strip-message "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:112
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:114
+msgid ""
+"If this is set to I<yes>, then it is the same as the --sign-tags command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:117
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:119
+msgid ""
+"If this is set to I<yes>, then it is the same as the --release-use-changelog "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debcommit.pl:122 ../scripts/debsign.1:127
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:124
+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:129
+msgid "VCS SPECIFIC FEATURES"
+msgstr ""
+
+#. type: =item
+#: ../scripts/debcommit.pl:133
+msgid "B<tla> / B<baz>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:135
+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:141
+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:146
+msgid "B<git>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:148
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if --strip-message was used."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:151
+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:156
+msgid "B<hg> / B<darcs>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:158
+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:162
+msgid "B<bzr>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:164
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then "
+"--fixes options to \"bzr commit\" will be generated to associate the "
+"revision and the bugs."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:843 ../scripts/mass-bug.pl:523
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/debcommit.pl:847
+msgid "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:24
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:27
+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:38
+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:42
+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:50
+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:51
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:56
+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:56
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:60
+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:60
+#, no-wrap
+msgid "B<--move>I< FROM TO>,B< -m>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:70
+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."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:70
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:76
+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:76
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:81
+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:81
+#, no-wrap
+msgid "B<--control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:85
+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:85
+#, no-wrap
+msgid "B<--controlfiles>I< FILE,FILE,...>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:93
+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:93
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:97
+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:97
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:101
+msgid ""
+"Do not compare control files in source packages using B<wdfiff>.  This is "
+"the default."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:101
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:106
+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:106
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:113
+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:113
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:117 ../scripts/debdiff.1:134
+msgid "The default behaviour; can be used to override a configuration file setting."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:117
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:123
+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:123
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:127
+msgid ""
+"Exclude files that match I<PATTERN>.  Multiple uses of this option are "
+"permitted."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:127
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:130
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:130
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+msgid "When comparing source packages, do so in version order."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:137
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:143
+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:143
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:148
+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:148
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:151
+msgid "Do not unpack tarballs inside source packages."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:161
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:164
+msgid "Be quiet if no differences were found."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debdiff.1:164
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:167
+msgid "Ignore whitespace in diffs."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:173
+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:173
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:177
+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:177
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:182
+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:182
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:187
+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:187
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:191
+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:191
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:195
+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:195
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:199
+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:199
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+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:203
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:207
+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:207
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:211
+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: Plain text
+#: ../scripts/debdiff.1:215
+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:222
+msgid ""
+"B<dpkg-deb>(1), B<wdiff>(1), B<interdiff>(1), B<diffstat>(1)  and "
+"B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debdiff.1:227
+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/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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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 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/debi.1:78
+#, no-wrap
+msgid "B<--upgrade>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:84
+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: Plain text
+#: ../scripts/debi.1:115
+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:126
+msgid "B<debpkg>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debi.1:131
+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: 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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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:73
+#, 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:83
+#, no-wrap
+msgid "B<--multi>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch changes mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the 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:137
+msgid "B<dupload>(1), B<dput>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrelease.1:139
+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\">log message</arg>"
+msgstr ""
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"&dhcommand; unpacks the specified .deb file, changes the version number in "
+"the relevant locations, appends a Debian <filename>changelog</filename> "
+"entry with the specified contents, and creates a new .deb 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 .deb file, root privileges are required in order to have the "
+"correct permissions and ownerships in the resulting .deb 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 .deb's control 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 .deb 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 .deb file and modifying the "
+"changelog, and before packing up the new .deb 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>fakeroot</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> "
+"<refentrytitle>dpkg-deb</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 (e.g. amd64) 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 transfered 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: 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> [options] [I<user@>]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:77
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build changes "
+"file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch changes mode: This signifies that B<debrsign> should use the most "
+"recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the 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 or PGP 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:71
+msgid "B<debsign>(1), B<dpkg-architecture>(1)  and B<ssh>(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debrsign.1:73 ../scripts/debsign.1:155
+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/PGP"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid "B<debsign> [options] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:16
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of "
+"B<dpkg-buildpackage>(1).  It takes either an unsigned I<.dsc> file or an "
+"unsigned I<.changes> file (along with 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 using the GNU Privacy Guard "
+"or PGP.  It is careful to calculate the size and checksums of the newly "
+"signed I<.dsc> file and replace the original values in the I<.changes> file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:21
+msgid ""
+"If a I<.changes>, I<.dsc> or I<.commands> 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/debsign.1:25
+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> 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)."
+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 I<.changes> and I<.dsc> files live on the specified remote host.  In "
+"this case, a 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<changes> 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:53
+msgid ""
+"I<progname> is one of B<pgp> or B<gpg>, and specifies which signing program "
+"is to be called.  The default is B<gpg> if I<~/.gnupg/secring.gpg> exists "
+"and B<pgp> otherwise."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:53
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:62
+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:62
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:65
+msgid "Same as B<-m> but takes precedence over it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:65
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:69
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:69
+#, no-wrap
+msgid "B<-spgp>, B<-sgpg>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:73
+msgid ""
+"Whether the signing program is to be called with command line arguments like "
+"those of B<pgp> or B<gpg>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:89
+msgid ""
+"Multiarch changes mode: This signifies that B<debsign> should use the most "
+"recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the changes files produced by B<dpkg-cross>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:89
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+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: Plain text
+#: ../scripts/debsign.1:101
+msgid ""
+"Look for the I<.changes> and I<.dsc> files 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:117
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_SIGNLIKE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:124
+msgid ""
+"This must be I<gpg> or I<pgp> and is equivalent to using either B<-sgpg> or "
+"B<-spgp> respectively."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsign.1:124
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:127
+msgid "This is the B<-m> option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:130
+msgid "And this is the B<-k> option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsign.1:140
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and "
+"I<.dsc> 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/debsign.1:153
+msgid ""
+"B<debrsign>(1), B<dpkg-buildpackage>(1), B<dpkg-architecture>(1), "
+"B<debuild>(1), B<md5sum>(1), B<sha1sum>(1), B<sha256sum>(1), B<gpg>(1), "
+"B<pgp>(1), B<scp>(1)  and 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<http://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: TP
+#: ../scripts/debsnap.1:33
+#, 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 '.' (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: TP
+#: ../scripts/debsnap.1:42
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+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: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Show a summary of these options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Show the version of B<debsnap>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:59
+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:60
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:63
+msgid "Same as the command line option B<--verbose>.  Set to \"yes\" to enable."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:64
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:69
+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:70
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:73
+msgid "The base url for the snapshots archive."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:75
+msgid "If unset this defaults to I<http://snapshot.debian.org>"
+msgstr ""
+
+#. type: SH
+#: ../scripts/debsnap.1:76 ../scripts/transition-check.pl:54 ../scripts/uscan.1:498 ../scripts/wnpp-check.1:25
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:82
+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: SH
+#: ../scripts/debsnap.1:83 ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:84
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:87
+msgid "Global devscripts configuration options.  Will override hardcoded defaults."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debsnap.1:87
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+msgid "B<devscripts>(1), B<devscripts.conf>(5), B<git-debimport>(1)"
+msgstr ""
+
+#. type: SH
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "AUTHORS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:98
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:105
+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:108
+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:110
+#, no-wrap
+msgid "Reporting bugs"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+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:29
+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 "
+"I<.changes> and/or I<.dsc> files as appropriate (using B<debsign>(1) to do "
+"this instead of B<dpkg-buildpackage>(1) itself; all relevant key-signing "
+"options are passed on).  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:46
+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 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:49
+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:61
+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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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:94
+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 TERM, HOME, LOGNAME, GNUPGHOME, PGPPATH, "
+"GPG_AGENT_INFO, FAKEROOTKEY, DEB_*, the (C, CPP, CXX, LD and F)FLAGS "
+"variables and their _APPEND counterparts and the locale variables LANG and "
+"LC_*.  TERM is set to `dumb' if it is unset, and PATH is set to "
+"\"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11\"."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:105
+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 PATH will be set "
+"to the sane value described above.  The B<only> way to prevent 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:109
+msgid ""
+"Note that one may add directories to the beginning of the sanitised PATH, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as ccache or distcc for building."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:114
+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:114
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:124
+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:130
+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:146
+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:146
+#, no-wrap
+msgid "HOOKS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:153
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>.  "
+"Note that if any of the hooks from clean-hook to final-clean (inclusive) are "
+"used, B<debuild> will emulate some sections of the B<dpkg-buildpackage> "
+"process rather than running them directly, as B<dpkg-buildpackage> does not "
+"support hooks.  The available hooks are as follows:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:153
+#, no-wrap
+msgid "dpkg-buildpackage-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid "Run before dpkg-buildpackage begins by calling dpkg-checkbuilddeps."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "clean-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:161
+msgid ""
+"Run before dpkg-buildpackage runs debian/rules clean to clean the source "
+"tree.  (Run even if the tree is not being cleaned because -nc is used.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:161
+#, no-wrap
+msgid "dpkg-source-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:165
+msgid ""
+"Run after cleaning the tree and before running dpkg-source.  (Run even if "
+"dpkg-source is not being called because -b or -B is used.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:165
+#, no-wrap
+msgid "dpkg-build-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:170
+msgid ""
+"Run after dpkg-source and before calling debian/rules build.  (Run even if "
+"this is a source-only build, so debian/rules build is not being called.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:170
+#, no-wrap
+msgid "dpkg-binary-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:174
+msgid ""
+"Run between debian/rules build and debian/rules binary(-arch).  Run ONLY if "
+"a binary package is being built."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:174
+#, no-wrap
+msgid "dpkg-genchanges-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:178
+msgid "Run after the binary package is built and before calling dpkg-genchanges."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:178
+#, no-wrap
+msgid "final-clean-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:183
+msgid ""
+"Run after dpkg-genchanges and before the final debian/rules clean.  (Run "
+"even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:183
+#, no-wrap
+msgid "lintian-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:187
+msgid ""
+"Run (once) before calling lintian.  (Run even if we are not calling "
+"lintian.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:187
+#, no-wrap
+msgid "signing-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:191
+msgid ""
+"Run after calling lintian before any signing takes place.  (Run even if we "
+"are not signing anything.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:191
+#, no-wrap
+msgid "post-dpkg-buildpackage-hook"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:194
+msgid "Run after everything has finished."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:209
+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: %% will be "
+"replaced by a single % sign, %p will be replaced by the package name, %v by "
+"the package version number, %s by the source version number, %u by the "
+"upstream version number.  Neither %s nor %u will contain an epoch.  %a will "
+"be 1 if the immediately following action is to be performed and 0 if not "
+"(for example, in the dpkg-source hook, %a will become 1 if dpkg-source is to "
+"be run and 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 "
+"dpkg-source hook if 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:213
+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:219
+msgid ""
+"Finally, only dpkg-buildpackage-hook and the hooks from lintian-hook onwards "
+"can be used if B<dpkg-cross> is installed.  (This is because internally, "
+"B<debuild> reimplements B<dpkg-buildpackage>, but it does not attempt to "
+"reimplement the B<dpkg-cross> replacement of this script.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:221
+msgid "For details, see above."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:228
+msgid "Command to gain root (or fake root) privileges."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:231
+msgid "Do not clean the environment, except for PATH."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:234
+msgid "Do not clean the I<var> variable from the environment."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:238
+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:242
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:242
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:246
+msgid "Once the normalized PATH has been set, prepend I<value> to it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:246
+#, no-wrap
+msgid "B<--lintian>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:251
+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:251
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:254
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:254
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:259
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the .orig.tar.gz file or .orig directory "
+"exists before starting the build."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:259
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:264
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the .orig.tar.gz file or .orig directory exists before "
+"starting the build.  This is the default behaviour."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:264
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+msgid ""
+"When signing, use B<debrsign> instead of B<debsign>.  I<username> specifies "
+"the credentials to be used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:272
+msgid "Set a hook as described above.  If I<hook> is blank, this unsets the hook."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:272
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:276
+msgid "Clears all hooks.  They may be reinstated by later command line options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:287
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:287
+#, no-wrap
+msgid "B<-D>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:290
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:298
+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:298
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:302
+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:302
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:307
+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:307
+#, no-wrap
+msgid "B<DEBUILD_SET_ENVVAR_>I<var>B<=>I<value>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:310
+msgid "This corresponds to B<--set-envvar=>I<var>B<=>I<value>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:310
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid "This corresponds to B<--prepend-path>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:313
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:317
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:317
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:321
+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:321
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:325
+msgid ""
+"Setting this variable is the same as using the --username command line "
+"option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:325
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:333
+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 config file "
+"might contain the line:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:336
+#, 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:341
+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 `-' sign)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:346
+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 DEBUILD_ROOTCMD."
+msgstr ""
+
+#. type: TP
+#: ../scripts/debuild.1:346
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+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:350
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+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:354
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:360
+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:371
+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:374
+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:377
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:380
+msgid "Change the \"-b\" to \"-S\" to build only a source package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+msgid ""
+"An example using B<lintian> to check the resulting packages and passing "
+"options to it:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:386
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:394
+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 "
+"DEBUILD_DPKG_BUILDPACKAGE_OPTS configuration file option as described above."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:398
+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:403
+#, 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:410
+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 "
+"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:423
+msgid ""
+"B<dpkg-buildpackage>(1), B<dpkg-checkbuilddeps>(1), B<debsign>(1), "
+"B<fakeroot>(1), B<lintian>(1), B<chmod>(1), B<dpkg-statoverride>(8), "
+"B<su>(1), B<sudo>(1), B<super>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/debuild.1:426
+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|--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/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:4
+msgid "devscripts - scripts to ease the lives of Debian developers"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:16
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man page of individual scripts for more details on how "
+"the variables are used."
+msgstr ""
+
+#. type: IX
+#: ../scripts/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr ""
+
+#. type: IX
+#: ../scripts/devscripts.1:22 ../scripts/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:24
+msgid "Email of the person acting on a given Debian package via devscripts."
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:28
+msgid ""
+"Full name (first + family) of the person acting on a given Debian package "
+"via devscripts."
+msgstr ""
+
+#. type: SH
+#: ../scripts/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:31
+msgid ""
+"Here is the complete list of available devscripts. See their man pages for "
+"additional documentation."
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:35
+msgid "print tla/Bazaar package names [tla | bazaar]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:37
+msgid ""
+"a command-line tool for manipulating the BTS [www-browser, "
+"libauthen-sasl-perl, libnet-smtp-ssl-perl, libsoap-lite-perl, libwww-perl, "
+"bsd-mailx | mailx]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:39
+msgid "Searches for all packages that build-depend on a given package [dctrl-tools]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:41
+msgid "tool to easily play with several distributions [dctrl-tools]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:43
+msgid "check whether a /bin/sh script contains any common bash-specific contructs"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:53
+#, no-wrap
+msgid "I<dcontrol>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:55
+msgid ""
+"remotely query package and source control files for all Debian "
+"distributions. [liburl-perl, libwww-perl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:55
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:57
+msgid "given a list of packages, pretty-print it ordered by maintainer"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:59
+msgid "display the contents of just-built .debs"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:59
+#, no-wrap
+msgid "I<debchange/dch>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:61
+msgid ""
+"automagically add entries to debian/changelog files "
+"[libparse-debcontrol-perl, libsoap-lite-perl, lsb-release]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:63
+msgid "checkout the development repository of a Debian package"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:65
+msgid "purge a Debian source tree [fakeroot]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:67
+msgid ""
+"commit changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, basing commit "
+"message on changelog [cvs | darcs | subversion | svk | tla | bzr | git-core "
+"| mercurial]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:69
+msgid ""
+"compare two versions of a Debian package to check for added and removed "
+"files [wdiff, patchutils]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:69
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:71
+msgid "install a just-built package"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:71
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:73
+msgid "dpkg wrapper to be able to manage/test packages without su"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:73
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:75
+msgid "wrapper around dupload or dput [dupload | dput, ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:75
+#, no-wrap
+msgid "I<debsign, debrsign>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:77
+msgid ""
+"sign a .changes/.dsc pair without needing any of the rest of the package to "
+"be present; can sign the pair remotely or fetch the pair from a remote "
+"machine for signing [gnupg, debian-keyring, ssh-client]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:77
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:79
+msgid "grab packages from http://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:79
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:81
+msgid ""
+"wrapper to build a package without having to su or worry about how to invoke "
+"dpkg to build using fakeroot.  Also deals with common environment problems, "
+"umask etc. [fakeroot, lintian, gnupg]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:81
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:83
+msgid "increases a binary package version number and repacks the archive"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:83
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:85
+msgid ""
+"produce a skeleton menu file from a freedesktop.org desktop file "
+"[libfile-desktopentry-perl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:85
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:87
+msgid "downloads Debian source and binary packages [wget | curl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:87
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:89
+msgid ""
+"determine the packages used during the build of a Debian package; useful for "
+"determining the Build-Depends control field needed [build-essential, strace]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:89
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:91
+msgid ""
+"extract patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches [patchutils]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:91
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:93
+msgid ""
+"verify the integrity of a Debian package from the .changes or .dsc files "
+"[gnupg, debian-keyring, libdigest-md5-perl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:93
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:95
+msgid "download package build logs from Debian auto-builders [wget]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:95
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:97
+msgid ""
+"grep the update_excuses.html file for your packages [libterm-size-perl, "
+"wget, w3m]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:97
+#, no-wrap
+msgid "I<licensecheck>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:99
+msgid "attempt to determine the license of source files"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:99
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:101
+msgid "searches for unreleased packages"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:101
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:103
+msgid "locate binaries without corresponding manpages [man-db]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:103
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:105
+msgid "mass-file bug reports [bsd-mailx | mailx]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:105
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:107
+msgid "merge .changes files from a package built on different architectures"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:107
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:109
+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 "
+"packages. [equivs]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:109
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:111
+msgid "Check project names are not already taken."
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:111
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:113
+msgid ""
+"mail a diff of the current package against the previous version to the BTS "
+"to assist in tracking NMUs [patchutils, mutt]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:113
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:115
+msgid "view a nice plot of the data in a changelog file [libtimedate-perl, gnuplot]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:115
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:117
+msgid "subscribe to the PTS for a limited period of time [bsd-mailx | mailx, at]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:117
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:119
+msgid "list installed packages which have release-critical bugs [wget]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:119
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:121
+msgid ""
+"remotely query the Debian archive database about packages [wget | curl, "
+"liburi-perl]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:121
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:123
+msgid "print svn repository paths [subversion]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:123
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:125
+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
+#: ../scripts/devscripts.1:125
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:127
+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
+#: ../scripts/devscripts.1:127
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:129
+msgid ""
+"scan upstream sites for new releases of packages [libcrypt-ssleay-perl, "
+"libwww-perl, unzip, lzma, xz-utils]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:129
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:131
+msgid "integrate upstream changes into a source package [patch]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:131
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:133
+msgid "check which maintainers' packages depend on a package"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:133
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:135
+msgid ""
+"determine the most recent uploaders of a package to the Debian archive "
+"[gnupg, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+
+#. type: IP
+#: ../scripts/devscripts.1:135
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.1:136
+msgid "list installed packages which are orphaned or up for adoption [wget]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:481
+msgid "dget -- Download Debian source and binary packages"
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:487
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:489
+msgid "B<dget> [I<options>] I<package>[=I<version>]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:495
+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:502
+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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:509
+msgid ""
+"In both cases dget is capable of getting several packages and/or URLs at "
+"once."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:512
+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:517
+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:527
+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: =item
+#: ../scripts/dget.pl:536
+msgid "B<-b>, B<--backup>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:538
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:540
+msgid "B<-q>, B<--quiet>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:542
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:544
+msgid "B<-d>, B<--download-only>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:546
+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:549
+msgid "B<-x>, B<--extract>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:551
+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:555
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:557
+msgid ""
+"Do not attempt to verify the integrity of downloaded source packages using "
+"B<dscverify>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:560
+msgid "B<--build>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:562
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:564
+msgid "B<--path> DIR[:DIR...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:566
+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:577
+msgid "B<--insecure>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:579
+msgid "Allow SSL connections to untrusted hosts."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:581
+msgid "B<--no-cache>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:583
+msgid "Bypass server-side HTTP caches by sending a B<Pragma: no-cache> header."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:605
+msgid "DGET_PATH"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:607
+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:612
+msgid "DGET_UNPACK"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:614
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages.  Default is "
+"'yes'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/dget.pl:617
+msgid "DGET_VERIFY"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:619
+msgid ""
+"Set to 'no' to disable checking signatures of downloaded source packages.  "
+"Default is 'yes'."
+msgstr ""
+
+#. type: =head1
+#: ../scripts/dget.pl:624
+msgid "BUGS AND COMPATIBILITY"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:628
+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:633
+msgid ""
+"This program is Copyright (C) 2005-08 by Christoph Berg <myon@debian.org>.  "
+"Modifications are Copyright (C) 2005-06 by Julian Gilbey <jdg@debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid "B<apt-get>(1), B<debdiff>(1), B<dpkg-source>(1), B<curl>(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 "diff2patches I<E<lt>filenameE<gt>>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "diff2patches I<--help>|I<--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: TP
+#: ../scripts/diff2patches.1:22
+#, no-wrap
+msgid "B<--help> "
+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 "I<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: TP
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+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:83
+#, 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:34
+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:124
+msgid ""
+"B<dpkg>(1), B<strace>(1), B<update-alternatives>(8)  and "
+"B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:124
+#, no-wrap
+msgid "COPYING"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:131
+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:36
+msgid ""
+"B<The Debian Policy Manual,> sections on Build-Depends etc., "
+"B<dpkg-depcheck>(1)  and B<fakeroot>(1)."
+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
+#: ../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_dsc_filename> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG or PGP signatures on the given I<.changes> "
+"or I<.dsc> files are good signatures made by keys in the current Debian "
+"keyrings, found in the I<debian-keyring> and I<debian-maintainers> "
+"packages.  (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> 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:32
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes> or I<.dsc> files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/dscverify.1:32 ../scripts/plotchangelog.1:78 ../scripts/uscan.1:418
+#, no-wrap
+msgid "B<--verbose>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:35
+msgid "Do not suppress GPG output."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:49
+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:49
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:53
+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:53
+#, no-wrap
+msgid "KEYRING"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:60
+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:62
+msgid "Below is an example for an alias:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:64
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr ""
+
+#. type: SH
+#: ../scripts/dscverify.1:64
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:67
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:69
+msgid "- /org/keyring.debian.org/keyrings/debian-keyring.(gpg|pgp)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:71
+msgid "- /usr/share/keyrings/debian-keyring.(pgp|gpg)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:73
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:77
+msgid "B<gpg>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/dscverify.1:81
+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: 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:13
+msgid ""
+"B<grep-excuses> downloads the update_excuses.html file and greps it for the "
+"specified maintainer name.  The B<libwww-perl> 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:18
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:22
+msgid ""
+"Get information from E<lt>http://release.debian.org/migration/E<gt>.  A "
+"package name must be given when using this option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:25 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr ""
+
+#. type: TP
+#: ../scripts/grep-excuses.1:34
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:38
+msgid ""
+"The default maintainer, email or package to grep for if none is specified on "
+"the command line."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:40 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:42
+msgid ""
+"Joey Hess E<lt>joeyh@debian.orgE<gt>; modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:24
+msgid "licensecheck - simple license checker for source files"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:28
+msgid "B<licensecheck> B<--help|--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:30
+msgid ""
+"B<licensecheck> [B<--no-conf>] [B<--verbose>] [B<--copyright>] "
+"[B<-l|--lines=N>] [B<-i|--ignore=regex>] [B<-c|--check=regex>] "
+"[B<-r|--recursive>] I<list of files and directories to check>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:36
+msgid ""
+"B<licensecheck> attempts to determine the license that applies to each file "
+"passed to it, by searching the start of the file for text belonging to "
+"various licenses."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:40
+msgid ""
+"If any of the arguments passed are directories, B<licensecheck> will add the "
+"files contained within to the list of files to process."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:47
+msgid "B<--verbose> B<--no-verbose>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:49
+msgid ""
+"Specify whether to output the text being processed from each file before the "
+"corresponding license information."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:52
+msgid "Default is to be quiet."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:54
+msgid "B<-l=N> B<--lines=N>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:56
+msgid ""
+"Specify the number of lines of each file's header which should be parsed for "
+"license information. (Default is 60)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:59
+msgid "B<-i=regex> B<--ignore=regex>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:61
+msgid ""
+"When processing the list of files and directories, the regular expression "
+"specified by this option will be used to indicate those which should not be "
+"considered (e.g. backup files, VCS metadata)."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:65
+msgid "B<-r> B<--recursive>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:67
+msgid "Specify that the contents of directories should be added recursively."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:70
+msgid "B<-c=regex> B<--check=regex>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:72
+msgid ""
+"Specify a pattern against which filenames will be matched in order to decide "
+"which files to check the license of."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:75
+msgid "The default includes common source files."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:77
+msgid "B<--copyright>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:79
+msgid "Also display copyright text found within the file"
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:81
+msgid "B<--no-conf> B<--noconf>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:83
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:98
+msgid "B<LICENSECHECK_VERBOSE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:100
+msgid ""
+"If this is set to I<yes>, then it is the same as the --verbose command line "
+"parameter being used. The default is I<no>."
+msgstr ""
+
+#. type: =item
+#: ../scripts/licensecheck.pl:103
+msgid "B<LICENSECHECK_PARSELINES>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:105
+msgid ""
+"If this is set to a positive number then the specified number of lines at "
+"the start of each file will be read whilst attempting to determine the "
+"license(s) in use.  This is equivalent to the --lines command line option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:114
+msgid ""
+"This code is copyright by Adam D. Barratt <adam@adam-barratt.org.uk>, all "
+"rights reserved; based on a script of the same name from the KDE SDK, which "
+"is copyright by <dfaure@kde.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."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:123 ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <adam@adam-barratt.org.uk>"
+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:21
+msgid "B<debchange>(1)"
+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: 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<[path list]>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:8
+msgid "B<manpage-alert --help|--version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:11
+msgid ""
+"B<manpage-alert> searches the given list of paths for binaries without "
+"corresponding manpages."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:14
+msgid ""
+"If no paths are specified on the command line, the path list I</bin /sbin "
+"/usr/bin /usr/sbin /usr/games> will be assumed."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:17
+msgid "B<--help>, B<-h> Show a summary of options."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+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:28
+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:24
+msgid "mass-bug - mass-file a bug report against a list of packages"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:28
+msgid "mass-bug [options] --subject=\"bug subject\" template package-list"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:32
+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:38
+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:43
+msgid "TEMPLATE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:45
+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:50
+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:55
+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:62
+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:68
+msgid "--severity=(wishlist|minor|normal|important|serious|grave|critical)"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:70
+msgid "Specify the severity with which bugs should be filed. Default is 'normal'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:73
+msgid "--display"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:75
+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:78
+msgid "--send"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:80
+msgid "Actually send the bug reports."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:82
+msgid "--subject=\"bug subject\""
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:84
+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:87
+msgid "--tags"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:89
+msgid "Set the BTS pseudo-header for tags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:91
+msgid "--user"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:93
+msgid "Set the BTS pseudo-header for a usertags' user."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:95
+msgid "--usertags"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:97
+msgid "Set the BTS pseudo-header for usertags."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:99
+msgid "--source"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:101
+msgid ""
+"Specify that package names refer to source packages rather than binary "
+"packages."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:106
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will not be passed to a shell.  Default is '/usr/sbin/sendmail'."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:109
+msgid "--no-wrap"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:111
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mass-bug.pl:118
+msgid "--help"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:130
+msgid ""
+"DEBEMAIL and 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:516
+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<-f>] 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 ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt "
+"E<lt>adam@adam-barratt.org.ukE<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> --help|--version"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [options] <control file | package name> [...]"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a package name and/or 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: "
+"apt-get)"
+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 "
+"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 ""
+"If the source package has architecture-specific build dependencies, produce "
+"a package for architecture I<foo>, not for the system architecture. (If the "
+"source package does not have architecture-specific build dependencies, the "
+"package produced is always for the pseudo-architecture B<all>.)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:69
+msgid "B<-B>, B<--build-dep>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:71
+msgid ""
+"Generate a package which only depends on the source package's Build-Depends "
+"dependencies."
+msgstr ""
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:74
+msgid "B<-A>, B<--build-indep>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:76
+msgid ""
+"Generate a package which only depends on the source package's "
+"Build-Depends-Indep dependencies."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:91
+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:94 ../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/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: =head1
+#: ../scripts/namecheck.pl:24
+msgid "HOMEPAGE"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "The most recent version of this script may be found here:"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:28
+msgid "http://mybin.repository.steve.org.uk/?raw-file/tip/namecheck"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:38
+msgid "Copyright (c) 2008 by Steve Kemp.  All rights reserved."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/namecheck.pl:40
+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:16
+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 .dsc and any corresponding tar and 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:21
+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:22
+#, no-wrap
+msgid "B<--new>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:26
+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: TP
+#: ../scripts/nmudiff.1:26
+#, no-wrap
+msgid "B<--old>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:31
+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: TP
+#: ../scripts/nmudiff.1:31
+#, no-wrap
+msgid "B<--mutt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:36
+msgid ""
+"Use B<mutt>(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: TP
+#: ../scripts/nmudiff.1:36
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:41
+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:41
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:51
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will be interpreted by the shell.  Default is I</usr/sbin/sendmail>.  The "
+"I<-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 I<-t> option, this must be included in the I<SENDMAILCMD>, for "
+"example: --sendmail=\"/usr/sbin/mymailer -t\".  This can also be set using "
+"the devscripts configuration files; see below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:51
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:59
+msgid ""
+"If using the sendmail (B<--no-mutt>) option, then the email to the BTS will "
+"be sent using the name and address in the environment variables DEBEMAIL and "
+"DEBFULLNAME.  If these are not set, then the variables EMAIL and 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:59
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:66
+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 0 indicates that the upload has not "
+"been delayed.  This can also be set using the devscripts configuration "
+"files; see below."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:66
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid "Equivalent to B<--delay 0>."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:85
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:91
+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 \"0\" indicates that the DELAYED queue has not been used."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:91
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:96
+msgid ""
+"Can be \"yes\" (default) or \"no\", and specifies whether to use B<mutt> to "
+"compose and send the message or not, as described above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/nmudiff.1:96
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+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 \"maybe\" (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; "
+"\"yes\", which always creates a new report, or \"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: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:113
+msgid "B<debdiff>(1), B<sensible-editor>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+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: 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] changelog ...>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian 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, --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, --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, --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, --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, --save=file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to \"file\" in postscript format instead of immediately "
+"displaying it."
+msgstr ""
+
+#. type: TP
+#: ../scripts/plotchangelog.1:75
+#, no-wrap
+msgid "B<-u, --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 \"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, --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 "B<changelog ...>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The changelog files to graph. If multiple files are specified they will all "
+"be display 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 \"-l "
+"-b\".  Do not include \"-g\" or \"--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> [options] I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [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 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 "
+"http://www.debian.org/doc/developers-reference/ch-resources#s-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 [inclusion options] [--debtags [tag[,tag ...]] [--popcon] "
+"[package ...]>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help|--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<~/.devscripts_cache> 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<~/.devscripts_cache> 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:183
+msgid "rmadison -- Remotely query the Debian archive database about packages"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:189
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:195
+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<http://qa.debian.org/madison.php> provides that service without "
+"requiring ssh access to ftp-master.debian.org or the mirror on "
+"ries.debian.org. This script, B<rmadison>, is a command line frontend to "
+"this CGI."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:206
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:208
+msgid "only show info for ARCH(s)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:210
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:212
+msgid "only show info for binary TYPE"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:214
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:216
+msgid "only show info for COMPONENT(s)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:218
+msgid "B<-g>, B<--greaterorequal>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:220
+msgid "show buildd 'dep-wait pkg >= {highest version}' info"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:222
+msgid "B<-G>, B<--greaterthan>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:224
+msgid "show buildd 'dep-wait pkg >> {highest version}' info"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:228
+msgid "show this help and exit"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:230
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:232
+msgid "only show info for this suite"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:234
+msgid "B<-S>, B<--source-and-binary>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:236
+msgid "show info for the binary children of source pkgs"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:238
+msgid "B<-t>, B<--time>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:240
+msgid "show projectb snapshot and reload time (not supported by all archives)"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:242
+msgid "B<-u>, B<--url=>I<URL>[B<,>I<URL...>]"
+msgstr ""
+
+#. type: verbatim
+#: ../scripts/rmadison.pl:244
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> or B<qa> http://qa.debian.org/madison.php (the default)\n"
+" B<bpo> http://backports.debian.org/cgi-bin/madison.cgi\n"
+" B<debug> http://debug.debian.net/cgi-bin/madison.cgi\n"
+" B<ubuntu> http://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:250
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:255
+msgid "show version and exit"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:259
+msgid "don't read the devscripts configuration files"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:263
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g.  "
+"--architecture=m68k,i386"
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:276
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:278
+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:281
+msgid ""
+"Multiple shorthand entries may be specified by using multiple "
+"B<RMADISON_URL_MAP_*> variables."
+msgstr ""
+
+#. type: =item
+#: ../scripts/rmadison.pl:284
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:286
+msgid "Set the default URL to use unless overridden by a command line option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:292
+msgid ""
+"B<dak ls> also supports B<-r>, B<--regex> to treat I<PACKAGE> as a "
+"regex. Since that can easily DoS the database (\"-r .\"), this option is not "
+"supported by the CGI and rmadison."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:296
+msgid "B<dak ls> was formerly called B<madison>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:298
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, s, S, t, and package. The parameter text is passed "
+"to enable plain-text output."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:304
+msgid "madison-lite(1), dak(1)."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/rmadison.pl:308
+msgid ""
+"rmadison and http://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/svnpath.pl:5
+msgid "svnpath - output svn url with support for tags and branches"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:9
+msgid "svnpath"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "svnpath tags"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "svnpath branches"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "svnpath trunk"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "svnpath is intended to be run in a subversion working copy."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, 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, 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 \"trunk\", \"tags\", or "
+"\"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 "
+"~/.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:95
+msgid "GPL version 2 or later"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/svnpath.pl:99
+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> [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: =item
+#: ../scripts/tagpending.pl:98
+msgid "-n, --noact"
+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 "-s, --silent"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:106
+msgid "-v, --verbose"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:108
+msgid "List each bug checked and tagged in turn."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:110
+msgid "-f, --force"
+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 "--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 --to, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:122
+msgid "--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 "-c, --confirm"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:128
+msgid "Tag bugs as both confirmed and pending."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:130
+msgid "-t, --to <version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than <version>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to dpkg-parsechangelog's -v option."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when --noact "
+"was used, prompt for confirmation before sending it."
+msgstr ""
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "-w, --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:433
+msgid ""
+"This program is Copyright 2008 by Adam D. Barratt "
+"<adam@adam-barratt.org.uk>."
+msgstr ""
+
+#. type: textblock
+#: ../scripts/tagpending.pl:436
+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|--version>"
+msgstr ""
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid "B<transition-check> [B<-f|--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 .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: TP
+#: ../scripts/transition-check.pl:61 ../scripts/uscan.1:502 ../scripts/wnpp-check.1:26
+#, no-wrap
+msgid "0"
+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 <adam@adam-barratt.org.uk>, all "
+"rights reserved."
+msgstr ""
+
+#. type: TH
+#: ../scripts/uscan.1:1
+#, no-wrap
+msgid "USCAN"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:4
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:6
+msgid "B<uscan> [I<options>] [I<path-to-debian-source-packages> ...]"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:16
+msgid ""
+"B<uscan> scans the given directories (or the current directory if none are "
+"specified) and all of their subdirectories for packages containing a control "
+"file I<debian/watch>.  Parameters are then read from those control files and "
+"upstream ftp or http sites are inspected for newly available updates (as "
+"compared with the upstream version number retrieved from the "
+"I<debian/changelog> file in the same directory).  The newest updates are "
+"retrieved (as determined by their version numbers) and if specified in the "
+"watchfile, a program may then be executed on the newly downloaded source."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:21
+msgid ""
+"The traditional I<debian/watch> files can still be used, but the current "
+"format offers both simpler and more flexible services.  We do not describe "
+"the old format here; for their documentation, see the source code for uscan."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uscan.1:22
+#, no-wrap
+msgid "FORMAT of debian/watch files"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:28
+msgid ""
+"The following demonstrates the type of entries which can appear in a "
+"I<debian/watch> file.  Obviously, not all of these would appear in one such "
+"file; usually, one would have one line for the current package."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:33
+#, no-wrap
+msgid ""
+"# format version number, currently 3; this line is compulsory!\n"
+"version=3\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:35
+#, no-wrap
+msgid "# Line continuations are performed with \\e\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:40
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site:\n"
+"# Full-site-with-pattern  [Version  [Action]]\n"
+"ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.*)\\e.tar\\e.gz \\e\n"
+"  debian  uupdate\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:44
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site with regex special characters in\n"
+"# the filename part\n"
+"ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\\e+\\e+-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:47
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site with directory pattern matching\n"
+"ftp://ftp.nessus.org/pub/nessus/nessus-([\\ed\\e.]+)/src/nessus-core-([\\ed\\e.]+)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:51
+#, no-wrap
+msgid ""
+"# This can be used if you want to override the PASV setting\n"
+"# for a specific site\n"
+"# opts=pasv ftp://.../...\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:57
+#, no-wrap
+msgid ""
+"# This is one format for an HTTP site, which is the same\n"
+"# as the FTP format.  uscan starts by downloading the homepage,\n"
+"# obtained by removing the last component of the URL; in this case,\n"
+"# http://www.cpan.org/modules/by-module/Text/\n"
+"http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:63
+#, no-wrap
+msgid ""
+"# This is a variant HTTP format which allows direct specification of\n"
+"# the homepage:\n"
+"# Homepage  Pattern  [Version  [Action]]\n"
+"http://www.dataway.ch/~lukasl/amph/amph.html \\e\n"
+"  files/amphetamine-([\\ed\\e.]*).tar.bz2\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:70
+#, no-wrap
+msgid ""
+"# This one shows that recursive directory scanning works, in either of\n"
+"# two forms, as long as the website can handle requests of the form\n"
+"# http://site/inter/mediate/dir/\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/ \\e\n"
+"  Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:75
+#, no-wrap
+msgid ""
+"# qa.debian.org runs a redirector which allows a simpler form of URL\n"
+"# for SourceForge based projects. The format below will automatically\n"
+"# be rewritten to use the redirector.\n"
+"http://sf.net/audacity/audacity-src-(.+)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:79
+#, no-wrap
+msgid ""
+"# githubredir.debian.net is a redirector for GitHub projects\n"
+"# It can be used as following:\n"
+"http://githubredir.debian.net/github/E<lt>userE<gt>/E<lt>projectE<gt> "
+"(.*).tar.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:84
+#, no-wrap
+msgid ""
+"# This is the format for a site which has funny version numbers;\n"
+"# the parenthesised groups will be joined with dots to make a\n"
+"# sanitised version number\n"
+"http://www.site.com/pub/foobar/foobar_v(\\ed+)_(\\ed+)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:92
+#, no-wrap
+msgid ""
+"# This is another way of handling site with funny version numbers,\n"
+"# this time using mangling.  (Note that multiple groups will be\n"
+"# concatenated before mangling is performed, and that mangling will\n"
+"# only be performed on the basename version number, not any path\n"
+"# version numbers.)\n"
+"opts=\"uversionmangle=s/^/0.0./\" \\e\n"
+"  "
+"ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:97
+#, no-wrap
+msgid ""
+"# Similarly, the upstream part of the Debian version number can be\n"
+"# mangled:\n"
+"opts=dversionmangle=s/\\e.dfsg\\e.\\ed+$// \\e\n"
+"  http://some.site.org/some/path/foobar-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:110
+#, no-wrap
+msgid ""
+"# The filename is found by taking the last component of the URL and\n"
+"# removing everything after any '?'.  If this would not make a usable\n"
+"# filename, use filenamemangle.  For example,\n"
+"# E<lt>A "
+"href=\"http://foo.bar.org/download/?path=&download=foo-0.1.1.tar.gz\"E<gt>\n"
+"# could be handled as:\n"
+"# opts=filenamemangle=s/.*=(.*)/$1/ \\e\n"
+"#     http://foo.bar.org/download/\\e?path=&download=foo-(.*)\\e.tar\\e.gz\n"
+"# \n"
+"# E<lt>A "
+"href=\"http://foo.bar.org/download/?path=&download_version=0.1.1\"E<gt>\n"
+"# could be handled as:\n"
+"# opts=filenamemangle=s/.*=(.*)/foo-$1\\e.tar\\e.gz/ \\e\n"
+"#    http://foo.bar.org/download/\\e?path=&download_version=(.*)\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:118
+#, no-wrap
+msgid ""
+"# The option downloadurlmangle can be used to mangle the URL of the file\n"
+"# to download.  This can only be used with http:// URLs.  This may be\n"
+"# necessary if the link given on the webpage needs to be transformed in\n"
+"# some way into one which will work automatically, for example:\n"
+"# opts=downloadurlmangle=s/prdownload/download/ \\e\n"
+"#   http://developer.berlios.de/project/showfiles.php?group_id=2051 \\e\n"
+"#   http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:124
+msgid ""
+"Comment lines may be introduced with a `#' character.  Continuation lines "
+"may be indicated by terminating a line with a backslash character."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:128
+msgid ""
+"The first (non-comment) line of the file must begin `version=3'.  This "
+"allows for future extensions without having to change the name of the file."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:133
+msgid ""
+"There are two possibilities for the syntax of an HTTP watchfile line, and "
+"only one for an FTP line.  We begin with the common (and simpler)  format.  "
+"We describe the optional opts=... first field below, and ignore it in what "
+"follows."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:150
+msgid ""
+"The first field gives the full pattern of URLs being searched for.  In the "
+"case of an FTP site, the directory listing for the requested directory will "
+"be requested and this will be scanned for files matching the basename "
+"(everything after the trailing `/').  In the case of an HTTP site, the URL "
+"obtained by stripping everything after the trailing slash will be downloaded "
+"and searched for hrefs (links of the form E<lt>a href=...E<gt>) to either "
+"the full URL pattern given, or to the absolute part (everything without the "
+"http://host.name/ part), or to the basename (just the part after the final "
+"`/').  Everything up to the final slash is taken as a verbatim URL, as long "
+"as there are no parentheses (`(' and ')') in this part of the URL: if it "
+"does, the directory name will be matched in the same way as the final "
+"component of the URL as described below.  (Note that regex metacharacters "
+"such as `+' are regarded literally unless they are in a path component "
+"containing parentheses; see the Atlas-C++ example above.  Also, the "
+"parentheses must match within each path component.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:159
+msgid ""
+"The pattern (after the final slash) is a Perl regexp (see B<perlre>(1) for "
+"details of these).  You need to make the pattern so tight that it matches "
+"only the upstream software you are interested in and nothing else.  Also, "
+"the pattern will be anchored at the beginning and at the end, so it must "
+"match the full filename.  (Note that for HTTP URLs, the href may include the "
+"absolute path or full site and path and still be accepted.)  The pattern "
+"must contain at least one Perl group as explained in the next paragraph."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:170
+msgid ""
+"Having got a list of `files' matching the pattern, their version numbers are "
+"extracted by treating the part matching the Perl regexp groups, demarcated "
+"by `(...)', joining them with `.' as a separator, and using the result as "
+"the version number of the file.  The version number will then be mangled if "
+"required by the uversionmangle option described below.  Finally, the file "
+"versions are then compared to find the one with the greatest version number, "
+"as determined by B<dpkg --compare-versions>.  Note that if you need Perl "
+"groups which are not to be used in the version number, either use `(?:...)' "
+"or use the uversionmangle option to clean up the mess!"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:189
+msgid ""
+"The current (upstream) version can be specified as the second parameter in "
+"the watchfile line.  If this is I<debian> or absent, then the current Debian "
+"version (as determined by I<debian/changelog>) is used to determine the "
+"current upstream version.  The current upstream version may also be "
+"specified by the command-line option B<--upstream-version>, which specifies "
+"the upstream version number of the currently installed package (i.e., the "
+"Debian version number without epoch and Debian revision).  The upstream "
+"version number will then be mangled using the dversionmangle option if one "
+"is specified, as described below.  If the newest version available is newer "
+"than the current version, then it is downloaded into the parent directory, "
+"unless the B<--report> or --report-status option has been used.  Once the "
+"file has been downloaded, then a symlink to the file is made from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> if the file has a "
+"I<.tar.gz> or a I<.tgz> suffix and from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.bz2> if the file has a "
+"I<.tar.bz2> or a I<.tbz> or I<.tbz2> suffix."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:192
+msgid ""
+"Finally, if a third parameter (an action) is given in the watchfile line, "
+"this is taken as the name of a command, and the command"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:194
+#, no-wrap
+msgid "    I<command >B<--upstream-version>I< version filename>\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:203
+msgid ""
+"is executed, using either the original file or the symlink name.  A common "
+"such command would be B<uupdate>(1).  (Note that the calling syntax was "
+"slightly different when using watchfiles without a `version=...' line; there "
+"the command executed was `command filename version'.)  If the command is "
+"B<uupdate>, then the B<--no-symlink> option is given to B<uupdate> as a "
+"first option, since any requested symlinking will already be done by "
+"B<uscan>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:219
+msgid ""
+"The alternative version of the watchfile syntax for HTTP URLs is as "
+"follows.  The first field is a homepage which should be downloaded and then "
+"searched for hrefs matching the pattern given in the second field.  (Again, "
+"this pattern will be anchored at the beginning and the end, so it must match "
+"the whole href.  If you want to match just the basename of the href, you can "
+"use a pattern like \".*/name-(.*)\\e.tar\\e.gz\" if you know that there is a "
+"full URL, or better still: \"(?:.*/)?name-(.*)\\e.tar\\e.gz\" if there may "
+"or may not be.  Note the use of (?:...) to avoid making a backreference.)  "
+"If any of the hrefs in the homepage which match the (anchored) pattern are "
+"relative URLs, they will be taken as being relative to the base URL of the "
+"homepage (i.e., with everything after the trailing slash removed), or "
+"relative to the base URL specified in the homepage itself with a E<lt>base "
+"href=\"...\"E<gt> tag.  The third and fourth fields are the version number "
+"and action fields as before."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uscan.1:219
+#, no-wrap
+msgid "PER-SITE OPTIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:225
+msgid ""
+"A watchfile line may be prefixed with `opts=I<options>', where I<options> is "
+"a comma-separated list of options.  The whole I<options> string may be "
+"enclosed in double quotes, which is necessary if I<options> contains any "
+"spaces.  The recognised options are as follows:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:225
+#, no-wrap
+msgid "B<active> and B<passive> (or B<pasv>)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:230
+msgid ""
+"If used on an FTP line, these override the choice of whether to use PASV "
+"mode or not, and force the use of the specified mode for this site."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:230
+#, no-wrap
+msgid "B<uversionmangle=>I<rules>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:237
+msgid ""
+"This is used to mangle the upstream version number as matched by the "
+"ftp://... or http:// rules as follows.  First, the I<rules> string is split "
+"into multiple rules at every `;'.  Then the upstream version number is "
+"mangled by applying I<rule> to the version, in a similar way to executing "
+"the Perl command:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:239
+#, no-wrap
+msgid "    $version =~ I<rule>;\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:244
+msgid ""
+"for each rule.  Thus, suitable rules might be `s/^/0./' to prepend `0.' to "
+"the version number and `s/_/./g' to change underscores into periods.  Note "
+"that the I<rules> string may not contain commas; this should not be a "
+"problem."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:249
+msgid ""
+"I<rule> may only use the 's', 'tr' and 'y' operations.  When the 's' "
+"operation is used, only the 'g', 'i' and 'x' flags are available and I<rule> "
+"may not contain any expressions which have the potential to execute code "
+"(i.e. the (?{}) and (??{}) constructs are not supported)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:249
+#, no-wrap
+msgid "B<dversionmangle=>I<rules>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:257
+msgid ""
+"This is used to mangle the Debian version number of the currently installed "
+"package in the same way as the B<uversionmangle> option.  Thus, a suitable "
+"rule might be `s/\\e.dfsg\\e.\\ed+$//' to remove a `.dfsg.1' suffix from the "
+"Debian version number, or to handle `.pre6' type version numbers.  Again, "
+"the I<rules> string may not contain commas; this should not be a problem."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:257
+#, no-wrap
+msgid "B<versionmangle=>I<rules>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:262
+msgid ""
+"This is a syntactic shorthand for "
+"B<uversionmangle=>I<rules>B<,dversionmangle=>I<rules>B<, applying the same "
+"rules to both the upstream and Debian version numbers.>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:262
+#, no-wrap
+msgid "B<filenamemangle=>I<rules>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:268
+msgid ""
+"This is used to mangle the filename with which the downloaded file will be "
+"saved, and is parsed in the same way as the B<uversionmangle> option.  "
+"Examples of its use are given in the examples section above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:268
+#, no-wrap
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:276
+msgid ""
+"This is used to mangle the URL to be used for the download.  The URL is "
+"first computed based on the homepage downloaded and the pattern matched, "
+"then the version number is determined from this URL.  Finally, any rules "
+"given by this option are applied before the actual download attempt is "
+"made. An example of its use is given in the examples section above."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:291
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for I<debian/changelog> and "
+"I<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 I<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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and their "
+"corresponding command-line options B<--check-dirname-level> and "
+"B<--check-dirname-regex>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:302
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>, that is, the directory containing "
+"I<debian/changelog> is not the directory from which B<uscan> was invoked.  "
+"This is the default behaviour."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:320
+msgid "This script will perform a fully automatic upstream update."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:328
+#, no-wrap
+msgid ""
+"#!/bin/sh -e\n"
+"# called with '--upstream-version' E<lt>versionE<gt> E<lt>fileE<gt>\n"
+"uupdate \"$@\"\n"
+"package=`dpkg-parsechangelog | sed -n 's/^Source: //p'`\n"
+"cd ../$package-$2\n"
+"debuild\n"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:333
+msgid ""
+"Note that we don't call B<dupload> or B<dput> automatically, as the "
+"maintainer should perform sanity checks on the software before uploading it "
+"to Debian."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:334
+#, no-wrap
+msgid "B<--report, --no-download>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:337
+msgid "Only report about available newer versions but do not download anything."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:337
+#, no-wrap
+msgid "B<--report-status>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:341
+msgid ""
+"Report on the status of all packages, even those which are up-to-date, but "
+"do not download anything."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:341
+#, no-wrap
+msgid "B<--download>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:344
+msgid "Report and download.  (This is the default behaviour.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:344
+#, no-wrap
+msgid "B<--destdir>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:347
+msgid "Path of directory to which to download."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:347
+#, no-wrap
+msgid "B<--force-download>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:350
+msgid ""
+"Download upstream even if up to date (will not overwrite local files, "
+"however)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:350
+#, no-wrap
+msgid "B<--pasv>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:353
+msgid "Force PASV mode for FTP connections."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:353
+#, no-wrap
+msgid "B<--no-pasv>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:356
+msgid "Do not use PASV mode for FTP connections."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:356
+#, no-wrap
+msgid "B<--timeout> I<N>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:359
+msgid "Set timeout to N seconds (default 20 seconds)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:359
+#, no-wrap
+msgid "B<--symlink>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:365
+msgid ""
+"Make orig.tar.gz symlinks to any downloaded files if their extensions are "
+"I<.tar.gz> or I<.tgz>, and similarly for to orig.tar.bz2 for the suffixes "
+"I<.tar.gz>, I<.tbz> and I<.tbz2>.  (This is the default behaviour.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:365
+#, no-wrap
+msgid "B<--rename>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:370
+msgid ""
+"Instead of symlinking, rename the downloaded files to their Debian "
+"orig.tar.gz names if their extensions are I<.tar.gz> or I<.tgz>, and "
+"similarly for tar.bz2 files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:370
+#, no-wrap
+msgid "B<--repack>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:381
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar or zip archive, repack "
+"it to a gzip tar archive, which is still currently required as a member of a "
+"Debian source package. Does nothing if the downloaded archive is not an lzma "
+"tar archive, xz tar archive, bzip tar archive or a zip archive (i.e. it "
+"doesn't match a .tlz, .tar.lzma, .txz, .tar.xz \\^.tbz, .tbz2, .tar.bz2 or "
+".zip extension). The unzip package must be installed in order to repack .zip "
+"archives, the lzma package must be installed to repack lzma tar archives, "
+"and the xz-utils package must be installed to repack xz tar archives."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:381 ../scripts/uupdate.1:74
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:384
+msgid "Don't make these symlinks and don't rename the files."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:384
+#, no-wrap
+msgid "B<--dehs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:387
+msgid "Use an XML format for output, as required by the DEHS system."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:387
+#, no-wrap
+msgid "B<--no-dehs>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:390
+msgid "Use the traditional uscan output format.  (This is the default behaviour.)"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:399
+msgid ""
+"Specify the name of the package to check for rather than examining "
+"I<debian/changelog>; this requires the B<--upstream-version> (unless a "
+"version is specified in the watchfile)  and B<--watchfile> options as well.  "
+"Furthermore, no directory scanning will be done and nothing will be "
+"downloaded.  This option is probably most useful in conjunction with the "
+"DEHS system (and B<--dehs>)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:399
+#, no-wrap
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:404
+msgid ""
+"Specify the current upstream version rather than examine the watchfile or "
+"changelog to determine it.  This is ignored if a directory scan is being "
+"performed and more than one watchfile is found."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:404
+#, no-wrap
+msgid "B<--watchfile> I<watchfile>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:411
+msgid ""
+"Specify the 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 I<debian/changelog> can "
+"be found simply by stepping up through the tree)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:411
+#, no-wrap
+msgid "B<--download-version> I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:415
+msgid ""
+"Specify the version which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:415
+#, no-wrap
+msgid "B<--download-current-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:418
+msgid "Download the currently packaged version"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:421
+msgid "Give verbose output."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:421
+#, no-wrap
+msgid "B<--no-verbose>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:424
+msgid "Don't give verbose output.  (This is the default behaviour.)"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:424
+#, no-wrap
+msgid "B<--debug>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:427
+msgid "Dump the downloaded web pages to stdout for debugging your watch file."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:435
+#, no-wrap
+msgid "B<--user-agent>, B<--useragent>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:438
+msgid "Override the default user agent header."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:445
+msgid "Give brief usage information."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:455
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.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 recognised "
+"variables are:"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:455
+#, no-wrap
+msgid "B<USCAN_DOWNLOAD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:460
+msgid ""
+"If this is set to I<no>, then newer upstream files will not be downloaded; "
+"this is equivalent to the B<--report> or B<--no-download> options."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:460
+#, no-wrap
+msgid "B<USCAN_PASV>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:466
+msgid ""
+"If this is set to I<yes> or I<no>, this will force FTP connections to use "
+"PASV mode or not to, respectively.  If this is set to I<default>, then "
+"Net::FTP(3) make the choice (primarily based on the FTP_PASSIVE environment "
+"variable)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:466
+#, no-wrap
+msgid "B<USCAN_TIMEOUT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:470
+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: TP
+#: ../scripts/uscan.1:470
+#, no-wrap
+msgid "B<USCAN_SYMLINK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:477
+msgid ""
+"If this is set to I<no>, then a pkg_version.orig.tar.{gz|bz2} symlink will "
+"not be made (equivalent to the B<--no-symlink> option).  If it is set to "
+"I<yes> or I<symlink>, then the symlinks will be made.  If it is set to "
+"I<rename>, then the files are renamed (equivalent to the B<--rename> "
+"option)."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:477
+#, no-wrap
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:481
+msgid ""
+"If this is set to I<yes>, then DEHS-style output will be used.  This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:481
+#, no-wrap
+msgid "B<USCAN_VERBOSE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:485
+msgid ""
+"If this is set to I<yes>, then verbose output will be given.  This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:485
+#, no-wrap
+msgid "B<USCAN_USER_AGENT>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:489
+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: TP
+#: ../scripts/uscan.1:489
+#, no-wrap
+msgid "B<USCAN_DESTDIR>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:493
+msgid ""
+"If set, the downloaded files will be placed in this directory.  This is "
+"equivalent to the B<--destdir> option."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:493
+#, no-wrap
+msgid "B<USCAN_REPACK>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:498
+msgid ""
+"If this is set to I<yes>, then after having downloaded a bzip tar, lzma tar, "
+"xz tar, or zip archive, B<uscan> will repack it to a gzip tar.  This is "
+"equivalent to the B<--repack> option."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:502
+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: Plain text
+#: ../scripts/uscan.1:506
+msgid ""
+"Either B<--help> or B<--version> was used, or for some watchfile which was "
+"examined, a newer upstream version was located."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:510
+msgid "No newer upstream versions were located for any of the watchfiles examined."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uscan.1:510
+#, no-wrap
+msgid "HISTORY AND UPGRADING"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:514
+msgid ""
+"This section briefly describes the backwards-incompatible watchfile features "
+"which have been added in each watchfile version, and the first version of "
+"the B<devscripts> package which understood them."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:514
+#, no-wrap
+msgid "I<Pre-version 2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:519
+msgid ""
+"The watchfile syntax was significantly different in those days.  Don't use "
+"it.  If you are upgrading from a pre-version 2 watchfile, you are advised to "
+"read this manpage and to start from scratch."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:519
+#, no-wrap
+msgid "I<Version 2>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:523
+msgid ""
+"devscripts version 2.6.90: The first incarnation of the current style of "
+"watchfiles."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uscan.1:523
+#, no-wrap
+msgid "I<Version 3>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:529
+msgid ""
+"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: Plain text
+#: ../scripts/uscan.1:535
+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 "
+"behaviour, change the non-version-number groups to be (?:...) instead of a "
+"plain (...) group."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:541
+msgid "B<dpkg>(1), B<perlre>(1), B<uupdate>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uscan.1:546
+msgid ""
+"The original version of B<uscan> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>.  Significant improvements, changes and "
+"bugfixes were made by Julian Gilbey E<lt>jdg@debian.orgE<gt>.  HTTP support "
+"was added by Piotr Roszatycki E<lt>dexter@debian.orgE<gt>.  The program was "
+"rewritten in Perl by Julian Gilbey."
+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<--patch>|B<-p> I<patch_file>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:20
+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:30
+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:40
+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:45
+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:52
+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:54
+msgid "This is a summary of what was explained above."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:54
+#, no-wrap
+msgid "B<--upstream-version >I<version>, B<-v >I<version>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:57
+msgid "Specify the version number of the upstream package explicitly."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:57
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:61
+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:61
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:66
+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:66
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:69
+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:69
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:74
+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:78
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a "
+"symlink."
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:94
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+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:98
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:102
+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:102
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:105
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uupdate.1:105
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr ""
+
+#. type: TP
+#: ../scripts/uupdate.1:106 ../scripts/uupdate.1:139
+#, no-wrap
+msgid "B<Figure out new version number>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:112
+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:112
+#, no-wrap
+msgid "B<Create the .orig.tar.gz archive>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:117
+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:117
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:122
+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:122 ../scripts/uupdate.1:150
+#, no-wrap
+msgid "B<Patching>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:130
+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:130 ../scripts/uupdate.1:162
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:134 ../scripts/uupdate.1:166
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release''."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:138 ../scripts/uupdate.1:170
+msgid ""
+"When used on Ubuntu systems, B<lsb_release> detection is used to set the "
+"Debian revision to ``0ubuntu1''.  You may change I<debian/changelog> "
+"manually afterwards."
+msgstr ""
+
+#. type: SH
+#: ../scripts/uupdate.1:138
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:145
+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:145
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:150
+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:162
+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:177
+msgid ""
+"B<debuild>(1), B<fakeroot>(1), B<patch>(1), I<The Debian Policy Manual> and "
+"B<devscripts.conf>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/uupdate.1:180
+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
+#: ../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>] [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: TP
+#: ../scripts/whodepends.1:11
+#, no-wrap
+msgid "B<--help, -h>"
+msgstr ""
+
+#. type: TP
+#: ../scripts/whodepends.1:14
+#, no-wrap
+msgid "B<--version, -v>"
+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) 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:33
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings "
+"I</usr/share/keyrings/debian-keyring.{gpg,pgp}> 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:33
+#, no-wrap
+msgid "B<--date>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:36
+msgid "Show the date of the upload alongside the uploader's details"
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:36
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:40
+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:56
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:60
+msgid ""
+"Show the date of the upload alongside the uploader's details.  By default, "
+"this is \"no\"."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:60
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:64
+msgid ""
+"The maximum number of uploads to display for each package.  By default, this "
+"is 3."
+msgstr ""
+
+#. type: TP
+#: ../scripts/who-uploads.1:64
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:71
+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,pgp}> and "
+"I</usr/share/keyrings/debian-maintainers.gpg>."
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:74
+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: 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 [--diff] [package ...]>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help|--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<~/.devscripts_cache> 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:25
+msgid "http://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 package [...]>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help|--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: Plain text
+#: ../scripts/wnpp-check.1:29
+msgid "None of the packages supplied has an open ITP or RFP"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:33
+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:39
+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
+#: ../scripts/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.conf.5:4
+msgid "devscripts.conf - configuration file for the devscripts package"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/devscripts.conf.5:54
+msgid ""
+"These 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
+#: ../scripts/devscripts.conf.5:58
+msgid "B<devscripts>(1)  and I</usr/share/doc/devscripts/README.gz.>"
+msgstr ""
+
+#. type: Plain text
+#: ../scripts/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 (file)
index 0000000..ff7a6a3
--- /dev/null
@@ -0,0 +1,19295 @@
+# French translation of devscripts manual pages.
+# Copyright (C) 2004-2010 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.
+msgid ""
+msgstr ""
+"Project-Id-Version: devscripts\n"
+"POT-Creation-Date: 2010-09-28 22:34+0000\n"
+"PO-Revision-Date: 2010-10-05 20:35-0400\n"
+"Last-Translator: David Prévot <david@tilapin.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: Lokalize 1.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/debi.1:1 ../scripts/debpkg.1:1 ../scripts/debrelease.1:1
+#: ../scripts/debrsign.1:1 ../scripts/debsign.1:1 ../scripts/debuild.1:1
+#: ../scripts/devscripts.1:1 ../scripts/dpkg-genbuilddeps.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 ../scripts/uscan.1:1
+#: ../scripts/uupdate.1:1 ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../scripts/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/debi.1:1 ../scripts/debpkg.1:1 ../scripts/debrelease.1:1
+#: ../scripts/debrsign.1:1 ../scripts/debsign.1:1 ../scripts/debuild.1:1
+#: ../scripts/devscripts.1:1 ../scripts/dpkg-depcheck.1:1
+#: ../scripts/dpkg-genbuilddeps.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 ../scripts/uscan.1:1 ../scripts/uupdate.1:1
+#: ../scripts/whodepends.1:1 ../scripts/who-uploads.1:1
+#: ../scripts/wnpp-alert.1:1 ../scripts/wnpp-check.1:1
+#: ../scripts/devscripts.conf.5:1
+#, no-wrap
+msgid "DEBIAN"
+msgstr "DEBIAN"
+
+#. type: SH
+#: ../scripts/annotate-output.1:2 ../scripts/archpath.1:2 ../scripts/bts.pl:27
+#: ../scripts/build-rdeps.pl:18 ../scripts/chdist.pl:19
+#: ../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/dcontrol.pl:199 ../scripts/dd-list.1:19
+#: ../scripts/debc.1:2 ../scripts/debchange.1:2 ../scripts/debcheckout.pl:23
+#: ../scripts/debclean.1:2 ../scripts/debcommit.pl:3 ../scripts/debdiff.1:2
+#: ../scripts/debi.1:2 ../scripts/debpkg.1:2 ../scripts/debrelease.1:2
+#: ../scripts/debrsign.1:2 ../scripts/debsign.1:2 ../scripts/debsnap.1:3
+#: ../scripts/debuild.1:2 ../scripts/desktop2menu.pl:24
+#: ../scripts/devscripts.1:2 ../scripts/dget.pl:479
+#: ../scripts/diff2patches.1:2 ../scripts/dpkg-depcheck.1:2
+#: ../scripts/dpkg-genbuilddeps.1:2 ../scripts/dscverify.1:2
+#: ../scripts/getbuildlog.1:2 ../scripts/grep-excuses.1:2
+#: ../scripts/licensecheck.pl:22 ../scripts/list-unreleased.1:2
+#: ../scripts/manpage-alert.1:2 ../scripts/mass-bug.pl:22
+#: ../scripts/mergechanges.1:2 ../scripts/mk-build-deps.pl:24
+#: ../scripts/namecheck.pl:3 ../scripts/nmudiff.1:2
+#: ../scripts/plotchangelog.1:2 ../scripts/pts-subscribe.1:2
+#: ../scripts/rc-alert.1:2 ../scripts/rmadison.pl:181 ../scripts/svnpath.pl:3
+#: ../scripts/tagpending.pl:80 ../scripts/transition-check.pl:23
+#: ../scripts/uscan.1:2 ../scripts/uupdate.1:2 ../scripts/whodepends.1:2
+#: ../scripts/who-uploads.1:2 ../scripts/wnpp-alert.1:2
+#: ../scripts/wnpp-check.1:2 ../scripts/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:151 ../scripts/build-rdeps.pl:22 ../scripts/chdist.pl:23
+#: ../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/dcontrol.pl:203 ../scripts/dd-list.1:22
+#: ../scripts/debc.1:4 ../scripts/debchange.1:4 ../scripts/debcheckout.pl:27
+#: ../scripts/debclean.1:4 ../scripts/debcommit.pl:7 ../scripts/debdiff.1:4
+#: ../scripts/debi.1:4 ../scripts/debpkg.1:4 ../scripts/debrelease.1:4
+#: ../scripts/debrsign.1:4 ../scripts/debsign.1:4 ../scripts/debsnap.1:6
+#: ../scripts/debuild.1:4 ../scripts/desktop2menu.pl:28 ../scripts/dget.pl:483
+#: ../scripts/dpkg-depcheck.1:4 ../scripts/dpkg-genbuilddeps.1:4
+#: ../scripts/dscverify.1:4 ../scripts/getbuildlog.1:4
+#: ../scripts/grep-excuses.1:4 ../scripts/licensecheck.pl:26
+#: ../scripts/list-unreleased.1:4 ../scripts/manpage-alert.1:4
+#: ../scripts/mass-bug.pl:26 ../scripts/mergechanges.1:4
+#: ../scripts/mk-build-deps.pl:28 ../scripts/nmudiff.1:4
+#: ../scripts/plotchangelog.1:4 ../scripts/pts-subscribe.1:4
+#: ../scripts/rc-alert.1:4 ../scripts/rmadison.pl:185 ../scripts/svnpath.pl:7
+#: ../scripts/tagpending.pl:84 ../scripts/transition-check.pl:27
+#: ../scripts/uscan.1:4 ../scripts/uupdate.1:4 ../scripts/whodepends.1:4
+#: ../scripts/who-uploads.1:4 ../scripts/wnpp-alert.1:4
+#: ../scripts/wnpp-check.1:4
+#, 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:155 ../scripts/build-rdeps.pl:26 ../scripts/chdist.pl:27
+#: ../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:7 ../scripts/dcontrol.pl:211 ../scripts/dd-list.1:26
+#: ../scripts/debc.1:6 ../scripts/debchange.1:8 ../scripts/debcheckout.pl:39
+#: ../scripts/debclean.1:6 ../scripts/debcommit.pl:11 ../scripts/debdiff.1:15
+#: ../scripts/debi.1:6 ../scripts/debpkg.1:6 ../scripts/debrelease.1:6
+#: ../scripts/deb-reversion.dbk:82 ../scripts/debrsign.1:7
+#: ../scripts/debsign.1:6 ../scripts/debsnap.1:14 ../scripts/debuild.1:10
+#: ../scripts/desktop2menu.pl:34 ../scripts/devscripts.1:4
+#: ../scripts/dget.pl:493 ../scripts/diff2patches.1:10
+#: ../scripts/dpkg-depcheck.1:6 ../scripts/dpkg-genbuilddeps.1:6
+#: ../scripts/dscverify.1:6 ../scripts/getbuildlog.1:8
+#: ../scripts/grep-excuses.1:6 ../scripts/licensecheck.pl:34
+#: ../scripts/list-unreleased.1:6 ../scripts/manpage-alert.1:8
+#: ../scripts/mass-bug.pl:30 ../scripts/mergechanges.1:6
+#: ../scripts/mk-build-deps.pl:34 ../scripts/nmudiff.1:6
+#: ../scripts/plotchangelog.1:7 ../scripts/pts-subscribe.1:8
+#: ../scripts/rc-alert.1:8 ../scripts/rmadison.pl:193 ../scripts/svnpath.pl:17
+#: ../scripts/tagpending.pl:88 ../scripts/transition-check.pl:33
+#: ../scripts/uscan.1:6 ../scripts/uupdate.1:8 ../scripts/whodepends.1:6
+#: ../scripts/who-uploads.1:6 ../scripts/wnpp-alert.1:8
+#: ../scripts/wnpp-check.1:8 ../scripts/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 courante 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:206
+#: ../scripts/build-rdeps.pl:30 ../scripts/chdist.pl:34
+#: ../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:16 ../scripts/dcontrol.pl:245 ../scripts/dd-list.1:58
+#: ../scripts/debc.1:64 ../scripts/debchange.1:146
+#: ../scripts/debcheckout.pl:67 ../scripts/debclean.1:60
+#: ../scripts/debcommit.pl:19 ../scripts/debdiff.1:50 ../scripts/debi.1:65
+#: ../scripts/debrelease.1:56 ../scripts/deb-reversion.dbk:128
+#: ../scripts/debrsign.1:30 ../scripts/debsign.1:39 ../scripts/debsnap.1:26
+#: ../scripts/debuild.1:219 ../scripts/dget.pl:532
+#: ../scripts/diff2patches.1:16 ../scripts/dpkg-depcheck.1:15
+#: ../scripts/dscverify.1:17 ../scripts/getbuildlog.1:24
+#: ../scripts/grep-excuses.1:13 ../scripts/licensecheck.pl:43
+#: ../scripts/list-unreleased.1:12 ../scripts/manpage-alert.1:14
+#: ../scripts/mass-bug.pl:60 ../scripts/mk-build-deps.pl:44
+#: ../scripts/nmudiff.1:21 ../scripts/plotchangelog.1:43
+#: ../scripts/pts-subscribe.1:18 ../scripts/rc-alert.1:17
+#: ../scripts/rmadison.pl:202 ../scripts/tagpending.pl:94
+#: ../scripts/transition-check.pl:42 ../scripts/uscan.1:333
+#: ../scripts/uupdate.1:52 ../scripts/whodepends.1:10
+#: ../scripts/who-uploads.1:15 ../scripts/wnpp-alert.1:17
+#: ../scripts/wnpp-check.1:16
+#, 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ôle le format d'horodatage, comme pour B<date>(1). « %H:%M:%S » par "
+"défaut."
+
+#. type: =item
+#: ../scripts/annotate-output.1:16 ../scripts/dcontrol.pl:257
+#: ../scripts/debcheckout.pl:92 ../scripts/debsnap.1:47 ../scripts/dget.pl:585
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/getbuildlog.1:25
+#: ../scripts/mk-build-deps.pl:79 ../scripts/rmadison.pl:226
+#, no-wrap
+msgid "B<-h>, B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: Plain text
+#: ../scripts/annotate-output.1:19 ../scripts/debchange.1:359
+#: ../scripts/debclean.1:87 ../scripts/debrelease.1:102
+#: ../scripts/debsign.1:108 ../scripts/dscverify.1:39 ../scripts/nmudiff.1:76
+#: ../scripts/pts-subscribe.1:31 ../scripts/uupdate.1:85
+#: ../scripts/who-uploads.1:47
+msgid "Display a help message and exit successfully."
+msgstr "Affiche un message d'aide et quitte avec succès."
+
+#. type: SH
+#: ../scripts/annotate-output.1:20 ../scripts/uscan.1:318
+#, 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:109
+#: ../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 ""
+"Ceci est malheureusement très difficile à corriger avec la stratégie "
+"d'annotation choisie. Une solution serait de passer à un suivi via 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. Ceci 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:4070
+#: ../scripts/checkbashisms.1:60 ../scripts/cowpoke.1:241
+#: ../scripts/cvs-debc.1:58 ../scripts/cvs-debi.1:62
+#: ../scripts/cvs-debrelease.1:64 ../scripts/cvs-debuild.1:53
+#: ../scripts/dcmd.1:98 ../scripts/dcontrol.pl:290 ../scripts/debc.1:115
+#: ../scripts/debchange.1:435 ../scripts/debcheckout.pl:181
+#: ../scripts/debclean.1:107 ../scripts/debcommit.pl:845
+#: ../scripts/debdiff.1:215 ../scripts/debi.1:122 ../scripts/debrelease.1:132
+#: ../scripts/deb-reversion.dbk:247 ../scripts/debrsign.1:66
+#: ../scripts/debsign.1:140 ../scripts/debsnap.1:91 ../scripts/debuild.1:410
+#: ../scripts/dget.pl:639 ../scripts/diff2patches.1:45
+#: ../scripts/dpkg-depcheck.1:118 ../scripts/dpkg-genbuilddeps.1:30
+#: ../scripts/dscverify.1:73 ../scripts/grep-excuses.1:38
+#: ../scripts/list-unreleased.1:19 ../scripts/nmudiff.1:108
+#: ../scripts/plotchangelog.1:124 ../scripts/pts-subscribe.1:51
+#: ../scripts/rc-alert.1:121 ../scripts/rmadison.pl:302
+#: ../scripts/tagpending.pl:149 ../scripts/uscan.1:535
+#: ../scripts/uupdate.1:170 ../scripts/wnpp-alert.1:29
+#: ../scripts/wnpp-check.1:23 ../scripts/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 soutenu 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:347 ../scripts/checkbashisms.1:62
+#: ../scripts/cowpoke.1:247 ../scripts/cvs-debc.1:64 ../scripts/cvs-debi.1:68
+#: ../scripts/cvs-debrelease.1:69 ../scripts/cvs-debuild.1:59
+#: ../scripts/dcmd.1:101 ../scripts/dcontrol.pl:283 ../scripts/dd-list.1:93
+#: ../scripts/debc.1:120 ../scripts/debchange.1:442
+#: ../scripts/debcheckout.pl:186 ../scripts/debclean.1:111
+#: ../scripts/debcommit.pl:841 ../scripts/debdiff.1:222 ../scripts/debi.1:126
+#: ../scripts/debpkg.1:23 ../scripts/debrelease.1:137
+#: ../scripts/deb-reversion.dbk:292 ../scripts/debrsign.1:71
+#: ../scripts/debsign.1:153 ../scripts/debuild.1:423
+#: ../scripts/desktop2menu.pl:52 ../scripts/dget.pl:631
+#: ../scripts/diff2patches.1:48 ../scripts/dpkg-genbuilddeps.1:36
+#: ../scripts/dscverify.1:78 ../scripts/getbuildlog.1:41
+#: ../scripts/grep-excuses.1:40 ../scripts/licensecheck.pl:121
+#: ../scripts/list-unreleased.1:21 ../scripts/manpage-alert.1:20
+#: ../scripts/mass-bug.pl:521 ../scripts/mergechanges.1:18
+#: ../scripts/mk-build-deps.pl:89 ../scripts/namecheck.pl:30
+#: ../scripts/nmudiff.1:113 ../scripts/plotchangelog.1:126
+#: ../scripts/pts-subscribe.1:56 ../scripts/rc-alert.1:125
+#: ../scripts/rmadison.pl:306 ../scripts/svnpath.pl:97
+#: ../scripts/transition-check.pl:81 ../scripts/uscan.1:541
+#: ../scripts/uupdate.1:177 ../scripts/whodepends.1:19
+#: ../scripts/who-uploads.1:71 ../scripts/wnpp-alert.1:31
+#: ../scripts/wnpp-check.1:33 ../scripts/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<branch>"
+
+#. type: Plain text
+#: ../scripts/archpath.1:12
+msgid "B<archpath> I<branch>--I<version>"
+msgstr "B<archpath> I<branch>--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 courante 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 courante."
+
+#. 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 ""
+"Ceci 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:29
+msgid "bts - developers' command line interface to the BTS"
+msgstr ""
+"bts - Interface en ligne de commande pour le BTS, pour les développeurs"
+
+#. type: textblock
+#: ../scripts/bts.pl:153
+msgid ""
+"B<bts> [options] command [args] [#comment] [.|, command [args] "
+"[#comment]] ..."
+msgstr ""
+"B<bts> [I<options>] I<commande> [I<paramètres>] [I<#commentaire>] [B<.>|B<,> "
+"I<commande> [I<paramètres>] [I<#commentaire>]] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:157
+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 ""
+"Ceci 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 via 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:165
+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:169
+#, 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:173
+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 peuvent être ajoutées à votre convenance "
+"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:179
+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:183
+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. Notez 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:191
+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. 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. Par "
+"exemple (en échappant ce qui doit l'être de manière à ce que B<bts> voie le "
+"commentaire correctement) :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:196
+#, 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:198
+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:201
+#, 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: SVP ajoutez une option --toto\"\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:203
+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 vos "
+"utilisateurs en considération."
+
+#. type: textblock
+#: ../scripts/bts.pl:208
+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:214
+msgid "-o, --offline"
+msgstr "B<-o>, B<--offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:216
+msgid ""
+"Make bts use cached bugs for the 'show' and 'bugs' commands, if a cache is "
+"available for the requested data. See the cache command, below for "
+"information on setting up a cache."
+msgstr ""
+"Faire en sorte que 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:220
+msgid "--online, --no-offline"
+msgstr "B<--online>, B<--no-offline>"
+
+#. type: textblock
+#: ../scripts/bts.pl:222
+msgid ""
+"Opposite of --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:225
+msgid "-n, --no-action"
+msgstr "B<-n>, B<--no-action>"
+
+#. type: textblock
+#: ../scripts/bts.pl:227
+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:229
+msgid "--cache, --no-cache"
+msgstr "B<--cache>, B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/bts.pl:231
+msgid ""
+"Should we attempt to cache new versions of BTS pages when performing show/"
+"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:234
+msgid "--cache-mode={min|mbox|full}"
+msgstr "B<--cache-mode=>{B<min>|B<mbox>|B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:236
+msgid ""
+"When running a B<bts cache> command, should we only mirror the basic bug "
+"(min), or should we also mirror the mbox version (mbox), or should we mirror "
+"the whole thing, including the mbox and the boring attachments to the BTS "
+"bug pages and the acknowledgement emails (full)? Default is 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 mails de confirmation (B<full>). Par défaut, "
+"B<min> est utilisé."
+
+#. type: =item
+#: ../scripts/bts.pl:242
+msgid "--cache-delay=seconds"
+msgstr "B<--cache-delay=>I<secondes>"
+
+#. type: textblock
+#: ../scripts/bts.pl:244
+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:247
+msgid "--mbox"
+msgstr "B<--mbox>"
+
+#. type: textblock
+#: ../scripts/bts.pl:249
+msgid ""
+"Open a mail reader to read the mbox corresponding to a given bug number for "
+"show and 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 show "
+"et bugs."
+
+#. type: =item
+#: ../scripts/bts.pl:252
+msgid "--mailreader=READER"
+msgstr "B<--mailreader=>I<CLIENT_DE_MESSAGERIE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:254
+msgid ""
+"Specify the command to read the mbox.  Must contain a \"%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 'mutt -f %s'.  (Also, %% will be substituted by a single % if "
+"this is needed.)"
+msgstr ""
+"Indiquer la commande pour lire la boîte de messagerie (« mbox »). Doit "
+"contenir une chaîne « %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, « mutt -f %s » sera "
+"utilisé (par ailleurs %% sera remplacé par un simple % si ceci est "
+"nécessaire)."
+
+#. type: =item
+#: ../scripts/bts.pl:260
+msgid "--cc-addr=CC_EMAIL_ADDRESS"
+msgstr "B<--cc-addr=>I<CC_ADRESSES_ÉLECTRONIQUES>"
+
+#. type: textblock
+#: ../scripts/bts.pl:262
+msgid ""
+"Send carbon copies to a list of users. CC_EMAIL_ADDRESS should be a comma-"
+"separated list of emails."
+msgstr ""
+"Envoyer une copie du message à une liste d'utilisateurs. "
+"I<CC_ADRESSES_ÉLECTRONIQUE> doit être une liste d'adresses séparées par des "
+"virgules."
+
+#. type: =item
+#: ../scripts/bts.pl:265
+msgid "--use-default-cc"
+msgstr "B<--use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:267
+msgid ""
+"Add the addresses specified in the configuation file option BTS_DEFAULT_CC "
+"to the list specified using --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:271
+msgid "--no-use-default-cc"
+msgstr "B<--no-use-default-cc>"
+
+#. type: textblock
+#: ../scripts/bts.pl:273
+msgid ""
+"Do not add addresses specified in 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:276 ../scripts/mass-bug.pl:104
+msgid "--sendmail=SENDMAILCMD"
+msgstr "B<--sendmail=>I<COMMANDE_D_ENVOI_DE_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:278
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will not be passed to a shell.  Default is '/usr/sbin/sendmail'.  The -t "
+"option will be automatically added if the command is /usr/sbin/sendmail or /"
+"usr/sbin/exim*.  For other mailers, if they require a -t option, this must "
+"be included in the SENDMAILCMD, for example: --sendmail=\"/usr/sbin/mymailer "
+"-t\""
+msgstr ""
+"Indiquer la commande d'envoi de mail à utiliser. La commande sera séparée à "
+"chaque espace, et non passée à l'interpréteur de commandes. La valeur par "
+"défaut est « /usr/sbin/sendmail ». L'option -t est ajoutée automatiquement "
+"si la commande est /usr/sbin/sendmail ou /usr/sbin/exim*. Pour les autres "
+"logiciels, l'option -t doit être incluse dans I<COMMANDE_D_ENVOI_DE_MESSAGE> "
+"si nécessaire, par exemple : --sendmail=\"/usr/sbin/mymailer -t\""
+
+#. type: =item
+#: ../scripts/bts.pl:285
+msgid "--mutt"
+msgstr "B<--mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:287
+msgid ""
+"Use mutt for sending of mails. Default is not to use 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:290
+msgid ""
+"Note that one of $DEBEMAIL or $EMAIL must be set in the environment in order "
+"to use mutt to send emails."
+msgstr ""
+"Notez que B<$DEBEMAIL> ou B<$EMAIL> doit être configurée dans "
+"l'environnement pour que mutt puisse envoyer des courriers."
+
+#. type: =item
+#: ../scripts/bts.pl:293
+msgid "--no-mutt"
+msgstr "B<--no-mutt>"
+
+#. type: textblock
+#: ../scripts/bts.pl:295
+msgid "Don't use mutt for sending of mails."
+msgstr "Ne pas utiliser B<mutt> pour l'envoi des messages."
+
+#. type: =item
+#: ../scripts/bts.pl:297
+msgid "--smtp-host=SMTPHOST"
+msgstr "B<--smtp-host=>I<SERVEUR_SMTP>"
+
+#. type: textblock
+#: ../scripts/bts.pl:299
+msgid ""
+"Specify an SMTP host.  If given, B<bts> will send mail by talking directly "
+"to this SMTP host rather than by invoking a 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 "
+"sendmail."
+
+#. type: textblock
+#: ../scripts/bts.pl:302
+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:306
+msgid ""
+"Note that one of $DEBEMAIL or $EMAIL must be set in the environment in order "
+"to use direct SMTP connections to send emails."
+msgstr ""
+"Notez que B<$DEBEMAIL> ou B<$EMAIL> doit être configurée dans "
+"l'environnement pour l'envoi de courriers par connexion SMTP directe."
+
+#. type: textblock
+#: ../scripts/bts.pl:309
+msgid ""
+"Note that when sending directly via an SMTP host, specifying addresses in --"
+"cc-addr or BTS_DEFAULT_CC that the SMTP host will not relay will cause the "
+"SMTP host to reject the entire mail."
+msgstr ""
+"Notez 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:313
+msgid ""
+"Note also that the use of the reassign command may, when either interactive "
+"or force-interactive mode is enabled, lead to the automatic addition of a Cc "
+"to $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 ""
+"Notez également que la commande « reassign » peut, quand le mode interactif "
+"ou interactif forcé 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:320
+msgid "--smtp-username=USERNAME, --smtp-password=PASSWORD"
+msgstr ""
+"B<--smtp-username=>I<NOM_UTILISATEUR>, B<--smtp-password=>I<MOT_DE_PASSE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:322
+msgid ""
+"Specify the credentials to use when connecting to the SMTP server specified "
+"by --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:326
+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:329
+msgid "--smtp-helo=HELO"
+msgstr "B<--smtp-helo=>I<HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:331
+msgid ""
+"Specify the name to use in the 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 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:335
+msgid ""
+"Note that some SMTP servers may reject the use of a HELO which either does "
+"not resolve or does not appear to belong to the host using it."
+msgstr ""
+"Notez que certains serveurs SMTP peuvent rejeter l'utilisation d'un 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:338
+msgid "--bts-server"
+msgstr "B<--bts-server>"
+
+#. type: textblock
+#: ../scripts/bts.pl:340
+msgid "Use a debbugs server other than bugs.debian.org."
+msgstr "Utiliser un serveur debbugs autre que bugs.debian.org."
+
+#. type: =item
+#: ../scripts/bts.pl:342
+msgid "-f, --force-refresh"
+msgstr "B<-f>, B<--force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:344
+msgid ""
+"Download a bug report again, even if it does not appear to have changed "
+"since the last cache command.  Useful if a --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 de mise en 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:350
+msgid "--no-force-refresh"
+msgstr "B<--no-force-refresh>"
+
+#. type: textblock
+#: ../scripts/bts.pl:352
+msgid "Suppress any configuration file --force-refresh option."
+msgstr ""
+"Ne tenir compte d'aucune option B<--force-refresh> venant d'un fichier de "
+"configuration."
+
+#. type: =item
+#: ../scripts/bts.pl:354
+msgid "--only-new"
+msgstr "B<--only-new>"
+
+#. type: textblock
+#: ../scripts/bts.pl:356
+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:359
+msgid "--include-resolved"
+msgstr "B<--include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:361
+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:364
+msgid "--no-include-resolved"
+msgstr "B<--no-include-resolved>"
+
+#. type: textblock
+#: ../scripts/bts.pl:366
+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:369
+msgid "--no-ack"
+msgstr "B<--no-ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:371
+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. Notez 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:375
+msgid "--ack"
+msgstr "B<--ack>"
+
+#. type: textblock
+#: ../scripts/bts.pl:377
+msgid "Do not suppress acknowledgement mails.  This is the default behaviour."
+msgstr ""
+"Ne pas supprimer les courriers d'acquittement. C'est le comportement par "
+"défaut."
+
+#. type: =item
+#: ../scripts/bts.pl:379 ../scripts/tagpending.pl:136
+msgid "-i, --interactive"
+msgstr "B<-i>, B<--interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:381
+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:384
+msgid "--force-interactive"
+msgstr "B<--force-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:386
+msgid ""
+"Similar to --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:389
+msgid "--no-interactive"
+msgstr "B<--no-interactive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:391
+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:393
+msgid "-q, --quiet"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:395
+msgid ""
+"When running 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: =item
+#: ../scripts/bts.pl:399 ../scripts/mass-bug.pl:113
+msgid "--no-conf, --noconf"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: Plain text
+#: ../scripts/bts.pl:401 ../scripts/cvs-debrelease.1:61 ../scripts/debc.1:89
+#: ../scripts/debchange.1:351 ../scripts/debclean.1:81
+#: ../scripts/debdiff.1:155 ../scripts/debi.1:96 ../scripts/debrelease.1:99
+#: ../scripts/debsign.1:105 ../scripts/debuild.1:225
+#: ../scripts/dpkg-depcheck.1:96 ../scripts/dscverify.1:28
+#: ../scripts/grep-excuses.1:18 ../scripts/mass-bug.pl:115
+#: ../scripts/nmudiff.1:73 ../scripts/uscan.1:442 ../scripts/uupdate.1:82
+#: ../scripts/who-uploads.1:44
+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:755 ../scripts/chdist.pl:56
+msgid "COMMANDS"
+msgstr "COMMANDES"
+
+#. type: textblock
+#: ../scripts/bts.pl:757
+msgid ""
+"For full details about the commands, see the BTS documentation.  L<http://"
+"www.debian.org/Bugs/server-control>"
+msgstr ""
+"Pour tous les détails sur les commandes, veuillez consulter la documentation "
+"du BTS. L<http://bugs.debian.org/Bugs/server-control>"
+
+#. type: =item
+#: ../scripts/bts.pl:762
+msgid ""
+"show [options] [<bug number> | <package> | <maintainer> | : ] [opt=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:764
+msgid "show [options] [src:<package> | from:<submitter>] [opt=val ...]"
+msgstr ""
+"B<show> [I<options>] [B<src:>I<paquet> | B<from:>I<rapporteur>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:766
+msgid "show [options] [tag:<tag> | usertag:<tag> ] [opt=val ...]"
+msgstr ""
+"B<show> [I<options>] [B<tag:>I<étiquette> | B<usertag:>I<étiquette>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:768
+msgid "show [release-critical | release-critical/... | RC]"
+msgstr "B<show> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:770
+msgid "This is a synonym for bts bugs."
+msgstr "Ceci est un synonyme pour B<bts bugs>."
+
+#. type: =item
+#: ../scripts/bts.pl:778
+msgid ""
+"bugs [options] [<bug number> | <package> | <maintainer> | : ] [opt=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:780
+msgid "bugs [options] [src:<package> | from:<submitter>] [opt=val ..]"
+msgstr ""
+"B<bugs> [I<options>] [B<src:>I<paquet> | B<from:>I<rapporteur>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:782
+msgid "bugs [options] [tag:<tag> | usertag:<tag> ] [opt=val ..]"
+msgstr ""
+"B<bugs> [I<options>] [B<tag:>I<étiquette> | B<usertag:>I<étiquette>] "
+"[I<opt>B<=>I<val> ...]"
+
+#. type: =item
+#: ../scripts/bts.pl:784
+msgid "bugs [release-critical | release-critical/... | RC]"
+msgstr "B<bugs> [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:786
+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:789
+msgid ""
+"Options may be specified after the \"bugs\" command in addition to or "
+"instead of options at the start of the command line: recognised options at "
+"this point are: -o/--offline/--online, --mbox, --mailreader and --[no-]"
+"cache.  These are described earlier in this manpage.  If either the -o or --"
+"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<--mbox>, B<--"
+"mailreader> et B<-->[B<no->]B<cache>. Celles-ci sont expliquées plus haut "
+"dans cette page de manuel. Si -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:796
+msgid "The meanings of the possible arguments are as follows:"
+msgstr "Les significations des arguments possibles sont les suivantes :"
+
+#. type: =item
+#: ../scripts/bts.pl:800
+msgid "(none)"
+msgstr "(aucune)"
+
+#. type: textblock
+#: ../scripts/bts.pl:802
+msgid ""
+"If nothing is specified, bts bugs will display your bugs, assuming that "
+"either DEBEMAIL or 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 positionnée "
+"à l'adresse électronique désirée."
+
+#. type: =item
+#: ../scripts/bts.pl:806
+msgid "<bug number>"
+msgstr "I<numéro_de_bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:808
+msgid "Display bug number <bug number>."
+msgstr "Afficher le bogue de numéro I<numéro_de_bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:810
+msgid "<package>"
+msgstr "I<paquet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:812
+msgid "Display the bugs for the package <package>."
+msgstr "Afficher les bogues du paquet I<paquet>."
+
+#. type: =item
+#: ../scripts/bts.pl:814
+msgid "src:<package>"
+msgstr "B<src:>I<paquet>"
+
+#. type: textblock
+#: ../scripts/bts.pl:816
+msgid "Display the bugs for the source package <package>."
+msgstr "Afficher les bogues du paquet source I<paquet>."
+
+#. type: =item
+#: ../scripts/bts.pl:818
+msgid "<maintainer>"
+msgstr "I<responsable>"
+
+#. type: textblock
+#: ../scripts/bts.pl:820
+msgid "Display the bugs for the maintainer email address <maintainer>."
+msgstr ""
+"Afficher les bogues dont le responsable a pour adresse électronique "
+"I<responsable>."
+
+#. type: =item
+#: ../scripts/bts.pl:822
+msgid "from:<submitter>"
+msgstr "B<from:>I<rapporteur>"
+
+#. type: textblock
+#: ../scripts/bts.pl:824
+msgid "Display the bugs for the submitter email address <submitter>."
+msgstr ""
+"Afficher les bogues dont le rapporteur a pour adresse électronique "
+"I<rapporteur>."
+
+#. type: =item
+#: ../scripts/bts.pl:826
+msgid "tag:<tag>"
+msgstr "B<tag:>I<étiquette>"
+
+#. type: textblock
+#: ../scripts/bts.pl:828
+msgid "Display the bugs which are tagged with <tag>."
+msgstr "Afficher les bogues marqués avec I<étiquette>."
+
+#. type: =item
+#: ../scripts/bts.pl:830
+msgid "usertag:<tag>"
+msgstr "B<usertag:>I<étiquette>"
+
+#. type: textblock
+#: ../scripts/bts.pl:832
+msgid ""
+"Display the bugs which are tagged with usertag <tag>.  See the BTS "
+"documentation for more information on usertags.  This will require the use "
+"of a users=<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. Ceci nécessite d'utiliser une option "
+"B<users=>I<adresse>."
+
+#. type: =item
+#: ../scripts/bts.pl:836
+msgid ":"
+msgstr "B<:>"
+
+#. type: textblock
+#: ../scripts/bts.pl:838
+msgid ""
+"Details of the bug tracking system itself, along with a bug-request page "
+"with more options than this script, can be found on http://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 à http://bugs.debian.org/. Cette page peut être ouverte via la "
+"commande B<bts bugs :>."
+
+#. type: =item
+#: ../scripts/bts.pl:843
+msgid "release-critical, RC"
+msgstr "B<release-critical>, B<RC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:845
+msgid ""
+"Display the front page of the release-critical pages on the BTS.  This is a "
+"synonym for http://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 bogue "
+"critiques pour la prochaine publication. Ceci est un synonyme pour http://"
+"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:852
+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 via 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:859
+msgid ""
+"If caching has been enabled (that is, --no-cache has not been used, and "
+"BTS_CACHE has not been set to \"no\"), then any page requested by \"bts show"
+"\" will automatically be cached, and be available offline thereafter.  Pages "
+"which are automatically cached in this way will be deleted on subsequent "
+"\"bts show|bugs|cache\" invocations if they have not been accessed in 30 "
+"days.  Warning: on a filesystem mounted with the \"noatime\" option, running "
+"\"bts show|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é et si la variable BTS_CACHE ne vaut pas « no »), alors toute page "
+"demandée via 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 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 show>|<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:870
+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 ceci sur la ligne de commande sera "
+"exécutée après que le navigateur aura quitté."
+
+#. type: textblock
+#: ../scripts/bts.pl:873
+msgid ""
+"The desired browser can be specified and configured by setting the 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:878
+msgid ""
+"The value of 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 \"%s\"; if it does, the URL "
+"to be viewed is substituted there. If a command part does not contain %s, "
+"the browser is to be launched as if the URL had been supplied as its first "
+"argument. The string %% 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 « %s » ; si c'est le cas, celle-ci est remplacée par "
+"l'URL à afficher. Si une des commandes ne contient pas « %s », le navigateur "
+"est lancé comme si l'URL avait été indiquée en tant que premier paramètre. "
+"La chaîne « %% » doit être remplacée par un simple « % »."
+
+#. type: textblock
+#: ../scripts/bts.pl:886
+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 .profile across multiple systems. "
+"We need %s because some popular browsers have remote-invocation syntax that "
+"requires it. Unless %% reduces to %, it won't be possible to have a literal "
+"%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. Nous avons besoin de %s parce que la plupart des "
+"navigateurs ont une syntaxe qui le nécessite. Enfin, %% doit être transformé "
+"en %, sinon il ne serait pas possible d'avoir un %s littéral dans la chaîne."
+
+#. type: textblock
+#: ../scripts/bts.pl:894
+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:896
+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:971
+msgid "select [key:value ...]"
+msgstr "B<select> [I<clé>:I<valeur> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:973
+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:976
+msgid "The following keys are allowed, and may be given multiple times."
+msgstr ""
+"Les clés suivantes sont autorisées, et peuvent être utilisées plusieurs fois."
+
+#. type: =item
+#: ../scripts/bts.pl:980 ../scripts/bts.pl:1839
+msgid "package"
+msgstr "B<package>"
+
+#. type: textblock
+#: ../scripts/bts.pl:982 ../scripts/bts.pl:1841
+msgid "Binary package name."
+msgstr "Nom d'un paquet binaire."
+
+#. type: =item
+#: ../scripts/bts.pl:984 ../scripts/bts.pl:1843
+msgid "source"
+msgstr "B<source>"
+
+#. type: textblock
+#: ../scripts/bts.pl:986 ../scripts/bts.pl:1845
+msgid "Source package name."
+msgstr "Nom d'un paquet source."
+
+#. type: =item
+#: ../scripts/bts.pl:988
+msgid "maintainer"
+msgstr "B<maintainer>"
+
+#. type: textblock
+#: ../scripts/bts.pl:990
+msgid "E-mail address of the maintainer."
+msgstr "Adresse électronique du responsable."
+
+#. type: =item
+#: ../scripts/bts.pl:992 ../scripts/bts.pl:1823
+msgid "submitter"
+msgstr "B<submitter>"
+
+#. type: textblock
+#: ../scripts/bts.pl:994 ../scripts/bts.pl:1825
+msgid "E-mail address of the submitter."
+msgstr "Adresse électronique de l'auteur du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:996 ../scripts/bts.pl:1851
+msgid "severity"
+msgstr "B<severity>"
+
+#. type: textblock
+#: ../scripts/bts.pl:998 ../scripts/bts.pl:1853
+msgid "Bug severity."
+msgstr "Sévérité du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1000
+msgid "status"
+msgstr "B<status>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1002
+msgid "Status of the bug.  One of \"open\", \"done\", or \"forwarded\"."
+msgstr "État du bogue. Soit « open », « done » ou « forwarded »."
+
+#. type: =item
+#: ../scripts/bts.pl:1004 ../scripts/bts.pl:1847
+msgid "tag"
+msgstr "B<tag>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1006
+msgid ""
+"Tags applied to the bug. If I<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:1009 ../scripts/bts.pl:1855
+msgid "owner"
+msgstr "B<owner>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1011 ../scripts/bts.pl:1857
+msgid "Bug's owner."
+msgstr "Propriétaire du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1013
+msgid "correspondent"
+msgstr "B<correspondent>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1015
+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:1017 ../scripts/bts.pl:1859
+msgid "affects"
+msgstr "B<affects>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1019
+msgid "Bugs which affect this package."
+msgstr "Bogues qui affectent ce paquet."
+
+#. type: =item
+#: ../scripts/bts.pl:1021
+msgid "bugs"
+msgstr "B<bugs>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1023
+msgid "List of bugs to search within."
+msgstr "Liste de bogue dans lesquels chercher."
+
+#. type: =item
+#: ../scripts/bts.pl:1025
+msgid "users"
+msgstr "B<users>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1027
+msgid "Users to use when looking up usertags."
+msgstr ""
+"Utilisateur à utiliser pour la recherche d'étiquettes utilisateur "
+"(« usertags »)."
+
+#. type: =item
+#: ../scripts/bts.pl:1029 ../scripts/bts.pl:1863
+msgid "archive"
+msgstr "B<archive>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1031 ../scripts/bts.pl:1865
+msgid ""
+"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."
+msgstr ""
+"Rechercher des bogues archivés ou des bogues normaux ; la valeur par défaut "
+"est 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:1037
+msgid ""
+"For example, to select the set of bugs submitted by jrandomdeveloper@example."
+"com and tagged wontfix, one would use"
+msgstr ""
+"Par exemple, pour sélectionner l'ensemble des bogues envoyés par "
+"undéveloppeur@exemple.fr qui ont l'étiquette « wontfix », on utilisera :"
+
+#. type: textblock
+#: ../scripts/bts.pl:1040
+msgid "bts select submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "bts select submitter:undéveloppeur@exemple.fr tag:wontfix"
+
+#. type: textblock
+#: ../scripts/bts.pl:1042 ../scripts/bts.pl:1877
+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:1045
+msgid "bts select package:foo severity:wishlist severity:minor"
+msgstr "bts select package:foo severity:wishlist severity:minor"
+
+#. type: textblock
+#: ../scripts/bts.pl:1047
+msgid "returns all bugs of package foo with either wishlist or minor severity."
+msgstr "renvoie tous les bogues du paquet foo de sévérité wishlist ou minor."
+
+#. type: =item
+#: ../scripts/bts.pl:1060
+msgid "status [<bug> | file:<file> | fields:<field,field,...> | verbose] ..."
+msgstr ""
+"B<status> [I<bogue> | B<file:>I<fichier> | B<fields:>I<champ>[B<,"
+">I<champ> ...] | B<verbose>] ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:1062
+msgid ""
+"Uses the SOAP interface to output status information for the given bugs (or "
+"as read from the listed files -- use '-' 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 « - » pour "
+"indiquer l'entrée standard)."
+
+#. type: textblock
+#: ../scripts/bts.pl:1065
+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:1067
+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:1069
+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:1146
+msgid "clone <bug> <new ID> [<new ID> ...]"
+msgstr "B<clone> I<bogue> I<nouvel_ID> [I<nouvel_ID> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1148
+msgid ""
+"The clone control command allows you to duplicate a 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>. Ceci 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 "
+"généré pour chaque nouvel identifiant."
+
+#. type: =item
+#: ../scripts/bts.pl:1198
+msgid "done <bug> <version>"
+msgstr "B<done> I<bogue> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1200
+msgid ""
+"Mark a bug as Done. This forces interactive mode since done messages should "
+"include an explanation why the bug is being closed.  You should specify "
+"which 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:1218
+msgid "reopen <bug> [<submitter>]"
+msgstr "B<reopen> I<bogue> [I<rapporteur>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1220
+msgid "Reopen a bug, with optional submitter."
+msgstr "Réouvrir un I<bogue>, avec I<rapporteur> optionnel."
+
+#. type: =item
+#: ../scripts/bts.pl:1231
+msgid "archive <bug>"
+msgstr "B<archive> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1233
+msgid ""
+"Archive a bug that has previously been archived but is currently not.  The "
+"bug must fulfil 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 bogue "
+"doit satisfaire à tous les critères pour les bogues archivés, sauf celui de "
+"la période d'attente."
+
+#. type: =item
+#: ../scripts/bts.pl:1245
+msgid "unarchive <bug>"
+msgstr "B<unarchive> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1247
+msgid "Unarchive a bug that is currently archived."
+msgstr "Désarchiver un I<bogue> qui est déjà archivé."
+
+#. type: =item
+#: ../scripts/bts.pl:1257
+msgid "retitle <bug> <title>"
+msgstr "B<retitle> I<bogue> I<titre>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1259
+msgid "Change the title of the bug."
+msgstr "Changer le I<titre> du I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1272
+msgid "summary <bug> <messagenum>"
+msgstr "B<summary> I<bogue> I<numéro_message>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1274
+msgid "Select a message number that should be used as the summary of a bug."
+msgstr ""
+"Sélectionner un numéro de message qui doit être utilisé comme résumé d'un "
+"I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1288
+msgid "submitter <bug> [<bug> ...] <submitter-email>"
+msgstr "B<submitter> I<bogue> [I<bogue> ...] I<adresse-du-rapporteur>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1290
+msgid ""
+"Change the submitter address of a bug or a number of bugs, with `!' meaning "
+"`use the address on the current email as the new submitter address'."
+msgstr ""
+"Changer l'adresse électronique du rapporteur du ou des bogues, où « ! » "
+"signifie « utiliser l'adresse électronique courante en tant que nouvelle "
+"adresse du rapporteur »."
+
+#. type: =item
+#: ../scripts/bts.pl:1307
+msgid "reassign <bug> [<bug> ...] <package> [<version>]"
+msgstr "B<reassign> I<bogue> [I<bogue> ...] I<paquet> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1309
+msgid ""
+"Reassign a bug or a number of bugs to a different package.  The version "
+"field is optional; see the explanation at L<http://www.debian.org/Bugs/"
+"server-control>."
+msgstr ""
+"Réassigner un I<bogue> ou un ensemble de bogues à un paquet différent. Le "
+"champ I<version> est optionnel ; veuillez consulter les explications à "
+"L<http://www.debian.org/Bugs/server-control>."
+
+#. type: =item
+#: ../scripts/bts.pl:1339
+msgid "found <bug> [<version>]"
+msgstr "B<found> I<bogue> [I<version>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1341
+msgid "Indicate that a bug was found to exist in a particular package version."
+msgstr ""
+"Indiquer qu'un bogue a été découvert dans une version particulière d'un "
+"paquet."
+
+#. type: =item
+#: ../scripts/bts.pl:1356
+msgid "notfound <bug> <version>"
+msgstr "B<notfound> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1358
+msgid ""
+"Remove the record that 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 bogue a été "
+"découvert."
+
+#. type: =item
+#: ../scripts/bts.pl:1370
+msgid "fixed <bug> <version>"
+msgstr "B<fixed> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1372
+msgid ""
+"Indicate that a bug was fixed in a particular package version, without "
+"affecting the 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:1384
+msgid "notfixed <bug> <version>"
+msgstr "B<notfixed> I<bogue> I<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1386
+msgid ""
+"Remove the record that a 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:1389
+msgid ""
+"This is equivalent to the sequence of commands \"found <bug> <version>\", "
+"\"notfound <bug> <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:1401
+msgid "block <bug> by|with <bug> [<bug> ...]"
+msgstr "B<block> I<bogue> B<by>|B<with> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1403
+msgid "Note that a 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:1422
+msgid "unblock <bug> by|with <bug> [<bug> ...]"
+msgstr "B<unblock> I<bogue> B<by>|B<with> B<bogue> [B<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1424
+msgid ""
+"Note that a 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:1443
+msgid "merge <bug> <bug> [<bug> ...]"
+msgstr "B<merge> I<bogue> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1445
+msgid "Merge a set of bugs together."
+msgstr "Fusionner plusieurs bogues."
+
+#. type: =item
+#: ../scripts/bts.pl:1460
+msgid "forcemerge <bug> <bug> [<bug> ...]"
+msgstr "B<forcemerge> I<bogue> I<bogue> [I<bogue> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1462
+msgid ""
+"Forcibly merge a set of bugs together. The first bug listed is the master "
+"bug, and its settings (those which must be equal in a normal 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:1480
+msgid "unmerge <bug>"
+msgstr "B<unmerge> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1482
+msgid "Unmerge a bug."
+msgstr "Annuler la fusion de plusieurs bogues."
+
+#. type: =item
+#: ../scripts/bts.pl:1492
+msgid "tag <bug> [+|-|=] tag [tag ..]"
+msgstr "B<tag> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: =item
+#: ../scripts/bts.pl:1494
+msgid "tags <bug> [+|-|=] tag [tag ..]"
+msgstr "B<tags> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1496
+msgid ""
+"Set or unset a tag on a bug. The tag may either be the exact tag name or it "
+"may be abbreviated to any unique tag substring. (So using \"fixed\" will set "
+"the tag \"fixed\", not \"fixed-upstream\", for example, but \"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 "
+"'=' 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 « fixed » va ajouter l'étiquette « fixed » et non « fixed-"
+"upstream », par exemple, mais « 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 le drapeau « = » ne soit utilisé ; la commande"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1503
+#, no-wrap
+msgid ""
+"  bts tags <bug> =\n"
+"\n"
+msgstr ""
+"  bts tags <bogue> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1505
+msgid "will remove all tags from the specified bug."
+msgstr "va supprimer toutes les étiquettes du I<bogue> indiqué."
+
+#. type: textblock
+#: ../scripts/bts.pl:1507
+msgid ""
+"As a special case, the unofficial \"gift\" tag name is supported in addition "
+"to official tag names. \"gift\" is used as a shorthand for the gift usertag; "
+"see L<http://wiki.debian.org/qa.debian.org/GiftTag>.  Adding/removing the "
+"gift tag will add/remove the gift usertag, belonging to the \"debian-"
+"qa@lists.debian.org\" user."
+msgstr ""
+"Comme cas particulier, l'étiquette non officielle « gift » est prise en "
+"charge en plus des étiquettes officielles. « gift » est utilisée comme "
+"raccourci pour l'étiquette utilisateur (« usertag ») gift ; voir L<http://"
+"wiki.debian.org/qa.debian.org/GiftTag>. L'ajout ou la suppression de "
+"l'étiquette « gift » ajoutera ou supprimera l'étiquette utilisateur "
+"« gift », pour l'utilisateur « debian-qa@lists.debian.org »."
+
+#. type: =item
+#: ../scripts/bts.pl:1583
+msgid "affects <bug> [+|-|=] <package> [<package> ..]"
+msgstr "B<affects> I<bogue> [B<+>|B<->|B<=>] I<paquet> [I<paquet> ..]"
+
+# NOTE: package list -> bug list
+#. type: textblock
+#: ../scripts/bts.pl:1585
+msgid ""
+"Indicates that a bug affects a package other than that against which it is "
+"filed, causing the bug to be listed by default in the package list of the "
+"other package.  This should generally be used where the bug is severe enough "
+"to cause multiple reports from users to be assigned to the wrong package."
+msgstr ""
+"Indiquer qu'un I<bogue> affecte un I<paquet> autre que celui pour lequel il "
+"est enregistré ; le bogue sera listé par défaut dans la liste des bogues de "
+"l'autre paquet. Ce n'est généralement à utiliser que si le bogue est "
+"suffisamment important et si de nombreux bogues sont remontés sur le mauvais "
+"paquet par des utilisateurs."
+
+#. type: =item
+#: ../scripts/bts.pl:1621
+msgid "user <email>"
+msgstr "B<user> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1623
+msgid "Specify a user email address before using the usertags command."
+msgstr ""
+"Indiquer l'I<adresse> électronique d'un utilisateur avant d'utiliser la "
+"commande B<usertags>."
+
+#. type: =item
+#: ../scripts/bts.pl:1639
+msgid "usertag <bug> [+|-|=] tag [tag ..]"
+msgstr "B<usertag> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: =item
+#: ../scripts/bts.pl:1641
+msgid "usertags <bug> [+|-|=] tag [tag ..]"
+msgstr "B<usertags> I<bogue> [B<+>|B<->|B<=>] I<étiquette> [I<étiquette> ..]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1643
+msgid ""
+"Set or unset a user tag on a bug. The 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 (usertag and usertags) are identical.  "
+"At least one tag must be specified, unless the '=' 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 (usertag et "
+"usertags) sont identiques. Il est nécessaire d'indiquer au moins une "
+"étiquette utilisateur, à moins que le drapeau « = » ne soit utilisé ; la "
+"commande"
+
+#. type: verbatim
+#: ../scripts/bts.pl:1649
+#, no-wrap
+msgid ""
+"  bts usertags <bug> =\n"
+"\n"
+msgstr ""
+"  bts usertags <bogue> =\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/bts.pl:1651
+msgid "will remove all user tags from the specified bug."
+msgstr "va supprimer toutes les étiquettes utilisateur du bogue indiqué."
+
+#. type: =item
+#: ../scripts/bts.pl:1706
+msgid "claim <bug> [<claim>]"
+msgstr "B<claim> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1708
+msgid ""
+"Record that you have claimed a bug (e.g. for a bug squashing party).  "
+"<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:1712 ../scripts/bts.pl:1732
+msgid ""
+"If no claim is specified, the environment variable DEBEMAIL or EMAIL "
+"(checked in that order) is used."
+msgstr ""
+"Si aucune adresse n'est donnée, les variables d'environnement B<DEBEMAIL> et "
+"B<EMAIL> sont utilisées (dans cet ordre)."
+
+#. type: =item
+#: ../scripts/bts.pl:1728
+msgid "unclaim <bug> [<claim>]"
+msgstr "B<unclaim> I<bogue> [I<adresse>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1730
+msgid "Remove the record that you have claimed a bug."
+msgstr "Supprimer votre revendication pour un I<bogue>."
+
+#. type: =item
+#: ../scripts/bts.pl:1748
+msgid "severity <bug> <severity>"
+msgstr "B<severity> I<bogue> I<sévérité>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1750
+msgid ""
+"Change the severity of a bug. Available severities are: wishlist, minor, "
+"normal, important, serious, grave, 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 : "
+"wishlist, minor, normal, important, serious, grave, critical. Cette sévérité "
+"peut être abrégée en une sous-chaîne unique."
+
+#. type: =item
+#: ../scripts/bts.pl:1767
+msgid "forwarded <bug> <address>"
+msgstr "B<forwarded> I<bogue> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1769
+msgid ""
+"Mark the bug as forwarded to the given address (usually an email address or "
+"a URL for an upstream bug tracker)."
+msgstr ""
+"Marquer le I<bogue> comme transmis à l'I<adresse> de donnée (normalement une "
+"adresse électronique ou une URL pour un système de suivi amont)."
+
+#. type: =item
+#: ../scripts/bts.pl:1786
+msgid "notforwarded <bug>"
+msgstr "B<notforwarded> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1788
+msgid "Mark a bug as not forwarded."
+msgstr "Marquer le I<bogue> comme n'ayant pas été transmis."
+
+#. type: =item
+#: ../scripts/bts.pl:1798
+msgid "package [<package> ...]"
+msgstr "B<package> [I<paquet> ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1800
+msgid ""
+"The following commands will only apply to bugs against the listed packages; "
+"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 "
+"paquets 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:1814
+msgid "limit [<key>[:<value>] ...]"
+msgstr "B<limit> [I<clé>[B<:>I<valeur>] ...]"
+
+#. type: textblock
+#: ../scripts/bts.pl:1816
+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 C<value>s are "
+"listed, the limits for that C<key> are turned off again.  If no C<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<clé> sont "
+"désactivées. Si aucune I<clé> n'est indiquée, les limites sont remises à "
+"zéro."
+
+#. type: =item
+#: ../scripts/bts.pl:1827
+msgid "date"
+msgstr "B<date>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1829
+msgid "Date the bug was submitted."
+msgstr "Date à laquelle le bogue a été soumis."
+
+#. type: =item
+#: ../scripts/bts.pl:1831
+msgid "subject"
+msgstr "B<subject>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1833
+msgid "Subject of the bug."
+msgstr "Sujet du bogue."
+
+#. type: =item
+#: ../scripts/bts.pl:1835
+msgid "msgid"
+msgstr "B<msgid>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1837
+msgid "Message-id of the initial bug report."
+msgstr "Identifiant du message du rapport de bogue initial."
+
+#. type: textblock
+#: ../scripts/bts.pl:1849
+msgid "Tags applied to the bug."
+msgstr "Étiquettes du bogue."
+
+#. type: textblock
+#: ../scripts/bts.pl:1861
+msgid "Bugs affecting this package."
+msgstr "Bogues qui affectent ce paquet."
+
+#. type: textblock
+#: ../scripts/bts.pl:1871
+msgid ""
+"For example, to limit the set of bugs affected by the subsequent control "
+"commands to those submitted by jrandomdeveloper@example.com and tagged "
+"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 "
+"I<undéveloppeur@exemple.fr> qui ont l'étiquette « wontfix », on utilisera :"
+
+#. type: textblock
+#: ../scripts/bts.pl:1875
+msgid "bts limit submitter:jrandomdeveloper@example.com tag:wontfix"
+msgstr "B<bts limit submitter:>I<undéveloppeur@exemple.fr> B<tag:wontfix>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1880
+msgid "bts limit package:foo severity:wishlist severity:minor"
+msgstr "B<bts limit package:foo severity:wishlist severity:minor>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1882
+msgid ""
+"only applies the subsequent control commands to bugs of package foo with "
+"either wishlist or minor severity."
+msgstr ""
+"n'applique les commandes de contrôle qui suivent qu'aux bogues du paquet "
+"« foo » avec pour sévérité « wishlist » ou « minor »."
+
+#. type: =item
+#: ../scripts/bts.pl:1957
+msgid "owner <bug> <owner-email>"
+msgstr "B<owner> I<bogue> I<adresse-du-propriétaire>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1959
+msgid ""
+"Change the \"owner\" address of a bug, with `!' meaning `use the address on "
+"the current email as the new owner address'."
+msgstr ""
+"Changer l'adresse électronique du « propriétaire » du bogue, où « ! » "
+"signifie « utiliser l'adresse électronique courante comme nouvelle adresse "
+"de propriétaire »."
+
+#. type: textblock
+#: ../scripts/bts.pl:1962
+msgid ""
+"The owner of a bug accepts responsibility for dealing with it. Note that the "
+"\"owner\" of a bug does not automatically receive all of the email "
+"corresponding to it; use \"subscribe\" to achieve that."
+msgstr ""
+"Le propriétaire d'un bogue accepte la responsabilité de s'en occuper. "
+"Cependant, le propriétaire d'un bogue ne reçoit pas automatiquement les "
+"mails correspondants ; il faut utiliser la commande « subscribe » pour cela."
+
+#. type: =item
+#: ../scripts/bts.pl:1975
+msgid "noowner <bug>"
+msgstr "B<noowner> I<bogue>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1977
+msgid "Mark a bug as having no \"owner\"."
+msgstr "Marquer un bogue comme n'ayant pas de « propriétaire »."
+
+#. type: =item
+#: ../scripts/bts.pl:1987
+msgid "subscribe <bug> <email>"
+msgstr "B<subscribe> I<bogue> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:1989
+msgid ""
+"Subscribe the given email address to the specified bug report.  If no email "
+"address is specified, the environment variable DEBEMAIL or EMAIL (in that "
+"order) is used.  If those are not set, or `!' is given as email address, "
+"your default address will be used."
+msgstr ""
+"Abonner l'adresse électronique donnée au rapport de 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 positionnée, ou si « ! » est "
+"donné comme adresse électronique, votre adresse par défaut va être utilisée."
+
+#. type: textblock
+#: ../scripts/bts.pl:1994
+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:2014
+msgid "unsubscribe <bug> <email>"
+msgstr "B<unsubscribe> I<bogue> I<adresse>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2016
+msgid ""
+"Unsubscribe the given email address from the specified bug report.  As with "
+"subscribe above, if no email address is specified, the environment variables "
+"DEBEMAIL or EMAIL (in that order) is used.  If those are not set, or `!' 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 positionnée, ou si « ! » est donné "
+"comme adresse électronique, votre adresse par défaut va être utilisée."
+
+#. type: textblock
+#: ../scripts/bts.pl:2021
+msgid ""
+"After executing this command, you will be sent an unsubscription "
+"confirmation to which you have to reply. Use the 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:2040
+msgid "reportspam <bug> ..."
+msgstr "B<reportspam> I<bogue> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2042
+msgid ""
+"The reportspam command allows you to report a 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:2078
+msgid "spamreport <bug> ..."
+msgstr "B<spamreport> I<bogue> ..."
+
+#. type: textblock
+#: ../scripts/bts.pl:2080
+msgid "spamreport is a synonym for reportspam."
+msgstr "B<spamreport> est synonyme de B<reportspam>."
+
+#. type: =item
+#: ../scripts/bts.pl:2088
+msgid "cache [options] [<maint email> | <pkg> | src:<pkg> | from:<submitter>]"
+msgstr ""
+"B<cache> [I<options>] [I<adresse_resp.>] | I<paquet> | B<src:>I<paquet> | "
+"B<from:>I<rapporteur>]"
+
+#. type: =item
+#: ../scripts/bts.pl:2090
+msgid "cache [options] [release-critical | release-critical/... | RC]"
+msgstr ""
+"B<cache> [I<options>] [B<release-critical> | B<release-critical/>... | B<RC>]"
+
+#. type: textblock
+#: ../scripts/bts.pl:2092
+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 DEBEMAIL environment variable (or the EMAIL environment variable if "
+"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 ~/.devscripts_cache/bts/"
+msgstr ""
+"Créer ou mettre en cache des rapports de bogue pour l'adresse électronique "
+"ou le paquet indiqué. Par défaut, ceci 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 positionnée). 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<~/.devscripts_cache/bts/>."
+
+#. type: textblock
+#: ../scripts/bts.pl:2101
+msgid "You can use the cached bugs with the -o switch. For example:"
+msgstr "Vous pouvez utiliser le cache grâce à l'option B<-o>. Par exemple :"
+
+#. type: verbatim
+#: ../scripts/bts.pl:2103
+#, 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:2106
+msgid ""
+"Also, bts will update the files in it in a piecemeal fashion as it downloads "
+"information from the BTS using the '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, bts va mettre à jour les "
+"fichiers contenu 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:2112
+msgid ""
+"Some options affect the behaviour of the cache command.  The first is the "
+"setting of --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: min (the minimum), mbox (download "
+"the minimum plus the mbox version of the bug report) or full (the whole "
+"works).  The second is --force-refresh or -f, which forces the download, "
+"even if the cached bug report is up-to-date.  The --include-resolved option "
+"indicates whether bug reports marked as resolved should be downloaded during "
+"caching."
+msgstr ""
+"Certaines options modifient le comportement de la commande 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 d'ACK, 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. Ces "
+"deux options sont configurables via le fichier de configuration, comme "
+"décrit ci-dessous. 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:2123
+msgid ""
+"Each of these is configurable from the configuration file, as described "
+"below.  They may also be specified after the \"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:2127
+msgid ""
+"Finally, -q or --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 (excepté les messages d'erreur)."
+
+#. type: textblock
+#: ../scripts/bts.pl:2131
+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:2260
+msgid "cleancache <package> | src:<package> | <maintainer>"
+msgstr "B<cleancache> I<paquet> | B<src:>I<paquet> | I<responsable>"
+
+#. type: =item
+#: ../scripts/bts.pl:2262
+msgid ""
+"cleancache from:<submitter> | tag:<tag> | usertag:<tag> | <number> | 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:2264
+msgid ""
+"Clean the cache for the specified package, maintainer, etc., as described "
+"above for the \"bugs\" command, or clean the entire cache if \"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 DEBEMAIL or 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é. Ceci 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. Notez 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:2313
+msgid "version"
+msgstr "B<version>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2315
+msgid "Display version and copyright information."
+msgstr "Afficher la version et le copyright."
+
+#. type: =item
+#: ../scripts/bts.pl:2330
+msgid "help"
+msgstr "B<help>"
+
+#. type: textblock
+#: ../scripts/bts.pl:2332
+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:3944 ../scripts/debuild.1:86 ../scripts/diff2patches.1:40
+#: ../scripts/pts-subscribe.1:34
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr "VARIABLES D'ENVIRONNEMENT"
+
+#. type: IX
+#: ../scripts/bts.pl:3948 ../scripts/devscripts.1:22
+#, no-wrap
+msgid "DEBEMAIL"
+msgstr "B<DEBEMAIL>"
+
+#. type: textblock
+#: ../scripts/bts.pl:3950
+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 ceci est positionné, la ligne From: du message va être positionnée pour "
+"utiliser cette adresse électronique au lieu de votre adresse habituelle (qui "
+"serait déterminée par B<mail>)."
+
+#. type: IX
+#: ../scripts/bts.pl:3954 ../scripts/devscripts.1:25
+#, no-wrap
+msgid "DEBFULLNAME"
+msgstr "B<DEBFULLNAME>"
+
+#. type: textblock
+#: ../scripts/bts.pl:3956
+msgid ""
+"If DEBEMAIL is set, DEBFULLNAME is examined to determine the full name to "
+"use; if this is not set, B<bts> attempts to determine a name from your "
+"passwd entry."
+msgstr ""
+"Si B<DEBEMAIL> est positionnée, 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 passwd."
+
+#. type: =item
+#: ../scripts/bts.pl:3960
+msgid "BROWSER"
+msgstr "B<BROWSER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:3962
+msgid ""
+"If set, it specifies the browser to use for the 'show' and 'bugs' options.  "
+"See the description above."
+msgstr ""
+"Si positionné, cela indique le navigateur à utiliser pour les options "
+"B<show> et B<bugs>. Voir la description plus haut."
+
+#. type: SH
+#: ../scripts/bts.pl:3967 ../scripts/dcontrol.pl:267 ../scripts/debc.1:92
+#: ../scripts/debchange.1:362 ../scripts/debcheckout.pl:142
+#: ../scripts/debclean.1:90 ../scripts/debcommit.pl:97
+#: ../scripts/debdiff.1:167 ../scripts/debi.1:99 ../scripts/debrelease.1:105
+#: ../scripts/debrsign.1:57 ../scripts/debsign.1:111 ../scripts/debuild.1:290
+#: ../scripts/dget.pl:595 ../scripts/dpkg-depcheck.1:102
+#: ../scripts/dscverify.1:42 ../scripts/grep-excuses.1:28
+#: ../scripts/licensecheck.pl:88 ../scripts/mass-bug.pl:133
+#: ../scripts/nmudiff.1:79 ../scripts/plotchangelog.1:106
+#: ../scripts/pts-subscribe.1:42 ../scripts/rmadison.pl:266
+#: ../scripts/uscan.1:448 ../scripts/uupdate.1:88 ../scripts/who-uploads.1:50
+#, no-wrap
+msgid "CONFIGURATION VARIABLES"
+msgstr "VARIABLES DE CONFIGURATION"
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/bts.pl:3969 ../scripts/debcommit.pl:99
+#: ../scripts/licensecheck.pl:90 ../scripts/mass-bug.pl:135
+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 positionner 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:3977
+msgid "BTS_OFFLINE"
+msgstr "B<BTS_OFFLINE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:3979
+msgid ""
+"If this is set to I<yes>, then it is the same as the --offline command line "
+"parameter being used.  Only has an effect on the show and bugs commands.  "
+"The default is I<no>.  See the description of the show command above for "
+"more information."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser le paramètre en ligne "
+"de commande B<--offline>. Ceci n'affecte que les commandes B<show> et "
+"B<bugs>. La valeur par défaut est I<no>. Veuillez consulter la description "
+"de la commande show ci-dessus pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:3984
+msgid "BTS_CACHE"
+msgstr "B<BTS_CACHE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:3986
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-cache command line "
+"parameter being used.  Only has an effect on the show and bug commands.  The "
+"default is I<yes>.  Again, see the show command above for more information."
+msgstr ""
+"Si elle est positionnée à I<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 I<yes>. À nouveau, veuillez consulter la "
+"commande show ci-dessus pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:3991
+msgid "BTS_CACHE_MODE={min,mbox,full}"
+msgstr "B<BTS_CACHE_MODE=>{B<min>,B<mbox>,B<full>}"
+
+#. type: textblock
+#: ../scripts/bts.pl:3993
+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 "
+"I<min>, and it has the same meaning as the --cache-mode command line "
+"parameter.  Only has an effect on the cache.  See the 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>. Ceci n'affecte que le cache. Consultez la "
+"documentation de la commande cache pour plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:3999
+msgid "BTS_FORCE_REFRESH"
+msgstr "B<BTS_FORCE_REFRESH>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4001
+msgid ""
+"If this is set to I<yes>, then it is the same as the --force-refresh command "
+"line parameter being used.  Only has an effect on the cache command.  The "
+"default is I<no>.  See the cache command for more information."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser le paramètre en ligne "
+"de commande B<--force-refresh>. Ceci n'affecte que la commande cache. La "
+"valeur par défaut est I<no>. Veuillez consulter la commande cache pour plus "
+"d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4006
+msgid "BTS_MAIL_READER"
+msgstr "B<BTS_MAIL_READER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4008
+msgid ""
+"If this is set, specifies a mail reader to use instead of mutt.  Same as the "
+"--mailreader command line option."
+msgstr ""
+"Si ceci est positionné, cela indique le client de messagerie à utiliser à la "
+"place de mutt. Équivalent à l'option de ligne de commande B<--mailreader>."
+
+#. type: =item
+#: ../scripts/bts.pl:4011 ../scripts/mass-bug.pl:143
+msgid "BTS_SENDMAIL_COMMAND"
+msgstr "B<BTS_SENDMAIL_COMMAND>"
+
+#. type: Plain text
+#: ../scripts/bts.pl:4013 ../scripts/mass-bug.pl:145 ../scripts/nmudiff.1:108
+msgid ""
+"If this is set, specifies a sendmail command to use instead of /usr/sbin/"
+"sendmail.  Same as the --sendmail command line option."
+msgstr ""
+"Si ceci est positionné, cela indique la commande d'envoi de message à "
+"utiliser à la place de /usr/sbin/sendmail. Équivaut à l'option de ligne de "
+"commande B<--sendmail>."
+
+#. type: =item
+#: ../scripts/bts.pl:4016
+msgid "BTS_ONLY_NEW"
+msgstr "B<BTS_ONLY_NEW>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4018
+msgid ""
+"Download only new bugs when caching. Do not check for updates in bugs we "
+"already have.  The default is I<no>.  Same as the --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 I<no>. Identique à l'option en ligne de commande B<--only-new>."
+
+#. type: =item
+#: ../scripts/bts.pl:4022
+msgid "BTS_SMTP_HOST"
+msgstr "B<BTS_SMTP_HOST>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4024
+msgid ""
+"If this is set, specifies an SMTP host to use for sending mail rather than "
+"using the sendmail command.  Same as the --smtp-host command line option."
+msgstr ""
+"Si elle est positionnée, elle indique un serveur SMTP à utiliser pour "
+"envoyer les courriers au lieu d'utiliser la commande sendmail. Équivaut à "
+"l'option en ligne de commande B<--smtp-host>."
+
+#. type: textblock
+#: ../scripts/bts.pl:4028
+msgid ""
+"Note that this option takes priority over BTS_SENDMAIL_COMMAND if both are "
+"set, unless the --sendmail option is used."
+msgstr ""
+"Notez 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:4031
+msgid "BTS_SMTP_AUTH_USERNAME, BTS_SMTP_AUTH_PASSWORD"
+msgstr "B<BTS_SMTP_AUTH_USERNAME>, B<BTS_SMTP_AUTH_PASSWORD>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4033
+msgid ""
+"If these options are set, then it is the same as the --smtp-username and --"
+"smtp-password options being used."
+msgstr ""
+"Définir ces options est équivalent à utiliser les options B<--smtp-username> "
+"et B<--smtp-password>."
+
+#. type: =item
+#: ../scripts/bts.pl:4036
+msgid "BTS_SMTP_HELO"
+msgstr "B<BTS_SMTP_HELO>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4038
+msgid "Same as the --smtp-helo command line option."
+msgstr "Identique à l'option en ligne de commande B<--smtp-helo>."
+
+#. type: =item
+#: ../scripts/bts.pl:4040
+msgid "BTS_INCLUDE_RESOLVED"
+msgstr "B<BTS_INCLUDE_RESOLVED>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4042
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-include-resolved "
+"command line parameter being used.  Only has an effect on the cache "
+"command.  The default is I<yes>.  See the cache command for more information."
+msgstr ""
+"Si elle est positionnée à I<no>, équivaut à utiliser le paramètre en ligne "
+"de commande B<--no-include-resolved>. Ceci n'affecte que la commande cache. "
+"La valeur par défaut est I<yes>. Veuillez consulter la commande cache pour "
+"plus d'informations."
+
+#. type: =item
+#: ../scripts/bts.pl:4047
+msgid "BTS_SUPPRESS_ACKS"
+msgstr "B<BTS_SUPPRESS_ACKS>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4049
+msgid ""
+"If this is set to I<yes>, then it is the same as the --no-ack command line "
+"parameter being used.  The default is I<no>."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--no-ack>. "
+"La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4052
+msgid "BTS_INTERACTIVE"
+msgstr "B<BTS_INTERACTIVE>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4054
+msgid ""
+"If this is set to I<yes> or I<force>, then it is the same as the --"
+"interactive or --force-interactive command line parameter being used.  The "
+"default is I<no>."
+msgstr ""
+"Si elle est positionnée à I<yes> ou I<force>, équivaut à utiliser l'option "
+"B<--interactive> ou B<--force-interactive>. La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/bts.pl:4058
+msgid "BTS_DEFAULT_CC"
+msgstr "B<BTS_DEFAULT_CC>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4060
+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, générés pour le robot « control », doit être envoyée "
+"automatiquement."
+
+#. type: =item
+#: ../scripts/bts.pl:4063
+msgid "BTS_SERVER"
+msgstr "B<BTS_SERVER>"
+
+#. type: textblock
+#: ../scripts/bts.pl:4065
+msgid ""
+"Specify the name of a debbugs server which should be used instead of bugs."
+"debian.org."
+msgstr ""
+"Indiquer le nom d'un serveur debbugs qui doit être utilisé à la place de "
+"bugs.debian.org."
+
+#. type: textblock
+#: ../scripts/bts.pl:4072
+msgid ""
+"Please see L<http://www.debian.org/Bugs/server-control> for more details on "
+"how to control the BTS using emails and L<http://www.debian.org/Bugs/> for "
+"more information about the BTS."
+msgstr ""
+"Veuillez consulter L<http://www.debian.org/Bugs/server-control> pour plus de "
+"détails sur comment contrôler le BTS avec des courriers et L<http://www."
+"debian.org/Bugs/> pour plus d'informations sur le BTS."
+
+#. type: textblock
+#: ../scripts/bts.pl:4076
+msgid "reportbug(1), querybts(1)"
+msgstr "reportbug(1), querybts(1)"
+
+#. type: =head1
+#: ../scripts/bts.pl:4078 ../scripts/chdist.pl:92 ../scripts/debsnap.1:99
+#: ../scripts/mass-bug.pl:514 ../scripts/tagpending.pl:431
+#, no-wrap
+msgid "COPYRIGHT"
+msgstr "COPYRIGHT"
+
+#. type: textblock
+#: ../scripts/bts.pl:4080
+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:4085 ../scripts/chdist.pl:97 ../scripts/mass-bug.pl:518
+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:20
+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:24
+msgid "B<build-rdeps> I<package>"
+msgstr "B<build-rdeps> I<paquet>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:28
+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: =item
+#: ../scripts/build-rdeps.pl:34
+msgid "B<-u> B<--update>"
+msgstr "B<-u> B<--update>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:36
+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:38
+msgid "B<-s> B<--sudo>"
+msgstr "B<-s> B<--sudo>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:40
+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:42
+msgid "B<--distribution>"
+msgstr "B<--distribution>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:44
+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:46
+msgid "B<--only-main>"
+msgstr "B<--only-main>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:48
+msgid "Ignore contrib and non-free"
+msgstr "Ignorer contrib et non-free"
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:50
+msgid "B<--exclude-component>"
+msgstr "B<--exclude-component>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:52
+msgid "Ignore the given component (e.g. main, contrib, non-free)."
+msgstr ""
+"Ignorer les composants indiqués (par exemple, main, contrib, non-free)."
+
+#. type: =item
+#: ../scripts/build-rdeps.pl:54
+msgid "B<--origin>"
+msgstr "B<--origin>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:56
+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:58
+msgid "B<-m> B<--print-maintainer>"
+msgstr "B<-m> B<--print-maintainer>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:60
+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:62
+msgid "B<-d> B<--debug>"
+msgstr "B<-d> B<--debug>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:64
+msgid "Run the debug mode"
+msgstr "Exécuter en mode débogue."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:66 ../scripts/cowpoke.1:68
+#: ../scripts/debclean.1:84 ../scripts/grep-excuses.1:22
+#: ../scripts/nmudiff.1:73 ../scripts/plotchangelog.1:92
+#: ../scripts/uscan.1:442
+#, no-wrap
+msgid "B<--help>"
+msgstr "B<--help>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:68
+msgid "Show the usage information."
+msgstr "Afficher les informations sur l'utilisation."
+
+#. type: TP
+#: ../scripts/build-rdeps.pl:70 ../scripts/cowpoke.1:72
+#: ../scripts/debchange.1:359 ../scripts/debclean.1:87
+#: ../scripts/debrelease.1:102 ../scripts/debsign.1:108
+#: ../scripts/debsnap.1:51 ../scripts/diff2patches.1:25
+#: ../scripts/dscverify.1:39 ../scripts/grep-excuses.1:25
+#: ../scripts/nmudiff.1:76 ../scripts/plotchangelog.1:95
+#: ../scripts/pts-subscribe.1:31 ../scripts/rmadison.pl:253
+#: ../scripts/uscan.1:445 ../scripts/uupdate.1:85 ../scripts/who-uploads.1:47
+#, no-wrap
+msgid "B<--version>"
+msgstr "B<--version>"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:72
+msgid "Show the version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: SH
+#: ../scripts/build-rdeps.pl:76 ../scripts/debpkg.1:12
+#, no-wrap
+msgid "REQUIREMENTS"
+msgstr "CONDITIONS D'EXÉCUTION"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:78
+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 composants "
+"vérifiés. 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:82
+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 composant, par exemple :"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:85
+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:87
+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:339 ../scripts/desktop2menu.pl:43
+#: ../scripts/licensecheck.pl:112 ../scripts/namecheck.pl:36
+#: ../scripts/svnpath.pl:93 ../scripts/transition-check.pl:72
+msgid "LICENSE"
+msgstr "LICENCE"
+
+#. type: textblock
+#: ../scripts/build-rdeps.pl:341
+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:349
+msgid "Patrick Schoenfeld <schoenfeld@debian.org>"
+msgstr "Patrick Schoenfeld <schoenfeld@debian.org>"
+
+#. type: textblock
+#: ../scripts/chdist.pl:21
+msgid "chdist - script to easily play with several distributions"
+msgstr "chdist - Script pour facilement jouer avec différentes distributions"
+
+#. type: textblock
+#: ../scripts/chdist.pl:25
+msgid "B<chdist> [options] [command] [command parameters]"
+msgstr "B<chdist> [options] [commande] [paramètres de la commande]"
+
+#. type: textblock
+#: ../scripts/chdist.pl:29
+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: =item
+#: ../scripts/chdist.pl:38
+msgid "-h, --help"
+msgstr "-h, --help"
+
+#. type: textblock
+#: ../scripts/chdist.pl:40 ../scripts/mass-bug.pl:120
+msgid "Provide a usage message."
+msgstr "Afficher un message sur l'utilisation."
+
+#. type: =item
+#: ../scripts/chdist.pl:42
+msgid "-d, --data-dir DIR"
+msgstr "-d, --data-dir REP"
+
+#. type: textblock
+#: ../scripts/chdist.pl:44
+msgid "Choose data directory (default: $HOME/.chdist/)."
+msgstr "Choisir le répertoire des données (par défaut : $HOME/.chdist/)."
+
+#. type: =item
+#: ../scripts/chdist.pl:46
+msgid "-a, --arch ARCH"
+msgstr "-a, --arch ARCH"
+
+#. type: textblock
+#: ../scripts/chdist.pl:48
+msgid "Choose architecture (default: `dpkg --print-architecture`)"
+msgstr "Choisir l'architecture (par défaut : `dpkg --print-architecture`)"
+
+#. type: =item
+#: ../scripts/chdist.pl:50 ../scripts/mass-bug.pl:122
+msgid "--version"
+msgstr "--version"
+
+#. type: Plain text
+#: ../scripts/chdist.pl:52 ../scripts/deb-reversion.dbk:239
+#: ../scripts/mass-bug.pl:124 ../scripts/uscan.1:448
+msgid "Display version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: =item
+#: ../scripts/chdist.pl:60
+msgid "create DIST : prepare a new tree named DIST"
+msgstr "create DIST : préparer une nouvelle arborescence nommée DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:62
+msgid "apt-get DIST (update|source|...) : run apt-get inside DIST"
+msgstr "apt-get DIST (update|source|...) : exécuter apt-get dans DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:64
+msgid "apt-cache DIST (show|showsrc|...) : run apt-cache inside DIST"
+msgstr "apt-cache DIST (show|showsrc|...) : exécuter apt-cache dans DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:66
+msgid "apt-rdepends DIST [...] : run apt-rdepends inside DIST"
+msgstr "apt-rdepends DIST [...] : exécuter apt-rdepends dans DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:68
+msgid "src2bin DIST PKG : get binary packages for a source package in DIST"
+msgstr ""
+"src2bin DIST PKG : récupérer les paquets binaires d'un paquet source de DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:70
+msgid "bin2src DIST PKG : get source package for a binary package in DIST"
+msgstr ""
+"bin2src DIST PKG : récupérer le paquet source d'un paquet binaire de DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:72
+msgid ""
+"compare-packages DIST1 DIST2 [DIST3, ...] : list versions of packages in "
+"several DISTributions"
+msgstr ""
+"compare-packages DIST1 DIST2 [DIST3, ...] : lister les versions de paquetsde "
+"plusieurs DISTributions"
+
+#. type: =item
+#: ../scripts/chdist.pl:74
+msgid "compare-bin-packages DIST1 DIST2 [DIST3, ...]"
+msgstr "compare-bin-packages DIST1 DIST2 [DIST3, ...]"
+
+#. type: =item
+#: ../scripts/chdist.pl:76
+msgid ""
+"compare-versions DIST1 DIST2 : same as compare-packages, but also run dpkg --"
+"compare-versions and display where the package is newer."
+msgstr ""
+"compare-versions DIST1 DIST2 : comme pour compare-packages, mais exécuter "
+"également dpkg --compare-versions et afficher où se trouve le paquet le plus "
+"récent."
+
+#. type: =item
+#: ../scripts/chdist.pl:78
+msgid "compare-bin-versions DIST1 DIST2"
+msgstr "compare-bin-versions DIST1 DIST2"
+
+#. type: =item
+#: ../scripts/chdist.pl:80
+msgid "compare-src-bin-packages DIST : compare sources and binaries for DIST"
+msgstr ""
+"compare-src-bin-packages DIST : comparer les sources et binaires de DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:82
+msgid ""
+"compare-src-bin-versions DIST : same as compare-src-bin-versions, but also "
+"run dpkg --compare-versions and display where the package is newer"
+msgstr ""
+"compare-src-bin-versions DIST : comme pour compare-src-bin-versions, mais "
+"exécuter également dpkg --compare-versions et afficher où se trouve le "
+"paquet le plus récent."
+
+#. type: =item
+#: ../scripts/chdist.pl:84
+msgid ""
+"grep-dctrl-packages DIST [...] : run grep-dctrl on *_Packages inside DIST"
+msgstr ""
+"grep-dctrl-packages DIST [...] : exécuter grep-dctrl sur tous les fichiers "
+"*_Packages de DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:86
+msgid "grep-dctrl-sources DIST [...] : run grep-dctrl on *_Sources inside DIST"
+msgstr ""
+"grep-dctrl-sources DIST [...] : exécuter grep-dctrl sur tous les fichiers "
+"*_Sources de DIST"
+
+#. type: =item
+#: ../scripts/chdist.pl:88
+msgid "list : list available DISTs"
+msgstr "list : lister les DISTributions disponibles"
+
+#. type: textblock
+#: ../scripts/chdist.pl:94
+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|--version>"
+msgstr "B<checkbashisms --help|--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 ""
+"Notez 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 » ; ceci "
+"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 politique Debian sont en désaccord, "
+"B<checkbashisms> autorise par défaut les extensions permises par la "
+"politique mais fournit des options pour une vérification plus stricte."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:24 ../scripts/debchange.1:356
+#: ../scripts/debdiff.1:155 ../scripts/debrelease.1:99
+#: ../scripts/debsign.1:105 ../scripts/dscverify.1:36
+#: ../scripts/pts-subscribe.1:28 ../scripts/rc-alert.1:21
+#: ../scripts/uupdate.1:82 ../scripts/who-uploads.1:44
+#: ../scripts/wnpp-alert.1:23 ../scripts/wnpp-check.1:17
+#, no-wrap
+msgid "B<--help>, B<-h>"
+msgstr "B<--help>, B<-h>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:27 ../scripts/debdiff.1:158
+#: ../scripts/mk-build-deps.pl:81 ../scripts/rc-alert.1:24
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:20
+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 \"echo -n\" usage (non POSIX but required by Debian Policy 10.4.)"
+msgstr ""
+"Vérifier l'utilisation de « echo -n » (pas dans POSIX, mais permise par la "
+"politique 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 -n)."
+msgstr ""
+"Vérifier les points qui ne sont pas POSIX, mais dont le support est exigé "
+"par la politique Debian, section 10.4 (implique -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<--extra>, B<-x>"
+msgstr "B<--extra>, B<-x>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:46
+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 \"$BASH_ENV\" may be preceded by checking "
+"whether \"$BASH\" is set."
+msgstr ""
+"Met en évidence les lignes qui, même si elles ne contiennent pas "
+"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 « $BASH_ENV » peut être précédée d'une "
+"vérification pour s'assurer que « $BASH » est définie."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:46 ../scripts/debdiff.1:158
+#: ../scripts/manpage-alert.1:17 ../scripts/rc-alert.1:24
+#: ../scripts/wnpp-alert.1:26 ../scripts/wnpp-check.1:20
+#, no-wrap
+msgid "B<--version>, B<-v>"
+msgstr "B<--version>, B<-v>"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:49 ../scripts/debdiff.1:161
+#: ../scripts/getbuildlog.1:31 ../scripts/grep-excuses.1:28
+#: ../scripts/manpage-alert.1:20 ../scripts/mk-build-deps.pl:85
+#: ../scripts/rc-alert.1:27 ../scripts/whodepends.1:17
+#: ../scripts/wnpp-alert.1:29 ../scripts/wnpp-check.1:23
+msgid "Show version and copyright information."
+msgstr "Affiche la version et le copyright."
+
+#. type: SH
+#: ../scripts/checkbashisms.1:49 ../scripts/debdiff.1:211
+#, no-wrap
+msgid "EXIT VALUES"
+msgstr "VALEURS DE RETOUR"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:53
+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:53 ../scripts/transition-check.pl:66
+#: ../scripts/uscan.1:506 ../scripts/wnpp-check.1:29
+#, no-wrap
+msgid "1"
+msgstr "1"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:56
+msgid "A possible bashism was detected."
+msgstr "Une construction probablement spécifique à bash a été détectée."
+
+#. type: TP
+#: ../scripts/checkbashisms.1:56
+#, no-wrap
+msgid "2"
+msgstr "2"
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:60
+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: Plain text
+#: ../scripts/checkbashisms.1:62
+msgid "B<lintian>(1)."
+msgstr "B<lintian>(1)."
+
+#. type: Plain text
+#: ../scripts/checkbashisms.1:65
+msgid ""
+"B<checkbashisms> 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>."
+msgstr ""
+"B<checkbashisms> 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>."
+
+#. 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 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 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<arch>"
+msgstr "B<--arch=>I<arch>"
+
+#. 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<dist>"
+msgstr "B<--dist=>I<dist>"
+
+#. 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 sid, or lenny) or distribution names (such as unstable, "
+"or 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 sid ou lenny) ou des noms de "
+"distribution (comme unstable ou experimental) peuvent être utilisés, mais "
+"vous devriez toujours utiliser un type de noms ou l'autre parce que ce nom "
+"est utilisé pour les chemins de fichier et pour trouver les anciens paquets "
+"utilisés pour les rapports de comparaison."
+
+#. type: TP
+#: ../scripts/cowpoke.1:48
+#, no-wrap
+msgid "B<--buildd=>I<host>"
+msgstr "B<--buildd=>I<hôte>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:51
+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:52
+#, no-wrap
+msgid "B<--buildd-user=>I<name>"
+msgstr "B<--buildd-user=>I<nom>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:55
+msgid "Specify the remote user to build as."
+msgstr "Indiquer l'utilisateur distant à utiliser pour la construction."
+
+#. type: TP
+#: ../scripts/cowpoke.1:56 ../scripts/debchange.1:185
+#, no-wrap
+msgid "B<--create>"
+msgstr "B<--create>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:61
+msgid ""
+"Create the remote 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 cowbuilder root in the expected location."
+msgstr ""
+"Créer la racine cowbuilder distante si elle n'existe toujours pas. 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 cowbuilder sera considéré "
+"comme une erreur."
+
+#. type: TP
+#: ../scripts/cowpoke.1:62
+#, no-wrap
+msgid "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+msgstr "B<--dpkg-opts=>I<'opt1 opt2 ...'>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:67
+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 DEBBUILDOPTS in the build host's pbuilderrc."
+msgstr ""
+"Indiquer des options supplémentaires à fournir à B<dpkg-buildpackage>(1). "
+"les différentes options sont séparées par des espaces. Ceci remplacera toute "
+"option fournie par la variable DEBBUILDOPTS du fichier pbuilderrc de la "
+"machine de construction."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:71
+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:75
+msgid "Display the current version information."
+msgstr "Afficher les informations sur la version."
+
+#. type: SH
+#: ../scripts/cowpoke.1:77 ../scripts/debsnap.1:56
+#, no-wrap
+msgid "CONFIGURATION OPTIONS"
+msgstr "OPTIONS DE CONFIGURATION"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:83
+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 "
+"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 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:84
+#, no-wrap
+msgid "Global defaults"
+msgstr "Valeurs par défaut globales"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:86
+msgid "These apply to every arch and dist in a single cowpoke invocation."
+msgstr ""
+"Elles s'appliquent à chaque architecture et distribution lors d'une "
+"invocation de cowpoke."
+
+#. type: TP
+#: ../scripts/cowpoke.1:87
+#, no-wrap
+msgid "B<BUILDD_HOST>"
+msgstr "B<BUILDD_HOST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:91
+msgid ""
+"The network address or fqdn of the build machine where 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ù cowbuilder est configuré. Elle peut être modifiée avec "
+"l'option en ligne de commande B<--buildd>."
+
+#. type: TP
+#: ../scripts/cowpoke.1:91
+#, no-wrap
+msgid "B<BUILDD_USER>"
+msgstr "B<BUILDD_USER>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:97
+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 config for 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 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:97
+#, no-wrap
+msgid "B<BUILDD_ARCH>"
+msgstr "B<BUILDD_ARCH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:104
+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:104
+#, no-wrap
+msgid "B<BUILDD_DIST>"
+msgstr "B<BUILDD_DIST>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:109
+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:110
+#, no-wrap
+msgid "B<INCOMING_DIR>"
+msgstr "B<INCOMING_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:114
+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:114
+#, no-wrap
+msgid "B<PBUILDER_BASE>"
+msgstr "B<PBUILDER_BASE>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:119
+msgid ""
+"The filesystem root for all pbuilder COW and result files.  Arch and 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 architectures et aux "
+"distributions seront normalement créés sous cette racine. Le cache d'apt et "
+"les répertoire temporaire de construction se trouveront également sous ce "
+"chemin."
+
+#. type: TP
+#: ../scripts/cowpoke.1:120
+#, no-wrap
+msgid "B<SIGN_KEYID>"
+msgstr "B<SIGN_KEYID>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:127
+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."
+msgstr ""
+"Si cette option est activée, elle doit contenir l'identifiant de la clé 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."
+
+#. type: TP
+#: ../scripts/cowpoke.1:127
+#, no-wrap
+msgid "B<UPLOAD_QUEUE>"
+msgstr "B<UPLOAD_QUEUE>"
+
+# NOTE: "them" => packages
+#. type: Plain text
+#: ../scripts/cowpoke.1:134
+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."
+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."
+
+#. type: TP
+#: ../scripts/cowpoke.1:135
+#, no-wrap
+msgid "B<BUILDD_ROOTCMD>"
+msgstr "B<BUILDD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:143
+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 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:"
+msgstr ""
+"La commande à utiliser pour obtenir les privilèges root 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 cowbuilder et lui "
+"permettre d'entrer dans son chroot. Vous pouvez donc n'autoriser cet "
+"utilisateur à utiliser des privilèges supplémentaires que pour l'exécution "
+"de cette commande. La ligne suivante dans sudoers permettra d'appeler "
+"cowbuilder sans avoir à forunir de mot de passe :"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:147
+msgid "youruser ALL = NOPASSWD: /usr/sbin/cowbuilder"
+msgstr "utilisateur ALL = NOPASSWD: /usr/sbin/cowbuilder"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:153
+msgid ""
+"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."
+msgstr ""
+"Autrement, vous pouvez utiliser ssh avec une clé ou tout autre mécanisme "
+"correspondant à votre politique locale. 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:154
+#, no-wrap
+msgid "B<DEBOOTSTRAP>"
+msgstr "B<DEBOOTSTRAP>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:158
+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: SS
+#: ../scripts/cowpoke.1:160
+#, no-wrap
+msgid "Arch and dist specific options"
+msgstr "Options spécifiques à des architectures ou distributions"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:163
+msgid ""
+"These are variables of the form: $arch_$dist_VAR which apply only for a "
+"particular target arch/dist build."
+msgstr ""
+"Ce sont des variables de la forme $arch_$dist_VAR qui ne s'appliquent qu'à "
+"une cible de construction spécifique à une architecture et à une "
+"distribution."
+
+#. type: TP
+#: ../scripts/cowpoke.1:164
+#, no-wrap
+msgid "archB<_>distB<_RESULT_DIR>"
+msgstr "archB<_>distB<_RESULT_DIR>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:175
+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, 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 (sources 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, 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:176
+#, no-wrap
+msgid "archB<_>distB<_BASE_PATH>"
+msgstr "archB<_>distB<_BASE_PATH>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:182
+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: SH
+#: ../scripts/cowpoke.1:184
+#, no-wrap
+msgid "CONFIGURATION FILES"
+msgstr "FICHIERS DE CONFIGURATION"
+
+#. type: TP
+#: ../scripts/cowpoke.1:185
+#, no-wrap
+msgid "I</etc/cowpoke.conf>"
+msgstr "I</etc/cowpoke.conf>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:188
+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:188
+#, no-wrap
+msgid "I<~/.cowpoke>"
+msgstr "I<~/.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:191 ../scripts/debsnap.1:90
+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:191
+#, no-wrap
+msgid "I<.cowpoke>"
+msgstr "I<.cowpoke>"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:195
+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 surchargeront toute option 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:199
+msgid ""
+"If the environment variable B<COWPOKE_CONF> is set, it specifies an "
+"addtional 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:201
+#, no-wrap
+msgid "COWBUILDER CONFIGURATION"
+msgstr "CONFIGURATION DE COWBUILDER"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:210
+msgid ""
+"There is nothing particularly special required to configure a cowbuilder "
+"instance for use with B<cowpoke>.  Simply create them in the flavour you "
+"require with `cowbuilder --create` according to the 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 cowbuilder does not require B<cowpoke> "
+"installed locally."
+msgstr ""
+"Il n'y a rien de particulier à faire pour configurer une instance de "
+"cowbuilder pour qu'elle puisse être utilisée avec B<cowpoke>. Créer la "
+"simplement telle que vous en avez besoin avec « cowbuilder --create » en "
+"suivant la documentation de 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 cowbuilder tourne n'a pas besoin que "
+"B<cowpoke> soit installé localement."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:216
+msgid ""
+"The build machine should have the lintian and 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 'host' alias specified by "
+"B<UPLOAD_QUEUE>."
+msgstr ""
+"La machine de construction doit avoir les paquets lintian et 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 indiqué par "
+"B<UPLOAD_QUEUE>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:222
+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 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 cowbuilder est tant que root en utilisant B<BUILDD_ROOTCMD>. Les "
+"clés 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 clés seront nécessaires sur la machine qui exécute "
+"B<cowpoke>."
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:229
+msgid ""
+"When B<cowpoke> is invoked, it will first attempt to update the 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 cowbuilder during the update (or creation) of the build root."
+msgstr ""
+"Quand B<cowpoke> est appelé, il cherche d'abord à mettre à jour l'image "
+"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 cowbuilder pendant la mise à "
+"jour (ou la création) de la racine de construction."
+
+#. type: =head1
+#: ../scripts/cowpoke.1:231 ../scripts/rmadison.pl:290
+#, no-wrap
+msgid "NOTES"
+msgstr "NOTES"
+
+#. type: Plain text
+#: ../scripts/cowpoke.1:240
+msgid ""
+"Since 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.  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 root, "
+"B<cowpoke> nécessite également certains des privilèges de root. Et toutes "
+"les horreurs qui peuvent arriver pourront vous arriver un jour. cowbuilder a "
+"été connu pour accidentellement écraser 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:246
+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:250
+msgid "B<cowpoke> was written by Ron E<lt>ron@debian.orgE<gt>."
+msgstr "B<cowpoke> a été écrit par Ron E<lt>ron@debian.orgE<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 généré 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 .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> généré au cours de cette exécution. Il "
+"affiche ensuite les informations des fichiers .deb générés 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:77
+#, 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:83
+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<-ME<lt>moduleE<gt>>"
+msgstr "B<-M>E<lt>I<module>E<gt>"
+
+#. 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<-PE<lt>packageE<gt>>"
+msgstr "B<-P>E<lt>I<paquet>E<gt>"
+
+#. 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<-VE<lt>versionE<gt>>"
+msgstr "B<-V>E<lt>I<version>E<gt>"
+
+#. 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<-TE<lt>tagE<gt>>"
+msgstr "B<-T>E<lt>I<étiquette>E<gt>"
+
+#. 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<-RE<lt>root\\ directoryE<gt>>"
+msgstr "B<-R>E<lt>I<répertoire_racine>E<gt>"
+
+#. 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<-WE<lt>work directoryE<gt>>"
+msgstr "B<-W>E<lt>I<espace_de_travail>E<gt>"
+
+#. 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<-xE<lt>prefixE<gt>>"
+msgstr "B<-x>E<lt>I<préfixe>E<gt>"
+
+#. 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 "Cette option fournit 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:89 ../scripts/debi.1:96
+#: ../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:92 ../scripts/debi.1:99
+#: ../scripts/debrsign.1:53
+msgid "Show help message and version information respectively."
+msgstr "Affiche respectivement le message d'aide et la version."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:64
+msgid ""
+"B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1)  and B<debc>(1)."
+msgstr ""
+"B<cvs-buildpackage>(1), B<cvs-debi>(1), B<cvs-debuild>(1) et B<debc>(1)."
+
+#. type: Plain text
+#: ../scripts/cvs-debc.1:68 ../scripts/cvs-debi.1:72
+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 pour donner ce programme par 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 - Installer un paquet généré 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> généré 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>. Notez 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 privilèges 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 privilèges 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:68
+msgid ""
+"B<cvs-buildpackage>(1), B<cvs-debc>(1)  B<cvs-debuild>(1)  and B<debi>(1)."
+msgstr ""
+"B<cvs-buildpackage>(1), B<cvs-debc>(1) B<cvs-debuild>(1) et 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 généré 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> généré 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>. Notez 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: TP
+#: ../scripts/cvs-debrelease.1:57 ../scripts/debc.1:85
+#: ../scripts/debchange.1:347 ../scripts/debclean.1:77
+#: ../scripts/debdiff.1:151 ../scripts/debi.1:92 ../scripts/debrelease.1:95
+#: ../scripts/debsign.1:101 ../scripts/dpkg-depcheck.1:92
+#: ../scripts/dscverify.1:24 ../scripts/grep-excuses.1:14
+#: ../scripts/nmudiff.1:69 ../scripts/rmadison.pl:257 ../scripts/uscan.1:438
+#: ../scripts/uupdate.1:78 ../scripts/who-uploads.1:40
+#, no-wrap
+msgid "B<--no-conf>, B<--noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:69
+msgid "B<cvs-buildpackage>(1), B<debrelease>(1)  and B<cvs-debuild>(1)."
+msgstr "B<cvs-buildpackage>(1), B<debrelease>(1) et B<cvs-debuild>(1)."
+
+#. type: Plain text
+#: ../scripts/cvs-debrelease.1:73
+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:38 ../scripts/debuild.1:221
+#, no-wrap
+msgid "B<--no-conf, --noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:40 ../scripts/debuild.1:225
+#, no-wrap
+msgid "B<--rootcmd=>I<gain-root-command, >B<-r>I<gain-root-command>"
+msgstr "B<--rootcmd>=I<commande-pour-devenir-root>, B<-r>I<commande-pour-devenir-root>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:42 ../scripts/debuild.1:228
+#, no-wrap
+msgid "B<--preserve-env>"
+msgstr "B<--preserve-env>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:44 ../scripts/debuild.1:231
+#, 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:238
+#, no-wrap
+msgid "B<--set-envvar=>I<var>B<=>I<value, >B<-e>I<var>B<=>I<value>"
+msgstr "B<--set-envvar>=I<var>=I<valeur>, B<-e>I<var>=I<valeur>"
+
+#. type: TP
+#: ../scripts/cvs-debuild.1:48
+#, no-wrap
+msgid "B<--lintian, --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:59
+msgid ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1)  and "
+"B<lintian>(1)."
+msgstr ""
+"B<cvs-buildpackage>(1), B<debuild>(1), B<dpkg-buildpackage>(1) et B<lintian>"
+"(1)."
+
+#. type: Plain text
+#: ../scripts/cvs-debuild.1:60
+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:7
+msgid ""
+"B<dcmd> [I<options>] [I<command>] [I<changes-file>|I<dsc-file>] [I<...>]"
+msgstr ""
+"B<dcmd> [I<options>] [I<commande>] [I<fichier-changes>|I<fichier-dsc>] [I<..."
+">]"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:12
+msgid ""
+"B<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 file itself.  "
+"It allows easy manipulation of all the files involved in an upload (for "
+"changes files) or a source package (for dsc files)."
+msgstr ""
+"B<dcmd> remplace toutes les références à un fichier .dsc ou .changes sur la "
+"ligne de commande par la liste des fichiers de sa section « Files », plus le "
+"fichier lui-même. Ceci facilite la manipulation de tous les fichiers "
+"impliqués dans un upload (pour les fichiers .changes) ou un paquet source "
+"(pour les fichiers .dsc)."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:16
+msgid ""
+"If I<command> is omitted (that is the first argument is an existing .dsc or ."
+"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 le premier paramètre est "
+"un fichier .dsc ou .changes), la liste des fichiers est affichée sur la "
+"sortie standard, un fichier par ligne. C'est utile pour l'utilisation de "
+"guillemets."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:20
+msgid ""
+"There are a number of options which may be used in order to select only a "
+"subset of the files listed in the .dsc or .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 .dsc ou .changes. Si un fichier demandé n'est pas "
+"trouvé, un message d'erreur est affiché."
+
+#. type: TP
+#: ../scripts/dcmd.1:20
+#, no-wrap
+msgid "B<--dsc>"
+msgstr "B<--dsc>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:23
+msgid "Select the .dsc file."
+msgstr "Sélectionner le fichier .dsc."
+
+#. type: TP
+#: ../scripts/dcmd.1:23
+#, no-wrap
+msgid "B<--schanges>"
+msgstr "B<--schanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:26
+msgid "Select .changes files for the 'source' architecture."
+msgstr "Sélectionner les fichiers .changes pour l'architecture « source »."
+
+#. type: TP
+#: ../scripts/dcmd.1:26
+#, no-wrap
+msgid "B<--bchanges>"
+msgstr "B<--bchanges>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:29
+msgid "Select .changes files for binary architectures."
+msgstr "Sélectionner les fichiers .changes pour les architectures binaires."
+
+#. type: TP
+#: ../scripts/dcmd.1:29
+#, no-wrap
+msgid "B<--changes>"
+msgstr "B<--changes>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:32
+msgid "Select .changes files. Implies --schanges and --bchanges."
+msgstr "Sélectionner les fichiers .changes. Implique --schanges et --bchanges."
+
+#. type: TP
+#: ../scripts/dcmd.1:32
+#, no-wrap
+msgid "B<--archdeb>"
+msgstr "B<--archdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:35
+msgid "Select architecture-dependent binary packages (.deb files)."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers .deb) dépendant d'une "
+"architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:35
+#, no-wrap
+msgid "B<--indepdeb>"
+msgstr "B<--indepdeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:38
+msgid "Select architecture-independent binary packages (.deb files)."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers .deb) indépendant d'une "
+"architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:38
+#, no-wrap
+msgid "B<--deb>"
+msgstr "B<--deb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:41
+msgid "Select binary packages (.deb files). Implies --archdeb and --indepdeb."
+msgstr ""
+"Sélectionner les paquets binaires (fichiers .deb). Implique --archdeb et --"
+"indepdeb."
+
+#. type: TP
+#: ../scripts/dcmd.1:41
+#, no-wrap
+msgid "B<--archudeb>"
+msgstr "B<--archudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:44
+msgid "Select architecture-dependent udeb binary packages."
+msgstr "Sélectionner les paquets udeb binaires dépendant d'une architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:44
+#, no-wrap
+msgid "B<--indepudeb>"
+msgstr "B<--indepudeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:47
+msgid "Select architecture-independent udeb binary packages."
+msgstr "Sélectionner les paquets udeb binaires indépendant d'une architecture."
+
+#. type: TP
+#: ../scripts/dcmd.1:47
+#, no-wrap
+msgid "B<--udeb>"
+msgstr "B<--udeb>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:50
+msgid "Select udeb binary packages. Implies --archudeb and --indepudeb."
+msgstr ""
+"Sélectionner les paquets udeb binaires. Implique --archudeb et --indepudeb."
+
+#. type: TP
+#: ../scripts/dcmd.1:50
+#, no-wrap
+msgid "B<--tar, --orig>"
+msgstr "B<--tar, --orig>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:53
+msgid "Select the tar file."
+msgstr "Sélectionner le fichier tar."
+
+#. type: TP
+#: ../scripts/dcmd.1:53
+#, no-wrap
+msgid "B<--diff>"
+msgstr "B<--diff>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:56
+msgid "Select the Debian diff file."
+msgstr "Sélectionner le fichier diff Debian."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:59
+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:63
+msgid ""
+"It is not possible to combine positive filtering options (e.g. --dsc)  and "
+"negative filtering options (e.g. --no-changes) in the same B<dcmd> "
+"invocation."
+msgstr ""
+"Il n'est pas possible de combiner les options de filtrage positives (par "
+"exemple --dsc) et négatives (par exemple --no-changes) dans le même appel à "
+"B<dcmd>."
+
+#. type: TP
+#: ../scripts/dcmd.1:63
+#, no-wrap
+msgid "B<--no-fail-on-missing, -r>"
+msgstr "B<--no-fail-on-missing, -r>"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:66
+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 faire d'erreur."
+
+#. type: SH
+#: ../scripts/dcmd.1:66 ../scripts/debuild.1:367 ../scripts/getbuildlog.1:31
+#: ../scripts/rc-alert.1:96
+#, no-wrap
+msgid "EXAMPLES"
+msgstr "EXEMPLES"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:68
+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:76
+#, 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:81
+#, 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:84
+msgid "Check the contents of a source package:"
+msgstr "Vérifier le contenu d'un paquet source :"
+
+#. type: Plain text
+#: ../scripts/dcmd.1:91
+#, 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:96
+#, 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:101
+msgid "B<dpkg-source>(1), B<dpkg-genchanges>(1)."
+msgstr "B<dpkg-source>(1), B<dpkg-genchanges>(1)."
+
+#. type: Plain text
+#: ../scripts/dcmd.1:103
+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."
+
+# NOTE: -- -> -
+#. type: textblock
+#: ../scripts/dcontrol.pl:201
+msgid ""
+"dcontrol -- Query package and source control files for all Debian "
+"distributions"
+msgstr ""
+"dcontrol - Interroger les fichiers de contrôle des paquets sources et "
+"binaires pour toutes les distributions Debian"
+
+#. type: =item
+#: ../scripts/dcontrol.pl:207
+msgid "B<dcontrol> [I<options>] I<package>[I<modifiers>] [I<...>]"
+msgstr "B<dcontrol> [I<options>] I<package>[I<modificateur>] [I<...>]"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:213
+msgid ""
+"B<dcontrol> queries a remote database of Debian binary and source package "
+"control files. It can be thought of as an B<apt-cache> webservice that also "
+"operates for distributions and architectures different from the local "
+"machine."
+msgstr ""
+"B<dcontrol> interroge une base de données distante des fichiers de contrôle "
+"des paquets Debian source ou binaires. On peut le considérer comme un "
+"service web de type B<apt-cache> qui fonctionne pour les distributions et "
+"les architectures autres que celles de la machine locale."
+
+#. type: =head1
+#: ../scripts/dcontrol.pl:217
+msgid "MODIFIERS"
+msgstr "MODIFICATEURS"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:219
+msgid "Like B<apt-cache>, packages can be suffixed by modifiers:"
+msgstr ""
+"Comme pour B<apt-cache>, un modificateur peut être ajouté en suffixe du "
+"paquet :"
+
+#. type: =item
+#: ../scripts/dcontrol.pl:223
+msgid "B<=>I<version>"
+msgstr "B<=>I<version>"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:225
+msgid "Exact version match"
+msgstr "Correspondance de version exacte"
+
+#. type: =item
+#: ../scripts/dcontrol.pl:227
+msgid "B<@>I<architecture>"
+msgstr "B<@>I<architecture>"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:229
+msgid ""
+"Query this only architecture. Use B<@source> for source packages, B<@binary> "
+"excludes source packages."
+msgstr ""
+"N'interroger que cette architecture. Utilisez B<@source> pour les paquets "
+"source, B<@binary> exclut les paquets source."
+
+#. type: =item
+#: ../scripts/dcontrol.pl:232
+msgid "B</>[I<archive>B<:>][I<suite>][B</>I<component>]"
+msgstr "B</>[I<archive>B<:>][I<suite>][B</>I<composant>]"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:234
+msgid ""
+"Restrict to I<archive> (debian, debian-backports, debian-security, debian-"
+"volatile), I<suite> (always codenames, with the exception of experimental), "
+"and/or I<component> (main, updates/main, ...). Use two slashes (B<//>) to "
+"separate suite and component if the suite name contains slashes.  (Component "
+"can be left empty.)"
+msgstr ""
+"Restreindre à l'I<archive> (debian, debian-backports, debian-security, "
+"debian-volatile), la I<suite> (toujours des noms de code, à l'exception "
+"d'experimental), et/ou le I<composant> (main, updates/main, ...). Utilisez "
+"deux barres obliques (B<//>) pour séparer la suite du composant si le nom de "
+"la suite contient une barre oblique. (Le composant peut rester vide)"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:242
+msgid ""
+"By default, all versions, suites, and architectures are queried. Refer to "
+"B<http://qa.debian.org/cgi-bin/dcontrol> for currently supported values."
+msgstr ""
+"Par défaut, toutes les versions, toutes les suites et toutes les "
+"architectures sont interrogées. Consultez B<http://qa.debian.org/cgi-bin/"
+"dcontrol> pour les valeurs prises en charge."
+
+#. type: =item
+#: ../scripts/dcontrol.pl:249
+msgid "B<-s>, B<--show-suites>"
+msgstr "B<-s>, B<--show-suites>"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:251
+msgid "Add headers showing which distribution the control file is from."
+msgstr ""
+"Ajouter des en-têtes indiquant de quelle distribution le fichier de contrôle "
+"provient."
+
+#. type: =item
+#: ../scripts/dcontrol.pl:253
+msgid "B<-d>, B<--debug>"
+msgstr "B<-d>, B<--debug>"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:255
+msgid "Print URL queried."
+msgstr "Affiche l'URL demandée."
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:259 ../scripts/dget.pl:587
+msgid "Show a help message."
+msgstr "Affiche un message d'aide."
+
+#. type: TP
+#: ../scripts/dcontrol.pl:261 ../scripts/dget.pl:589
+#: ../scripts/getbuildlog.1:28
+#, no-wrap
+msgid "B<-V>, B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:263 ../scripts/dget.pl:591
+msgid "Show version information."
+msgstr "Affiche les informations sur la version."
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/dcontrol.pl:269 ../scripts/dget.pl:597
+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 positionner 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/dcontrol.pl:277
+msgid "DCONTROL_URL"
+msgstr "DCONTROL_URL"
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:279
+msgid "URL to query. Default is B<http://qa.debian.org/cgi-bin/dcontrol>."
+msgstr ""
+"URL à interroger. C'est par défaut B<http://qa.debian.org/cgi-bin/dcontrol>."
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:285
+msgid "This program is Copyright (C) 2009 by Christoph Berg <myon@debian.org>."
+msgstr "Ce programme est Copyright (C) 2009 Christoph Berg <myon@debian.org>."
+
+#. type: textblock
+#: ../scripts/dcontrol.pl:287 ../scripts/dget.pl:636
+#: ../scripts/tagpending.pl:440
+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/dcontrol.pl:292
+msgid "B<apt-cache>(1)."
+msgstr "B<apt-cache>(1)."
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "DD-LIST"
+msgstr "DD-LIST"
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "2005-06-28"
+msgstr "2005-06-28"
+
+#. type: TH
+#: ../scripts/dd-list.1:17
+#, no-wrap
+msgid "Debian"
+msgstr "Debian"
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:22
+msgid "dd-list - nicely list .deb packages and their maintainers"
+msgstr "dd-list - Lister joliment les paquets .deb et leurs responsables"
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:26
+msgid ""
+"B<dd-list> [B<-hiuV>] [B<--help>] [B<--stdin>] [B<--dctrl>] [B<--version>] "
+"[B<--uploaders>] [B<package>...]"
+msgstr ""
+"B<dd-list> [B<-hiuV>] [B<--help>] [B<--stdin>] [B<--dctrl>] [B<--version>] "
+"[B<--uploaders>] [B<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 paquet source ou binaire 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 ""
+"Ceci 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: TP
+#: ../scripts/dd-list.1:59
+#, no-wrap
+msgid "B<-h>,B<--help>"
+msgstr "B<-h>, B<--help>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:62
+msgid "Print brief help message."
+msgstr "Affiche 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 ""
+"Lit les noms de paquet depuis l'entrée standard, plutôt que les obtenir "
+"depuis la ligne de commande. Les noms de paquet 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 ""
+"Lit la liste de paquets depuis l'entrée standard, au format du fichier de "
+"contrôle Debian (« debian/control »). Ceci 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<-u>,B<--uploaders>"
+msgstr "B<-u>, B<--uploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:81
+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 ""
+"Lister aussi les 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:81
+#, no-wrap
+msgid "B<-nou>,B<--nouploaders>"
+msgstr "B<-nou>,B<--nouploaders>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:84
+msgid "Only list package Maintainers, do not list Uploaders."
+msgstr ""
+"Ne lister que les responsables (Maintainers) d'un paquet, pas les Uploaders."
+
+#. type: TP
+#: ../scripts/dd-list.1:84
+#, no-wrap
+msgid "B<-b>,B<--print-binary>"
+msgstr "B<-b>, B<--print-binary>"
+
+#. type: Plain text
+#: ../scripts/dd-list.1:89
+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 sources (sans effet avec B<--dctrl> si la ligne I<Package:> contient "
+"des noms de paquets source)."
+
+#. type: TP
+#: ../scripts/dd-list.1:89
+#, no-wrap
+msgid "B<-V>,B<--version>"
+msgstr "B<-V>, B<--version>"
+
+#.  --------------------------------------------------------------------
+#. type: Plain text
+#: ../scripts/dd-list.1:93
+msgid "Print the version."
+msgstr "Affiche la version."
+
+#. type: Plain text
+#: ../scripts/dd-list.1:95
+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:96
+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 généré"
+
+#. 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 .deb and .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 .deb et .udeb générés. 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 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> / 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: SH
+#: ../scripts/debc.1:28 ../scripts/debchange.1:106 ../scripts/debclean.1:24
+#: ../scripts/debi.1:29 ../scripts/debrelease.1:20 ../scripts/debuild.1:49
+#: ../scripts/uscan.1:276
+#, 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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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<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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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/debc.1:41 ../scripts/debchange.1:119 ../scripts/debclean.1:37
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:63
+#: ../scripts/uscan.1:293
+msgid "DEVSCRIPTS_CHECK_DIRNAME_LEVEL can take the following values:"
+msgstr "DEVSCRIPTS_CHECK_DIRNAME_LEVEL peut prendre les valeurs suivantes :"
+
+#. type: TP
+#: ../scripts/debc.1:41 ../scripts/debchange.1:119 ../scripts/debclean.1:37
+#: ../scripts/debi.1:42 ../scripts/debrelease.1:33 ../scripts/debuild.1:63
+#: ../scripts/uscan.1:293
+#, no-wrap
+msgid "B<0>"
+msgstr "B<0>"
+
+#. type: Plain text
+#: ../scripts/debc.1:44 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:66
+#: ../scripts/uscan.1:296
+msgid "Never check the directory name."
+msgstr "Ne vérifie jamais le nom du répertoire."
+
+#. type: TP
+#: ../scripts/debc.1:44 ../scripts/debchange.1:122 ../scripts/debclean.1:40
+#: ../scripts/debi.1:45 ../scripts/debrelease.1:36 ../scripts/debuild.1:66
+#: ../scripts/uscan.1:296
+#, no-wrap
+msgid "B<1>"
+msgstr "B<1>"
+
+#. type: Plain text
+#: ../scripts/debc.1:48 ../scripts/debchange.1:126 ../scripts/debclean.1:44
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:70
+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érifie 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: TP
+#: ../scripts/debc.1:48 ../scripts/debchange.1:126 ../scripts/debclean.1:44
+#: ../scripts/debi.1:49 ../scripts/debrelease.1:40 ../scripts/debuild.1:70
+#: ../scripts/uscan.1:302
+#, no-wrap
+msgid "B<2>"
+msgstr "B<2>"
+
+#. type: Plain text
+#: ../scripts/debc.1:51 ../scripts/debchange.1:129 ../scripts/debclean.1:47
+#: ../scripts/debi.1:52 ../scripts/debrelease.1:43 ../scripts/debuild.1:73
+#: ../scripts/uscan.1:305
+msgid "Always check the directory name."
+msgstr "Vérifie toujours le nom du répertoire."
+
+#. type: Plain text
+#: ../scripts/debc.1:64 ../scripts/debchange.1:142 ../scripts/debclean.1:60
+#: ../scripts/debi.1:65 ../scripts/debrelease.1:56 ../scripts/debuild.1:86
+#: ../scripts/uscan.1:318
+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 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 courant "
+"(donné par B<pwd>(1)) correspond à l'expression rationnelle donnée par la "
+"variable 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 « / », alors elle doit correspondre au chemin "
+"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 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: TP
+#: ../scripts/debc.1:71 ../scripts/debi.1:72 ../scripts/debrelease.1:81
+#: ../scripts/debsign.1:95
+#, no-wrap
+msgid "B<--debs-dir> I<DIR>"
+msgstr "B<--debs-dir> I<RÉP>"
+
+#. type: Plain text
+#: ../scripts/debc.1:77
+msgid ""
+"Look for the I<.changes>, I<.deb> and I<.udeb> files 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 ""
+"Cherche les fichiers I<.changes>, I<.deb> et I<.udeb> 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/debc.1:77 ../scripts/debchange.1:339 ../scripts/debclean.1:69
+#: ../scripts/debi.1:84 ../scripts/debrelease.1:87 ../scripts/debuild.1:276
+#: ../scripts/uscan.1:427
+#, 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/debchange.1:343
+#: ../scripts/debchange.1:347 ../scripts/debclean.1:73
+#: ../scripts/debclean.1:77 ../scripts/debi.1:88 ../scripts/debi.1:92
+#: ../scripts/debrelease.1:91 ../scripts/debrelease.1:95
+#: ../scripts/debuild.1:280 ../scripts/debuild.1:284 ../scripts/uscan.1:431
+#: ../scripts/uscan.1:435
+msgid ""
+"See the above section \"Directory name checking\" for an explanation of this "
+"option."
+msgstr ""
+"Veuillez consulter la section ci-dessus « Vérification du nom du "
+"répertoire » pour une explication de cette option."
+
+#. type: TP
+#: ../scripts/debc.1:81 ../scripts/debchange.1:343 ../scripts/debclean.1:73
+#: ../scripts/debi.1:88 ../scripts/debrelease.1:91 ../scripts/debuild.1:280
+#: ../scripts/uscan.1:431
+#, no-wrap
+msgid "B<--check-dirname-regex> I<regex>"
+msgstr "B<--check-dirname-regex> I<regex>"
+
+# NOTE: et --noconf ?
+#. type: Plain text
+#: ../scripts/debc.1:98 ../scripts/debchange.1:368 ../scripts/debclean.1:96
+#: ../scripts/debi.1:105 ../scripts/debrelease.1:111 ../scripts/debrsign.1:63
+#: ../scripts/debsign.1:117 ../scripts/nmudiff.1:85
+#: ../scripts/pts-subscribe.1:48 ../scripts/uupdate.1:94
+#: ../scripts/who-uploads.1:56
+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 "
+"neutraliser 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:98 ../scripts/debi.1:105 ../scripts/debrelease.1:116
+#: ../scripts/debsign.1:130
+#, no-wrap
+msgid "B<DEBRELEASE_DEBS_DIR>"
+msgstr "B<DEBRELEASE_DEBS_DIR>"
+
+#. type: Plain text
+#: ../scripts/debc.1:108
+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. Ceci 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. Notez que cela concerne également B<debrelease>(1), ce qui "
+"explique le nom étrange de l'option."
+
+#. type: TP
+#: ../scripts/debc.1:108 ../scripts/debchange.1:376 ../scripts/debclean.1:100
+#: ../scripts/debi.1:115 ../scripts/debrelease.1:125 ../scripts/debuild.1:360
+#: ../scripts/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:115 ../scripts/debchange.1:383 ../scripts/debclean.1:107
+#: ../scripts/debi.1:122 ../scripts/debrelease.1:132 ../scripts/debuild.1:367
+msgid ""
+"See the above section \"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 « Vérification du nom du répertoire » ci-"
+"dessus pour une explication de ces variables. Notez 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:120
+msgid "B<dpkg-deb>(1), B<debdiff>(1)  and B<devscripts.conf>(5)."
+msgstr "B<dpkg-deb>(1), B<debdiff>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debc.1:122
+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:29
+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 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 changelog or 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 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, voir ci-dessous). 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 changelog. B<Notez 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 changelog codés autrement. Enfin, un fichier "
+"changelog ou debian/NEWS peut être créé à partir de rien en utilisant "
+"l'option B<--create> décrite ci-dessous."
+
+#. type: Plain text
+#: ../scripts/debchange.1:42
+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 http://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, http://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 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:49
+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 (voir leurs descriptions ci-"
+"dessous). 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:65
+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<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. The alternate I<changelog> heuristic assumes the "
+"package has been released unless its changelog contains I<UNRELEASED> in the "
+"distribution field. If this heuristic is enabled then the distribution will "
+"default to I<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."
+msgstr ""
+"Deux types différents 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<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 avec succès n'y est enregistré. C'est peut-être "
+"parce l'envoi précédent a été exécuté avec une version de B<dupload> "
+"inférieure à 2.1 ou parce que l'envoi a échoué. L'autre heuristique "
+"(I<changelog>) suppose que le paquet a été distribué à moins que le journal "
+"des modifications ne contienne I<UNRELEASED> dans le champ de la "
+"distribution. Si cette heuristique est activée alors la distribution sera "
+"changée en I<UNRELEASED> dans les nouvelles entrées du journal des "
+"modifications, et l'option B<--mainttrailer> décrite ci-dessus sera activée "
+"automatiquement. Ceci peut être utile si un paquet peut être distribué par "
+"différents responsables, ou si vous ne voulez pas garder les journaux "
+"d'envoi."
+
+#. type: Plain text
+#: ../scripts/debchange.1:83
+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 positionnée, sa "
+"valeur est utilisée comme nom complet du responsable. Si la variable "
+"d'environnement B<DEBEMAIL> est positionnée, 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 positionnée. Si cette variable d'environnement "
+"n'est pas positionnée, le même test est réalisé sur B<EMAIL>. Puis, si le "
+"nom complet n'est toujours pas 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 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 "
+"changelog est utilisée. Pour simplifier, il est préférable de positionner "
+"les variables d'environnement B<DEBEMAIL> et B<DEBFULLNAME> lorsque ce "
+"script est utilisé."
+
+#. type: Plain text
+#: ../scripts/debchange.1:96
+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<--[no]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 changelogs 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 courante, et que le responsable est différent du responsable qui "
+"est mentionné comme ayant créé les entrées précédentes, alors les lignes "
+"seront ajoutées au changelog pour indiquer quel responsable a fait quelle "
+"modification. Pour le moment, seulement un des différents styles "
+"d'enregistrement de ces informations est supporté, dans lequel le nom du "
+"responsable qui a fait quelques modifications apparaît sur une ligne avant "
+"les modifications, entre crochets. Ceci peut-être activé ou désactivé en "
+"utilisant l'option B<--[no]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:102
+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. Ceci 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:106
+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 courante. Ceci est particulièrement utile lors de la conception de "
+"rétroportages."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debchange.1:117
+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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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:146
+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 CHANGELOG "
+"environment variable, as described below."
+msgstr ""
+"Le journal des modifications par défaut à éditer est I<debian/changelog> ; "
+"cependant, ceci peut être changé en utilisant les options B<--changelog> ou "
+"B<--news>, ou la variable d'environnement CHANGELOG, comme décrit plus bas."
+
+#. type: TP
+#: ../scripts/debchange.1:147
+#, no-wrap
+msgid "B<--append>, B<-a>"
+msgstr "B<--append>, B<-a>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:150
+msgid "Add a new changelog entry at the end of the current version's entries."
+msgstr ""
+"Ajoute une nouvelle entrée au fichier changelog à la fin des entrées de la "
+"version actuelle."
+
+#. type: TP
+#: ../scripts/debchange.1:150
+#, no-wrap
+msgid "B<--increment>, B<-i>"
+msgstr "B<--increment>, B<-i>"
+
+# NOTE: signature
+#. type: Plain text
+#: ../scripts/debchange.1:157
+msgid ""
+"Increment either the final component of the Debian release number or, if "
+"this is a native Debian package, the version number.  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."
+msgstr ""
+"Incrémente le numéro de version Debian ou, dans le cas d'un paquet Debian "
+"natif, le numéro de version. Cela crée une nouvelle section au début du "
+"fichier changelog 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."
+
+#. type: TP
+#: ../scripts/debchange.1:157
+#, 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:163
+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."
+msgstr ""
+"Permet d'indiquer explicitement le numéro de version (avec la partie "
+"relative à la version Debian) et 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é."
+
+#. type: TP
+#: ../scripts/debchange.1:163
+#, no-wrap
+msgid "B<--edit>, B<-e>"
+msgstr "B<--edit>, B<-e>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:166
+msgid "Edit the changelog in an editor."
+msgstr "Édite le journal des modifications dans un éditeur."
+
+#. type: TP
+#: ../scripts/debchange.1:166
+#, no-wrap
+msgid "B<--release>, B<-r>"
+msgstr "B<--release>, B<-r>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:174
+msgid ""
+"Finalize the changelog for a release.  Update the changelog timestamp. If "
+"the distribution is set to I<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, I<unstable> will be used."
+msgstr ""
+"Finaliser le fichier changelog pour un envoi. Ceci met à jour l'horodatage "
+"du fichier 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 "
+"I<unstable>."
+
+#. type: TP
+#: ../scripts/debchange.1:174
+#, no-wrap
+msgid "B<--force-save-on-release>"
+msgstr "B<--force-save-on-release>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:179
+msgid ""
+"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)"
+msgstr ""
+"Quand l'option --release est utilisée et qu'un éditeur a été ouvert pour "
+"permettre de vérifier le journal des modifications, l'utilisateur doit "
+"enregistrer le journal de modifications ouvert par l'éditeur. Sinon, le "
+"journal d'origine ne sera pas modifié. (option par défaut)"
+
+#. type: TP
+#: ../scripts/debchange.1:179
+#, no-wrap
+msgid "B<--no-force-save-on-release>"
+msgstr "B<--no-force-save-on-release>"
+
+# NOTE: made be => may be
+#. type: Plain text
+#: ../scripts/debchange.1:185
+msgid ""
+"Do not do so. Note that a dummy changelog entry made 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 --force-save-on-release. Notez 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:197
+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 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 "
+"changelog file."
+msgstr ""
+"Ceci 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ées 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 journal des modifications généré. 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 journal des modifications généré."
+
+#. type: TP
+#: ../scripts/debchange.1:197
+#, no-wrap
+msgid "B<--empty>"
+msgstr "B<--empty>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:204
+msgid ""
+"When used in combination with B<--create>, suppress the automatic addition "
+"of an \"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 « initial release » (de telle sorte que le "
+"prochain appel à B<debchange> ajoutera la première entrée). Notez que B<dpkg-"
+"parsechangelog> générera des avertissements du fait de l'absence de "
+"description de modifications."
+
+#. type: TP
+#: ../scripts/debchange.1:204 ../scripts/uscan.1:390
+#, no-wrap
+msgid "B<--package> I<package>"
+msgstr "B<--package> I<paquet>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:209
+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 ""
+"Indique 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:209
+#, no-wrap
+msgid "B<--nmu>, B<-n>"
+msgstr "B<--nmu>, B<-n>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:218
+msgid ""
+"Increment the Debian release number for a non-maintainer upload by either "
+"appending a \".1\" to a non-NMU version number (unless the package is Debian "
+"native, in which case \"+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 Maintainer nor the 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émente le numéro de version Debian pour un envoi d'un non-responsable "
+"soit en ajoutant « .1 » à une version non-NMU (à moins qu'il s'agisse d'un "
+"paquet Debian natif, auquel cas « +nmu1 » est ajouté) soit en incrémentant "
+"un numéro de NMU. Ceci se produit automatiquement si l'auteur du paquet "
+"n'est pas dans les champs Maintainer ou 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:218
+#, no-wrap
+msgid "B<--bin-nmu>"
+msgstr "B<--bin-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:223
+msgid ""
+"Increment the Debian release number for a binary non-maintainer upload by "
+"either appending a \"+b1\" to a non-binNMU version number or by incrementing "
+"a binNMU version number, and add a binNMU changelog comment."
+msgstr ""
+"Incrémente le numéro de version Debian pour un envoi binaire d'un non-"
+"responsable soit en ajoutant « +b1 » à une version non-binNMU soit en "
+"incrémentant un numéro de binNMU, et ajoute un commentaire « binNMU » dans "
+"le changelog."
+
+#. type: TP
+#: ../scripts/debchange.1:223
+#, no-wrap
+msgid "B<--qa>, B<-q>"
+msgstr "B<--qa>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:227
+msgid ""
+"Increment the Debian release number for a Debian QA Team upload, and add a "
+"QA upload changelog comment."
+msgstr ""
+"Incrémente le numéro de publication de Debian pour un envoi par l'équipe QA "
+"de Debian, et ajoute un commentaire « QA upload » dans le changelog."
+
+#. type: TP
+#: ../scripts/debchange.1:227
+#, no-wrap
+msgid "B<--security>, B<-s>"
+msgstr "B<--security>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:231
+msgid ""
+"Increment the Debian release number for a Debian Security Team non-"
+"maintainer upload, and add a Security Team upload changelog comment."
+msgstr ""
+"Incrémente le numéro de publication de Debian pour un envoi par l'équipe "
+"Sécurité de Debian, et ajoute un commentaire « Security Team upload » dans "
+"le changelog."
+
+#. type: TP
+#: ../scripts/debchange.1:231
+#, no-wrap
+msgid "B<--team>"
+msgstr "B<--team>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:235
+msgid ""
+"Increment the Debian release number for a team upload, and add a team upload "
+"changelog comment."
+msgstr ""
+"Incrémente le numéro de publication de Debian pour un envoi par l'équipe, et "
+"ajoute un commentaire « Team upload » dans le changelog."
+
+#. type: TP
+#: ../scripts/debchange.1:235
+#, no-wrap
+msgid "B<--bpo>"
+msgstr "B<--bpo>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:239
+msgid ""
+"Increment the Debian release number for an upload to lenny-backports, and "
+"add a backport upload changelog comment."
+msgstr ""
+"Incrémente le numéro de publication de Debian pour un envoi d'un "
+"rétroportage pour Lenny, et ajoute un commentaire pour l'envoi du "
+"rétroportage dans le changelog."
+
+#. type: TP
+#: ../scripts/debchange.1:239
+#, no-wrap
+msgid "B<--local>, B<-l>I<suffix>"
+msgstr "B<--local>, B<-l>I<suffix>"
+
+# NOTE: space
+#. type: Plain text
+#: ../scripts/debchange.1:242
+#, no-wrap
+msgid " Add a suffix to the Debian version number for a local build.\n"
+msgstr "Ajouter un suffixe au numéro de version Debian pour une construction locale.\n"
+
+#. type: TP
+#: ../scripts/debchange.1:242
+#, no-wrap
+msgid "B<--force-bad-version>, B<-b>"
+msgstr "B<--force-bad-version>, B<-b>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:246
+msgid ""
+"Force a version number to be less than the current one (e.g., when "
+"backporting)."
+msgstr ""
+"Force un numéro de version à être moins élevé que le numéro de version "
+"courant (comme c'est le cas par exemple dans le cas d'un rétroportage)."
+
+#. type: TP
+#: ../scripts/debchange.1:246
+#, no-wrap
+msgid "B<--allow-lower-version>"
+msgstr "B<--allow-lower-version>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:250
+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:250
+#, no-wrap
+msgid "B<--force-distribution>"
+msgstr "B<--force-distribution>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:254
+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 correspond à "
+"aucune distribution connue (par exemple pour une distribution non "
+"officielle)."
+
+#. type: TP
+#: ../scripts/debchange.1:254
+#, no-wrap
+msgid "B<--auto-nmu>"
+msgstr "B<--auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:258
+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 à un NMU (« Non Maintainer Upload »). Il s'agit "
+"du comportement par défaut."
+
+#. type: TP
+#: ../scripts/debchange.1:258
+#, no-wrap
+msgid "B<--no-auto-nmu>"
+msgstr "B<--no-auto-nmu>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:262
+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:262
+#, no-wrap
+msgid "B<--fromdirname>, B<-d>"
+msgstr "B<--fromdirname>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:272
+msgid ""
+"This will take the upstream version number from the directory name, which "
+"should be of the form I<package>-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>-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 ""
+"Le numéro de version amont sera déterminé en fonction 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 changelog, la "
+"nouvelle entrée sera ajoutée avec pour numéro de version I<version>-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:272
+#, no-wrap
+msgid "B<--closes>I< nnnnn,[nnnnn,...]>"
+msgstr "B<--closes> I<nnnnn,[nnnnn,...]>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:278
+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 ""
+"Ajoute des entrées au fichier changelog pour fermer les bogues indiqués. Un "
+"éditeur est également invoqué après avoir ajouté ces entrées. Il générera "
+"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:278
+#, no-wrap
+msgid "B<--[no]query>"
+msgstr "B<--[no]query>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:281
+msgid "Should we attempt to query the BTS when generating closes entries?"
+msgstr ""
+"Indique si le BTS doit être interrogé lorsqu'une fermeture de bogue est "
+"générée."
+
+#. type: TP
+#: ../scripts/debchange.1:281
+#, no-wrap
+msgid "B<--preserve>, B<-p>"
+msgstr "B<--preserve>, B<-p>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:286
+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 ""
+"Préserve 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 des variables de configuration ci-"
+"dessous."
+
+#. type: TP
+#: ../scripts/debchange.1:286
+#, no-wrap
+msgid " B<--no-preserve>, B<--nopreserve>"
+msgstr "B<--no-preserve>, B<--nopreserve>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:289
+msgid "Do not preserve the source tree directory name (default)."
+msgstr ""
+"Ne préserve pas le nom du répertoire de l'arborescence des sources "
+"(comportement par défaut)."
+
+#. type: TP
+#: ../scripts/debchange.1:289
+#, 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:294
+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 ""
+"Utilise la distribution indiquée dans la nouvelle entrée du fichier "
+"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:294
+#, 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:299
+msgid ""
+"Use the specified urgency in the changelog entry being edited, instead of "
+"using the default \"low\" for new entries or the existing value for existing "
+"entries."
+msgstr ""
+"Utilise le niveau d'urgence indiqué dans la nouvelle entrée du fichier "
+"changelog, s'il y en a une, au lieu du niveau d'urgence bas (« low ») par "
+"défaut ou de la valeur courante pour les entrées existantes."
+
+#. type: TP
+#: ../scripts/debchange.1:299
+#, 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:305
+msgid ""
+"This will edit the changelog I<file> instead of the standard I<debian/"
+"changelog>.  This option overrides any CHANGELOG environment variable "
+"setting.  Also, no directory traversing or checking will be performed when "
+"this option is used."
+msgstr ""
+"Ceci éditera le journal des modifications I<fichier> au lieu de I<debian/"
+"changelog>. Cette option remplace la valeur définie par la variable "
+"d'environnement 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:305
+#, no-wrap
+msgid "B<--news> [I<newsfile>]"
+msgstr "B<--news> [I<newsfile>]"
+
+#. type: Plain text
+#: ../scripts/debchange.1:311
+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 ""
+"Ceci éditera I<newsfile> (I<debian/NEWS> par défaut) au lieu du journal des "
+"modifications. Une recherche sur le répertoire sera faite. Le changelog sera "
+"analysé pour déterminer la version actuelle du paquet."
+
+#. type: TP
+#: ../scripts/debchange.1:311
+#, no-wrap
+msgid "B<--[no]multimaint>"
+msgstr "B<--[no]multimaint>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:316
+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écise s'il faut indiquer que différentes parties du journal des "
+"modifications ont été faites par différents responsables. L'option par "
+"défaut est B<--multimaint>, regardez 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:316
+#, no-wrap
+msgid "B<--[no]multimaint-merge>"
+msgstr "B<--[no]multimaint-merge>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:321
+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écise 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>, regardez 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:321
+#, no-wrap
+msgid "B<--maintmaint>, B<-m>"
+msgstr "B<--maintmaint>, B<-m>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:329
+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 modifie pas 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 changelog. Notez 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 ces cas."
+
+#. type: TP
+#: ../scripts/debchange.1:329
+#, no-wrap
+msgid "B<--[no]mainttrailer>, B<-t>"
+msgstr "B<--[no]mainttrailer>, B<-t>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:339
+msgid ""
+"If 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 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 multi-responsables 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: TP
+#: ../scripts/debchange.1:351
+#, no-wrap
+msgid "B<--release-heuristic> I<log|changelog>"
+msgstr "B<--release-heuristic> I<log|changelog>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:356
+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ô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."
+
+#. type: Plain text
+#: ../scripts/debchange.1:362 ../scripts/debclean.1:90
+#: ../scripts/debrelease.1:105 ../scripts/debsign.1:111
+#: ../scripts/dscverify.1:42 ../scripts/nmudiff.1:79
+#: ../scripts/pts-subscribe.1:34 ../scripts/uupdate.1:88
+#: ../scripts/who-uploads.1:50
+msgid "Display version and copyright information and exit successfully."
+msgstr "Affiche la version et le copyright, puis quitte avec succès."
+
+#. type: TP
+#: ../scripts/debchange.1:368
+#, no-wrap
+msgid "B<DEBCHANGE_PRESERVE>"
+msgstr "B<DEBCHANGE_PRESERVE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:372
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--preserve>."
+
+#. type: TP
+#: ../scripts/debchange.1:372
+#, no-wrap
+msgid "B<DEBCHANGE_QUERY_BTS>"
+msgstr "B<DEBCHANGE_QUERY_BTS>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:376
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--noquery> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<no>, équivaut à utiliser l'option B<--noquery>."
+
+#. type: TP
+#: ../scripts/debchange.1:383
+#, no-wrap
+msgid "B<DEBCHANGE_RELEASE_HEURISTIC>"
+msgstr "B<DEBCHANGE_RELEASE_HEURISTIC>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:388
+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:388
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT>"
+msgstr "B<DEBCHANGE_MULTIMAINT>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:393
+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 positionné à 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:393
+#, no-wrap
+msgid "B<DEBCHANGE_MULTIMAINT_MERGE>"
+msgstr "B<DEBCHANGE_MULTIMAINT_MERGE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:399
+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 positionnée à I<yes>, lors de l'ajout de modifications dans le "
+"mode multi-responsables, 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:399
+#, no-wrap
+msgid "B<DEBCHANGE_MAINTTRAILER>"
+msgstr "B<DEBCHANGE_MAINTTRAILER>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:403
+msgid ""
+"If this is set to I<no>, then it is the same as the B<--nomainttrailer> "
+"command line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<no>, alors c'est comme si l'option B<--"
+"nomainttrailer> était utilisée."
+
+#. type: TP
+#: ../scripts/debchange.1:403
+#, no-wrap
+msgid "B<DEBCHANGE_TZ>"
+msgstr "B<DEBCHANGE_TZ>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:407
+msgid ""
+"Use this timezone for changelog entries.  Default is the user/system "
+"timezone as shown by `date -R` and affected by the environment variable 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 « date -R » avec prise en compte de la variable d'environnement "
+"TZ."
+
+#. type: TP
+#: ../scripts/debchange.1:407
+#, no-wrap
+msgid "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+msgstr "B<DEBCHANGE_LOWER_VERSION_PATTERN>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:411
+msgid ""
+"If this is set, then it is the same as the B<--allow-lower-version> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée, équivaut à utiliser l'option B<--allow-lower-"
+"version> sur la ligne de commande."
+
+#. type: TP
+#: ../scripts/debchange.1:411
+#, no-wrap
+msgid "B<DEBCHANGE_AUTO_NMU>"
+msgstr "B<DEBCHANGE_AUTO_NMU>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:417
+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 positionnée à I<no> alors B<debchanges> n'essaiera pas de "
+"déterminer automatiquement si la modification en cours représente un NMU. La "
+"valeur par défaut est I<yes>. Consultez la discussion sur l'option B<--nmu> "
+"ci-dessus."
+
+#. type: TP
+#: ../scripts/debchange.1:417
+#, no-wrap
+msgid "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+msgstr "B<DEBCHANGE_FORCE_SAVE_ON_RELEASE>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:421
+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 ""
+"Si elle est positionnée à « no », alors c'est comme si l'option B<--no-force-"
+"save-on-release> était utilisée."
+
+#. type: =head1
+#: ../scripts/debchange.1:421 ../scripts/devscripts.1:16
+#: ../scripts/devscripts.1:20 ../scripts/mass-bug.pl:128
+#, no-wrap
+msgid "ENVIRONMENT"
+msgstr "ENVIRONNEMENT"
+
+#. type: TP
+#: ../scripts/debchange.1:422
+#, 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:425
+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:425
+#, no-wrap
+msgid "B<CHANGELOG>"
+msgstr "B<CHANGELOG>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:431
+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:431
+#, no-wrap
+msgid "B<VISUAL>, B<EDITOR>"
+msgstr "B<VISUAL>, B<EDITOR>"
+
+#. type: Plain text
+#: ../scripts/debchange.1:435
+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:442
+msgid ""
+"B<debclean>(1), B<dupload>(1), B<dput>(1), B<debc>(1)  and B<devscripts.conf>"
+"(5)."
+msgstr ""
+"B<debclean>(1), B<dupload>(1), B<dput>(1), B<debc>(1) et B<devscripts.conf>"
+"(5)."
+
+#. type: Plain text
+#: ../scripts/debchange.1:445
+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:25
+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:31
+msgid "B<debcheckout> [I<OPTIONS>] I<PACKAGE> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONS>] I<PAQUET> [I<REP_DESTINATION>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:33
+msgid "B<debcheckout> [I<OPTIONS>] I<REPOSITORY_URL> [I<DESTDIR>]"
+msgstr "B<debcheckout> [I<OPTIONS>] I<REP_DÉPÔT> [I<REP_DESTINATION>]"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:35
+msgid "B<debcheckout> B<--help>"
+msgstr "B<debcheckout> B<--help>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:41
+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 "
+"configuration 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> ; mais ça peut être changé à l'aide du paramètre "
+"I<REP_DESTINATION>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:47
+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 vim package exposes such information with a field like S<Vcs-"
+"Git: git://git.debian.org/git/pkg-vim/vim.git>, you can see it by grepping "
+"through C<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 vim fournit les "
+"informations en utilisant un champ S<Vcs-Git: git://git.debian.org/git/pkg-"
+"vim/vim.git> que vous pouvez voir dans la sortie de C<apt-cache showsrc vim>."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:53
+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-*> sont disponibles, "
+"B<debcheckout> sélectionnera le paquet avec le numéro de version le plus "
+"élevé. Autrement, un numéro de version spécifique peut être sélectionné "
+"parmi ceux disponibles est utilisant la forme I<PAQUET>=I<VERSION> pour le "
+"nom de paquet."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:58
+msgid ""
+"If you already know the URL of a given repository you can invoke 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 "
+"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:64
+msgid ""
+"The currently supported version control systems are: arch, bzr, cvs, darcs, "
+"git, hg, svn."
+msgstr ""
+"Les systèmes de gestion de configuration gérés actuellement sont : arch, "
+"bzr, cvs, darcs, git, hg, svn."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:69
+msgid "B<GENERAL OPTIONS>"
+msgstr "B<OPTIONS GÉNÉRALES>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:73
+msgid "B<-a>, B<--auth>"
+msgstr "B<-a>, B<--auth>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:75
+msgid ""
+"Work in authenticated mode; this means that for known repositories (mainly "
+"those hosted on S<http://alioth.debian.org>) URL rewriting is attempted "
+"before checking out, to ensure that the repository can be committed to. For "
+"example, for subversion repositories hosted on alioth this means that S<svn"
+"+ssh://svn.debian.org/...> will be used instead of S<svn://svn.debian.org/..."
+">."
+msgstr ""
+"Utiliser le mode authentifié ; ceci signifie que pour les dépôts connus "
+"(principalement ceux hébergés sur S<http://alioth.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 subversion hébergés sur Alioth, ceci signifie que "
+"S<svn+ssh://svn.debian.org/...> sera utilisé à la place de S<svn://svn."
+"debian.org/...>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:82
+msgid "B<-d>, B<--details>"
+msgstr "B<-d>, B<--details>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:84
+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:90
+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:94
+msgid "Print a detailed help message and exit."
+msgstr "Affiche un message d'aide détaillé et quitte."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:96
+msgid "B<-p>, B<--print>"
+msgstr "B<-p>, B<--print>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:98
+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:103
+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:105
+msgid "B<-t> I<TYPE>, B<--type> I<TYPE>"
+msgstr "B<-t> I<TYPE>, B<--type> I<TYPE>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:107
+msgid ""
+"Override the repository type (which defaults to some heuristics based on the "
+"URL or, in case of heuristic failure, the fallback \"svn\"); should be one "
+"of the currently supported repository types."
+msgstr ""
+"Forcer le type de dépôt (définit par défaut par des heuristiques basées sur "
+"l'URL ou, si les heuristiques échouent, « svn ») ; le type de dépôt doit "
+"être un des types de dépôt gérés."
+
+#. type: =item
+#: ../scripts/debcheckout.pl:111
+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:113
+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:116
+msgid "B<-f>, B<--file>"
+msgstr "B<-f>, B<--file>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:118
+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 "
+"mutliple 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: textblock
+#: ../scripts/debcheckout.pl:124
+msgid "B<VCS-SPECIFIC OPTIONS>"
+msgstr "B<VCS-SPECIFIC OPTIONS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:126
+msgid "I<GIT-SPECIFIC OPTIONS>"
+msgstr "I<GIT-SPECIFIC OPTIONS>"
+
+#. type: =item
+#: ../scripts/debcheckout.pl:130
+msgid "B<--git-track> I<BRANCHES>"
+msgstr "B<--git-track> I<BRANCHES>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:132
+msgid ""
+"Specify a list of remote branches which will be set up for tracking (as in "
+"S<git branch --track>, see 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<git branch --track>, voir 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:137
+msgid ""
+"As a shorthand, the string \"*\" can be given to require tracking of all "
+"remote branches."
+msgstr ""
+"Comme raccourci, la chaîne « * » peut être fournie pour demander le suivi de "
+"toutes les branches distantes."
+
+# NOTE: presque identique
+#. type: textblock
+#: ../scripts/debcheckout.pl:144 ../scripts/rmadison.pl:268
+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 positionner 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:152
+msgid "B<DEBCHECKOUT_AUTH_URLS>"
+msgstr "B<DEBCHECKOUT_AUTH_URLS>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:154
+msgid ""
+"This variable should be a space separated list of Perl regular expressions "
+"and replacement texts, which must come in pairs: REGEXP TEXT REGEXP 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 listes d'expression rationnelles Perl et de "
+"chaînes de remplacements séparées par des espaces, qui doivent être fournies "
+"par paires : REGEXP TEXTE REGEXP TEXTE... Chaque paire indique une "
+"substitution qui est appliquée aux URL des dépôts si les autres moyens "
+"internes pour construire des URLS pour le mode authentifié (voir B<-a>) ont "
+"échoués."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:160
+msgid ""
+"References to matching substrings in the replacement texts are allowed as "
+"usual in Perl by the means of $1, $2, ... and so on."
+msgstr ""
+"Les références à des sous-chaînes sont autorisées dans les textes de "
+"remplacement comme d'habitude avec Perl en utilisant $1, $2, ..."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:163
+msgid ""
+"This setting can be used to enable authenticated mode for most repositories "
+"out there.  Note that the Debian repositories on S<alioth.debian.org> (S<"
+"$vcs.debian.org>) are implicitly defined."
+msgstr ""
+"Cette configuration permet d'activer le mode authentifié pour la plupart des "
+"dépôts existants. Notez que les dépôts Debian de S<alioth.debian.org> (S<"
+"$vcs.debian.org>) sont implicitement définis."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:167
+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:169
+#, 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:174
+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 pas autorisés dans les expression "
+"rationnelles et 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 simple autour de la "
+"valeur de cette variable."
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:183
+msgid ""
+"apt-cache(8), Section 6.2.5 of the Debian Developer's Reference (for more "
+"information about Vcs-* fields): S<http://www.debian.org/doc/developers-"
+"reference/best-pkging-practices.html#bpp-vcs>"
+msgstr ""
+"apt-cache(8), Section 6.2.5 de la référence du développeur Debian (pour plus "
+"d'informations sur les champs Vcs-*): S<http://www.debian.org/doc/developers-"
+"reference/best-pkging-practices.html#bpp-vcs>"
+
+#. type: textblock
+#: ../scripts/debcheckout.pl:188
+msgid ""
+"debcheckout and this manpage have been written by Stefano Zacchiroli "
+"<zack@debian.org>"
+msgstr ""
+"debcheckout et cette page de manuel ont été écrits par Stefano Zacchiroli "
+"<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<debian/rules 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écute B<debian/rules "
+"clean> pour chaque répertoire source Debian rencontré. Ces répertoires sont "
+"reconnus parce qu'ils contiennent un fichier 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:22
+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:24
+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:35
+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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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:61
+#, no-wrap
+msgid "B<--cleandebs>"
+msgstr "B<--cleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:65
+msgid ""
+"Also remove all .deb, .changes and .build files from the parent directory."
+msgstr ""
+"Enlève également tous les fichiers .deb, .changes et .build du répertoire "
+"parent."
+
+#. type: TP
+#: ../scripts/debclean.1:65
+#, no-wrap
+msgid "B<--nocleandebs>"
+msgstr "B<--nocleandebs>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:69
+msgid ""
+"Do not remove the .deb, .changes and .build files from the parent directory; "
+"this is the default behaviour."
+msgstr ""
+"Ne retire pas les fichiers .deb, .changes et .build du répertoire parent. "
+"C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/debclean.1:81 ../scripts/debuild.1:284
+#, no-wrap
+msgid "B<-d>"
+msgstr "B<-d>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:84
+msgid "Do not run dpkg-checkbuilddeps to check build dependencies."
+msgstr ""
+"N'exécute pas dpkg-checkbuilddeps pour vérifier les dépendances de "
+"construction du paquet (« build dependencies »)."
+
+#. type: TP
+#: ../scripts/debclean.1:96
+#, no-wrap
+msgid "B<DEBCLEAN_CLEANDEBS>"
+msgstr "B<DEBCLEAN_CLEANDEBS>"
+
+#. type: Plain text
+#: ../scripts/debclean.1:100
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--cleandebs> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée à « yes », alors c'est comme si l'option B<--"
+"cleandebs> était utilisée."
+
+#. type: Plain text
+#: ../scripts/debclean.1:111
+msgid "B<debuild>(1)  and B<devscripts.conf>(5)."
+msgstr "B<debuild>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debclean.1:113
+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 d'un paquet"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:9
+msgid ""
+"B<debcommit> [B<--release>] [B<--release-use-changelog>] [B<--"
+"message=>I<text>] [B<--noact>] [B<--diff>] [B<--confirm>] [B<--edit>] [B<--"
+"changelog=>I<path>] [B<--all> | I<files to commit>]"
+msgstr ""
+"B<debcommit> [B<--release>] [B<--release-use-changelog>] [B<--"
+"message=>I<texte>] [B<--noact>] [B<--diff>] [B<--confirm>] [B<--edit>] [B<--"
+"changelog=>I<chemin>] [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 commite le changement 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 supportés 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é d'après le fichier debian/changelog et est utilisé pour taguer 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 tags varient pour svn et "
+"svk, donc debcommit utilise svnpath(1) pour déterminer où le tag doit être "
+"placé 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 --release, if there are uncommited 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 ""
+"Indique 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
+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 fait rien, mais affiche 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 généré 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 ait é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 généré dans votre éditeur préféré avant l'envoi."
+
+#. type: =item
+#: ../scripts/debcommit.pl:71
+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 "
+"gestion de configuration autres que git."
+
+#. type: =item
+#: ../scripts/debcommit.pl:76
+msgid "I<files to commit>"
+msgstr "I<fichiers à commiter>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:78
+msgid ""
+"Specify which files to commit (debian/changelog is added to the list "
+"automatically.)"
+msgstr ""
+"Indiquer quels fichiers envoyer (debian/changelog est automatiquement ajouté "
+"à la liste)."
+
+#. type: =item
+#: ../scripts/debcommit.pl:81
+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:83
+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 « *  » seront enlevés au début "
+"du message."
+
+# NOTE: space inside the brackets?
+#. type: textblock
+#: ../scripts/debcommit.pl:87
+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 « [*+-]  »."
+
+#. 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:107
+msgid "B<DEBCOMMIT_STRIP_MESSAGE>"
+msgstr "B<DEBCOMMIT_STRIP_MESSAGE>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:109
+msgid ""
+"If this is set to I<no>, then it is the same as the --no-strip-message "
+"command line parameter being used. The default is I<yes>."
+msgstr ""
+"Si elle est positionnée à I<no>, équivaut à utiliser l'option B<--no-strip-"
+"message>. La valeur par défaut est I<yes>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:112
+msgid "B<DEBCOMMIT_SIGN_TAGS>"
+msgstr "B<DEBCOMMIT_SIGN_TAGS>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:114
+msgid ""
+"If this is set to I<yes>, then it is the same as the --sign-tags command "
+"line parameter being used. The default is I<no>."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--sign-"
+"tags>. La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/debcommit.pl:117
+msgid "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+msgstr "B<DEBCOMMIT_RELEASE_USE_CHANGELOG>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:119
+msgid ""
+"If this is set to I<yes>, then it is the same as the --release-use-changelog "
+"command line parameter being used. The default is I<no>."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--release-"
+"use-changelog>. La valeur par défaut est I<no>."
+
+#. type: TP
+#: ../scripts/debcommit.pl:122 ../scripts/debsign.1:127
+#, no-wrap
+msgid "B<DEBSIGN_KEYID>"
+msgstr "B<DEBSIGN_KEYID>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:124
+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 clé à 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 gestion de configuration."
+
+#. type: =head1
+#: ../scripts/debcommit.pl:129
+msgid "VCS SPECIFIC FEATURES"
+msgstr "FONCTIONNALITÉS SPÉCIFIQUES AUX SYSTÈMES DE GESTION DE CONFIGURATION"
+
+#. type: =item
+#: ../scripts/debcommit.pl:133
+msgid "B<tla> / B<baz>"
+msgstr "B<tla> / B<baz>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:135
+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:141
+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:146
+msgid "B<git>"
+msgstr "B<git>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:148
+msgid ""
+"If only a single change is detected in the changelog, B<debcommit> will "
+"unfold it to a single line and behave as if --strip-message was used."
+msgstr ""
+"Si une unique 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 --strip-message était utilisée."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:151
+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:156
+msgid "B<hg> / B<darcs>"
+msgstr "B<hg> / B<darcs>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:158
+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:162
+msgid "B<bzr>"
+msgstr "B<bzr>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:164
+msgid ""
+"If the changelog entry used for the commit message closes any bugs then --"
+"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 --fixes pour « bzr commit » seront générées "
+"pour associer la résision aux bogues."
+
+#. type: textblock
+#: ../scripts/debcommit.pl:843 ../scripts/mass-bug.pl:523
+msgid "Joey Hess <joeyh@debian.org>"
+msgstr "Joey Hess <joeyh@debian.org>"
+
+#. type: textblock
+#: ../scripts/debcommit.pl:847
+msgid "svnpath(1)."
+msgstr "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:24
+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."
+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>."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:27
+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 courant avec la dernière version du paquet."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:38
+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 à "
+"lister les 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:42
+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:50
+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 sources (fichiers I<.dsc>) sont fournis à B<debdiff>, il "
+"comparera le contenu des paquets source. Si les paquets sources 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:51
+#, no-wrap
+msgid "B<--dirs>, B<-d>"
+msgstr "B<--dirs>, B<-d>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:56
+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:56
+#, no-wrap
+msgid "B<--nodirs>"
+msgstr "B<--nodirs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:60
+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:60
+#, 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:70
+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."
+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."
+
+#. type: TP
+#: ../scripts/debdiff.1:70
+#, no-wrap
+msgid "B<--move-regex>I< FROM TO>"
+msgstr "B<--move-regex> I<DEPUIS VERS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:76
+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:76
+#, no-wrap
+msgid "B<--nocontrol>"
+msgstr "B<--nocontrol>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:81
+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:81
+#, no-wrap
+msgid "B<--control>"
+msgstr "B<--control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:85
+msgid ""
+"Compare the respective control files; this is the default, and it can be "
+"used to override a configuration file setting."
+msgstr ""
+"Compare les fichiers 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:85
+#, no-wrap
+msgid "B<--controlfiles>I< FILE,FILE,...>"
+msgstr "B<--controlfiles> I<FICHIER,FICHIER,...>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:93
+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 ""
+"Indique 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:93
+#, no-wrap
+msgid "B<--wdiff-source-control>"
+msgstr "B<--wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:97
+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 sources, 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:97
+#, no-wrap
+msgid "B<--no-wdiff-source-control>"
+msgstr "B<--no-wdiff-source-control>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:101
+msgid ""
+"Do not compare control files in source packages using B<wdfiff>.  This is "
+"the default."
+msgstr ""
+"Ne pas comparer les fichiers de contrôle des paquets sources en utilisant "
+"B<wdfiff>. C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/debdiff.1:101
+#, no-wrap
+msgid "B<--wp>, B<--wl>, B<--wt>"
+msgstr "B<--wp>, B<--wl>, B<--wt>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:106
+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>. (Ceci "
+"affiche le B<wdiff> complet, plutôt que juste les lignes modifiées.)"
+
+#. type: TP
+#: ../scripts/debdiff.1:106
+#, no-wrap
+msgid "B<--show-moved>"
+msgstr "B<--show-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:113
+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:113
+#, no-wrap
+msgid "B<--noshow-moved>"
+msgstr "B<--noshow-moved>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:117 ../scripts/debdiff.1:134
+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:117
+#, no-wrap
+msgid "B<--renamed>I< FROM TO>"
+msgstr "B<--renamed> I<DEPUIS VERS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:123
+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:123
+#, no-wrap
+msgid "B<--exclude>I< PATTERN>"
+msgstr "B<--exclude> I<MOTIF>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:127
+msgid ""
+"Exclude files that match I<PATTERN>.  Multiple uses of this option are "
+"permitted."
+msgstr ""
+"Exclut les fichiers correspondant au I<MOTIF>. Une utilisation multiple de "
+"cette option est possible."
+
+#. type: TP
+#: ../scripts/debdiff.1:127
+#, no-wrap
+msgid "B<--diffstat>"
+msgstr "B<--diffstat>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:130
+msgid "Include the result of B<diffstat> before the generated diff."
+msgstr "Inclure le résultat de B<diffstat> avant de générer le diff."
+
+#. type: TP
+#: ../scripts/debdiff.1:130
+#, no-wrap
+msgid "B<--no-diffstat>"
+msgstr "B<--no-diffstat>"
+
+#. type: TP
+#: ../scripts/debdiff.1:134
+#, no-wrap
+msgid "B<--auto-ver-sort>"
+msgstr "B<--auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:137
+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:137
+#, no-wrap
+msgid "B<--no-auto-ver-sort>"
+msgstr "B<--no-auto-ver-sort>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:143
+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 sources 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:143
+#, no-wrap
+msgid "B<--unpack-tarballs>"
+msgstr "B<--unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:148
+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:148
+#, no-wrap
+msgid "B<--no-unpack-tarballs>"
+msgstr "B<--no-unpack-tarballs>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:151
+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:161
+#, no-wrap
+msgid "B<--quiet>, B<-q>"
+msgstr "B<--quiet>, B<-q>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:164
+msgid "Be quiet if no differences were found."
+msgstr "Reste silencieux si aucune différence n'est trouvée."
+
+#. type: TP
+#: ../scripts/debdiff.1:164
+#, no-wrap
+msgid "B<--ignore-space>, B<-w>"
+msgstr "B<--ignore-space>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:167
+msgid "Ignore whitespace in diffs."
+msgstr "Ignorer les blancs dans les diffs."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debdiff.1:173
+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:173
+#, no-wrap
+msgid "B<DEBDIFF_DIRS>"
+msgstr "B<DEBDIFF_DIRS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:177
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--dirs> command line "
+"parameter being used."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--dirs>."
+
+#. type: TP
+#: ../scripts/debdiff.1:177
+#, no-wrap
+msgid "B<DEBDIFF_CONTROL>"
+msgstr "B<DEBDIFF_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:182
+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 ""
+"Si elle est positionnée à I<no>, équivaut à utiliser l'option B<--"
+"nocontrol>. La valeur par défaut est I<yes>."
+
+#. type: TP
+#: ../scripts/debdiff.1:182
+#, no-wrap
+msgid "B<DEBDIFF_CONTROLFILES>"
+msgstr "B<DEBDIFF_CONTROLFILES>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:187
+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:187
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_MOVED>"
+msgstr "B<DEBDIFF_SHOW_MOVED>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:191
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--show-moved> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--show-"
+"moved>."
+
+#. type: TP
+#: ../scripts/debdiff.1:191
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_OPT>"
+msgstr "B<DEBDIFF_WDIFF_OPT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:195
+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:195
+#, no-wrap
+msgid "B<DEBDIFF_SHOW_DIFFSTAT>"
+msgstr "B<DEBDIFF_SHOW_DIFFSTAT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:199
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--diffstat> command "
+"line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--diffstat> "
+"de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:199
+#, no-wrap
+msgid "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+msgstr "B<DEBDIFF_WDIFF_SOURCE_CONTROL>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:203
+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 ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--wdiff-"
+"source-control> de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:203
+#, no-wrap
+msgid "B<DEBDIFF_AUTO_VER_SORT>"
+msgstr "B<DEBDIFF_AUTO_VER_SORT>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:207
+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 ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--auto-ver-"
+"sort> de la ligne de commande."
+
+#. type: TP
+#: ../scripts/debdiff.1:207
+#, no-wrap
+msgid "B<DEBDIFF_UNPACK_TARBALLS>"
+msgstr "B<DEBDIFF_UNPACK_TARBALLS>"
+
+#. type: Plain text
+#: ../scripts/debdiff.1:211
+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 ""
+"Si elle est positionnée à I<no>, alors c'est comme si l'option B<--no-unpack-"
+"tarballs> était utilisée."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:215
+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:222
+msgid ""
+"B<dpkg-deb>(1), B<wdiff>(1), B<interdiff>(1), B<diffstat>(1)  and "
+"B<devscripts.conf>(5)."
+msgstr ""
+"B<dpkg-deb>(1), B<wdiff>(1), B<interdiff>(1), B<diffstat>(1) et B<devscripts."
+"conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debdiff.1:227
+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/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 généré"
+
+#. 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 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>. Notez 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 !"
+
+# 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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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<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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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 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 ""
+"Cherche les fichiers I<.changes> et I<.deb> 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/debi.1:78
+#, no-wrap
+msgid "B<--upgrade>"
+msgstr "B<--upgrade>"
+
+#. type: Plain text
+#: ../scripts/debi.1:84
+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 ""
+"Ne fait que mettre à jour les 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: Plain text
+#: ../scripts/debi.1:115
+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 ""
+"Indique le répertoire dans lequel chercher les fichiers I<.changes> et I<."
+"deb>, et est soit un chemin absolu ou un chemin relatif à la racine du "
+"répertoire racine. Ceci 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. Notez que cela concerne également B<debrelease>(1), ce qui explique "
+"le nom étrange de l'option."
+
+#. type: Plain text
+#: ../scripts/debi.1:126
+msgid "B<debpkg>(1)  and B<devscripts.conf>(5)."
+msgstr "B<debpkg>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debi.1:131
+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> invoque 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 privilèges revient au même que "
+"d'avoir les droits superutilisateur sur cette machine>. B<debpkg> quittera "
+"s'il n'est ni exécuté en tant que 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. Ceci 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: 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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and "
+"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<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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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:73
+#, 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:83
+#, no-wrap
+msgid "B<--multi>"
+msgstr "B<--multi>"
+
+#. type: Plain text
+#: ../scripts/debrelease.1:81
+msgid ""
+"Multiarch changes mode: This signifies that B<debrelease> should use the "
+"most recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the changes files produced by B<dpkg-cross>."
+msgstr ""
+"Mode des fichiers changes multiarchitecture : ceci signifie que "
+"B<debrelease> doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers changes générés "
+"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 ""
+"Indique le répertoire dans lequel chercher les fichiers I<.changes> et I<."
+"deb>, il est soit un chemin absolu soit un chemin relatif à la racine du "
+"répertoire racine. Ceci 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. Notez que cela concerne également B<debc>(1) and B<debi>(1)."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:137
+msgid "B<dupload>(1), B<dput>(1)  and B<devscripts.conf>(5)."
+msgstr "B<dupload>(1), B<dput>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debrelease.1:139
+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>Feb 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 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\">log message</arg>"
+msgstr ""
+"<command>&dhcommand;</command> <arg choice=\"opt\"> <replaceable>options</"
+"replaceable> </arg> <replaceable> .deb-file</replaceable> <arg choice=\"opt"
+"\" rep=\"repeat\">message de journalisation</arg>"
+
+#. type: Content of: <refentry><refsect1><para>
+#: ../scripts/deb-reversion.dbk:85
+msgid ""
+"&dhcommand; unpacks the specified .deb file, changes the version number in "
+"the relevant locations, appends a Debian <filename>changelog</filename> "
+"entry with the specified contents, and creates a new .deb file with the "
+"updated version."
+msgstr ""
+"&dhcommand; dépaquette le fichier .deb indiqué, change le numéro de version "
+"aux endroits appropriés, ajoute une entrée de <filename>changelog</filename> "
+"Debian avec le contenu indiqué crée un nouveau fichier .deb 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 courant, 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 .deb file, root privileges are required in order to have the "
+"correct permissions and ownerships in the resulting .deb 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 .deb. Ceci 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 réempaquetés. Si vous "
+"voulez écrire les entrées du fichier changelog 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 changelog dans la ligne de commande <command>&dhcommand;"
+"</command>, <command>dch</command> sera alors appelé 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 ""
+"Indique 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 .deb's control file."
+msgstr ""
+"Indique le numéro de version à utiliser comme ancienne version à la place de "
+"la version indiquée dans le fichier control du paquet .deb."
+
+#. 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 .deb file.  Cannot be used in conjunction with <option>-v</"
+"option>."
+msgstr ""
+"Se contente de calculer et d'afficher le nouveau numéro de version qui "
+"serait utilisé ; ne pas construire de nouveau paquet .deb. 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 .deb file and modifying the "
+"changelog, and before packing up the new .deb 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 ."
+"deb, avoir modifié le changelog et avant de construire le nouveau fichier ."
+"deb. 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 "Affiche 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>fakeroot</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> <refentrytitle>dpkg-"
+"deb</refentrytitle> <manvolnum>1</manvolnum> </citerefentry>."
+msgstr ""
+"<citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</manvolnum> </"
+"citerefentry>, <citerefentry> <refentrytitle>fakeroot</refentrytitle> "
+"<manvolnum>1</manvolnum> </citerefentry>, <citerefentry> <refentrytitle>dpkg-"
+"deb</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 (e.g. amd64) 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 (par ex. amd64) à 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ème. 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 générés "
+"depuis 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 transfered 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 l'Artistic License : <ulink>http://www.opensource.org/licenses/"
+"artistic-license.php</ulink>. Sur les systèmes Debian, le texte complet de "
+"l'Artistic License peut être trouvé 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: 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> [options] [I<user@>]I<remotehost> [I<changes-file>|I<dsc-file>]"
+msgstr ""
+"B<debrsign> [options] [I<utilisateur>@]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 et en exécutant 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 ""
+"On peut aussi le faire dans l'autre sens : on se connecte à la machine non "
+"sûre pour télécharger les fichiers I<.dsc> et I<.changes>, on signe les "
+"fichiers localement, puis on les renvoie. Consultez B<debsign>(1), qui peut "
+"réaliser ceci."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:35 ../scripts/debsign.1:77
+msgid ""
+"Look for a source-only I<.changes> file instead of a binary-build changes "
+"file."
+msgstr ""
+"Cherche un fichier I<.changes> uniquement pour le source plutôt qu'un "
+"fichier « changes » correspondant à un paquet binaire."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:47
+msgid ""
+"Multiarch changes mode: This signifies that B<debrsign> should use the most "
+"recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the changes files produced by B<dpkg-cross>."
+msgstr ""
+"Mode des fichiers changes multiarchitecture : ceci signifie que B<debrsign> "
+"doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers changes générés "
+"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 or PGP binary on the remote host."
+msgstr "Indique le chemin des programmes GPG ou PGP 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:71
+msgid "B<debsign>(1), B<dpkg-architecture>(1)  and B<ssh>(1)."
+msgstr "B<debsign>(1), B<dpkg-architecture>(1) et B<ssh>(1)."
+
+#. type: Plain text
+#: ../scripts/debrsign.1:73 ../scripts/debsign.1:155
+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/PGP"
+msgstr ""
+"debsign - Signer une paire de fichiers « changes » et « dsc » Debian avec "
+"GPG ou PGP"
+
+#. type: Plain text
+#: ../scripts/debsign.1:6
+msgid "B<debsign> [options] [I<changes-file>|I<dsc-file>|I<commands-file> ...]"
+msgstr ""
+"B<debsign> [options] [I<fichier-changes>|I<fichier-dsc>|I<fichier-"
+"commands> ...]"
+
+#. type: Plain text
+#: ../scripts/debsign.1:16
+msgid ""
+"B<debsign> mimics the signing aspects (and bugs) of B<dpkg-buildpackage>"
+"(1).  It takes either an unsigned I<.dsc> file or an unsigned I<.changes> "
+"file (along with 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 using the GNU Privacy Guard or PGP.  It is "
+"careful to calculate the size and checksums of the newly signed I<.dsc> file "
+"and replace the original values in the I<.changes> file."
+msgstr ""
+"B<debsign> copie les aspects (et les bogues) concernant la signature de "
+"B<dpkg-buildpackage>(1). Il prend en argument soit un fichier I<.dsc> non "
+"signé, soit un fichier I<.changes> non signé (avec le fichier I<.dsc> "
+"associé, qui est trouvé en remplaçant le nom de l'architecture et "
+"l'extension I<.changes> par I<.dsc> s'il apparaît dans le fichier I<."
+"changes>), et les signe en utilisant GNU Privacy Guard ou PGP. Il fait "
+"attention à calculer la taille et la somme de contrôle du nouveau fichier I<."
+"dsc> signé et remplace les valeurs du fichier I<.changes>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:21
+msgid ""
+"If a I<.changes>, I<.dsc> or I<.commands> 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>, I<.dsc> ou I<.commands> 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."
+
+#. type: Plain text
+#: ../scripts/debsign.1:25
+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>) ; et 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> 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)."
+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 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)."
+
+#. 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 I<.changes> and I<.dsc> files live on the specified remote host.  In "
+"this case, a 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<changes> syntax is "
+"permitted as an alternative.  Wildcards (B<*> etc.) are allowed."
+msgstr ""
+"Les fichiers I<.changes> et I<.dsc> se trouvent sur l'hôte distant indiqué. "
+"Dans ce cas, un fichier 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<fichier_changes> est également permise. Les jockers (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:53
+msgid ""
+"I<progname> is one of B<pgp> or B<gpg>, and specifies which signing program "
+"is to be called.  The default is B<gpg> if I<~/.gnupg/secring.gpg> exists "
+"and B<pgp> otherwise."
+msgstr ""
+"Le I<programme> peut être B<pgp> ou B<gpg>. Il indique le programme utilisé "
+"pour la signature. Par défaut, B<gpg> est utilisé si I<~/.gnupg/secring.gpg> "
+"existe et B<pgp> sinon."
+
+#. type: TP
+#: ../scripts/debsign.1:53
+#, no-wrap
+msgid "B<-m>I<maintainer>"
+msgstr "B<-m>I<responsable>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:62
+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 ""
+"Indique le nom du responsable à utiliser pour la signature. Voir 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, à l'exception qu'il respecte l'ordre de priorité "
+"des différentes options. Ces différentes options sont fournies de manière à "
+"ce que ce programme se comporte comme prévu lorsqu'il est appelé par "
+"B<debuild>(1)."
+
+#. type: TP
+#: ../scripts/debsign.1:62
+#, no-wrap
+msgid "B<-e>I<maintainer>"
+msgstr "B<-e>I<responsable>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:65
+msgid "Same as B<-m> but takes precedence over it."
+msgstr "Identique à B<-m>, mais a une priorité plus élevée."
+
+#. type: TP
+#: ../scripts/debsign.1:65
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr "B<-k>I<identifiant_clef>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:69
+msgid ""
+"Specify the key ID to be used for signing; overrides any B<-m> and B<-e> "
+"options."
+msgstr ""
+"Indique l'identifiant de la clé à utiliser pour la signature. Cette option "
+"prévaut sur toute utilisation des options B<-m> et B<-e>."
+
+#. type: TP
+#: ../scripts/debsign.1:69
+#, no-wrap
+msgid "B<-spgp>, B<-sgpg>"
+msgstr "B<-spgp>, B<-sgpg>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:73
+msgid ""
+"Whether the signing program is to be called with command line arguments like "
+"those of B<pgp> or B<gpg>."
+msgstr ""
+"Indique si le programme utilisé pour signer est appelé avec les arguments en "
+"ligne de commande de B<pgp> ou de B<gpg>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:89
+msgid ""
+"Multiarch changes mode: This signifies that B<debsign> should use the most "
+"recent file with the name pattern I<package_version_*+*.changes> as the "
+"changes file, allowing for the changes files produced by B<dpkg-cross>."
+msgstr ""
+"Mode des fichiers changes multiarchitecture : ceci signifie que B<debsign> "
+"doit utiliser le fichier le plus récent respectant le modèle "
+"I<paquet_version_*+*.changes>, autorisant ainsi les fichiers changes générés "
+"par B<dpkg-cross>."
+
+#. type: TP
+#: ../scripts/debsign.1:89
+#, no-wrap
+msgid "B<--re-sign>, B<--no-re-sign>"
+msgstr "B<--re-sign>, B<--no-re-sign>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:95
+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ée la signature ou utilise 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: Plain text
+#: ../scripts/debsign.1:101
+msgid ""
+"Look for the I<.changes> and I<.dsc> files 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 I<.changes> et I<.deb> 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:117
+#, no-wrap
+msgid "B<DEBSIGN_PROGRAM>"
+msgstr "B<DEBSIGN_PROGRAM>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:120
+msgid "Setting this is equivalent to giving a B<-p> option."
+msgstr "Équivaut à fournir une option B<-p>."
+
+#. type: TP
+#: ../scripts/debsign.1:120
+#, no-wrap
+msgid "B<DEBSIGN_SIGNLIKE>"
+msgstr "B<DEBSIGN_SIGNLIKE>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:124
+msgid ""
+"This must be I<gpg> or I<pgp> and is equivalent to using either B<-sgpg> or "
+"B<-spgp> respectively."
+msgstr ""
+"Les valeurs autorisées sont I<gpg> et I<pgp>. Ceci équivaut à utiliser "
+"respectivement les options B<-sgpg> ou B<-spgp>."
+
+#. type: TP
+#: ../scripts/debsign.1:124
+#, no-wrap
+msgid "B<DEBSIGN_MAINT>"
+msgstr "B<DEBSIGN_MAINT>"
+
+#. type: Plain text
+#: ../scripts/debsign.1:127
+msgid "This is the B<-m> option."
+msgstr "Équivaut à utiliser l'option B<-m>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:130
+msgid "And this is the B<-k> option."
+msgstr "Équivaut à utiliser l'option B<-k>."
+
+#. type: Plain text
+#: ../scripts/debsign.1:140
+msgid ""
+"This specifies the directory in which to look for the I<.changes> and I<."
+"dsc> 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> et I<."
+"deb>, et est soit un chemin absolu ou un chemin relatif à la racine du "
+"répertoire racine. Ceci 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. Notez que cela concerne également B<debrelease>(1), ce qui explique "
+"le nom étrange de l'option."
+
+#. type: Plain text
+#: ../scripts/debsign.1:153
+msgid ""
+"B<debrsign>(1), B<dpkg-buildpackage>(1), B<dpkg-architecture>(1), B<debuild>"
+"(1), B<md5sum>(1), B<sha1sum>(1), B<sha256sum>(1), B<gpg>(1), B<pgp>(1), "
+"B<scp>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+"B<debrsign>(1), B<dpkg-buildpackage>(1), B<dpkg-architecture>(1), B<debuild>"
+"(1), B<md5sum>(1), B<sha1sum>(1), B<sha256sum>(1), B<gpg>(1), B<pgp>(1), "
+"B<scp>(1) et 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'ancienne 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 d'aider à 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<http://snapshot.debian.org>"
+msgstr ""
+"La seule archive publique est 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 "
+"disponible 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 ou placer les paquets récupérés."
+
+#. type: TP
+#: ../scripts/debsnap.1:33
+#, 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 '.' (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 en indiquant que le répertoire de destination n'existe pas, sauf "
+"si « . » (le répertoire de travail en cours) est explicitement indiqué. "
+"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: TP
+#: ../scripts/debsnap.1:42
+#, no-wrap
+msgid "B<-v>, B<--verbose>"
+msgstr "B<-v>, B<--verbose>"
+
+#. 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: Plain text
+#: ../scripts/debsnap.1:50
+msgid "Show a summary of these options."
+msgstr "Afficher un résumé des options."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:54
+msgid "Show the version of B<debsnap>."
+msgstr "Afficher la version de B<debsnap>."
+
+#. type: Plain text
+#: ../scripts/debsnap.1:59
+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:60
+#, no-wrap
+msgid "B<DEBSNAP_VERBOSE>"
+msgstr "B<DEBSNAP_VERBOSE>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:63
+msgid ""
+"Same as the command line option B<--verbose>.  Set to \"yes\" to enable."
+msgstr ""
+"Identique à l'option en ligne de commande B<--verbose>. À définir à « yes » "
+"pour activer l'option."
+
+#. type: TP
+#: ../scripts/debsnap.1:64
+#, no-wrap
+msgid "B<DEBSNAP_DESTDIR>"
+msgstr "B<DEBSNAP_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:69
+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:70
+#, no-wrap
+msgid "B<DEBSNAP_BASE_URL>"
+msgstr "B<DEBSNAP_BASE_URL>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:73
+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:75
+msgid "If unset this defaults to I<http://snapshot.debian.org>"
+msgstr ""
+"Si elle n'est pas définie, la valeur par défaut est I<http://snapshot.debian."
+"org>"
+
+#. type: SH
+#: ../scripts/debsnap.1:76 ../scripts/transition-check.pl:54
+#: ../scripts/uscan.1:498 ../scripts/wnpp-check.1:25
+#, no-wrap
+msgid "EXIT STATUS"
+msgstr "VALEURS DE RETOUR"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:82
+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: SH
+#: ../scripts/debsnap.1:83 ../scripts/diff2patches.1:28
+#, no-wrap
+msgid "FILES"
+msgstr "FICHIERS"
+
+#. type: TP
+#: ../scripts/debsnap.1:84
+#, no-wrap
+msgid "I</etc/devscripts.conf>"
+msgstr "I</etc/devscripts.conf>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:87
+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:87
+#, no-wrap
+msgid "I<~/.devscripts>"
+msgstr "I<~/.devscripts>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:95
+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: SH
+#: ../scripts/debsnap.1:96
+#, no-wrap
+msgid "AUTHORS"
+msgstr "AUTEURS"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:98
+msgid "David Paleino E<lt>dapal@debian.orgE<gt>"
+msgstr "David Paleino E<lt>dapal@debian.orgE<gt>"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:101
+msgid "Copyright \\(co 2010 David Paleino"
+msgstr "Copyright \\(co 2010 David Paleino"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:105
+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:108
+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:110
+#, no-wrap
+msgid "Reporting bugs"
+msgstr "Soumettre des rapports de bogue"
+
+#. type: Plain text
+#: ../scripts/debsnap.1:113
+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:29
+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 "
+"I<.changes> and/or I<.dsc> files as appropriate (using B<debsign>(1) to do "
+"this instead of B<dpkg-buildpackage>(1) itself; all relevant key-signing "
+"options are passed on).  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 I<.changes> et/ou B<."
+"dsc> appropriés (en utilisant B<debsign>(1) plutôt que B<dpkg-buildpackage>"
+"(1) ; toutes les options relatives à la signature lui sont passées). 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 positionner 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:46
+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 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 privilèges du superutilisateur et à "
+"exécuter I<debian/rules> avec ce(s) paramètre(s). Les options B<--"
+"rootcmd>=I<commande_pour_devenir_root> ou B<-r>I<commande_pour_devenir_root> "
+"peuvent être utilisées. La I<commande_pour_devenir_root> est en règle "
+"générale une de celles-ci : I<fakeroot>, I<sudo> ou I<super>. Voyez 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> ; ceci peut être explicitement demandé ou empêché "
+"avec les options B<-D> et B<-d>, respectivement. Notez également que si une "
+"de ces options ou si l'option B<-r> est indiquée dans la variable "
+"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:49
+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. Ceci permet de fournir des options à utiliser par défaut."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debuild.1:61
+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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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<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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL et "
+"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:94
+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 TERM, HOME, LOGNAME, GNUPGHOME, PGPPATH, "
+"GPG_AGENT_INFO, FAKEROOTKEY, DEB_*, the (C, CPP, CXX, LD and F)FLAGS "
+"variables and their _APPEND counterparts and the locale variables LANG and "
+"LC_*.  TERM is set to `dumb' if it is unset, and 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 TERM, HOME, "
+"LOGNAME, GNUPGHOME, PGPPATH, GPG_AGENT_INFO, FAKEROOTKEY, DEB_*, des "
+"variables (C, CPP, CXX, LD et F)FLAGS et les variables _APPEND associées, "
+"ainsi que les variables pour les paramètres régionaux LANG et LC_*. La "
+"variable TERM vaut « dumb » si elle n'est pas positionnée, et PATH est "
+"positionnée à « /usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 »."
+
+#. type: Plain text
+#: ../scripts/debuild.1:105
+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 PATH will be set to the sane "
+"value described above.  The B<only> way to prevent 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 PATH "
+"est remis à la valeur précisée ci-dessus. Le B<seul> moyen d'empêcher le "
+"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:109
+msgid ""
+"Note that one may add directories to the beginning of the sanitised PATH, "
+"using the B<--prepend-path> option. This is useful when one wishes to use "
+"tools such as ccache or distcc for building."
+msgstr ""
+"Notez que des répertoire peuvent être ajoutés au début de la variable "
+"d'environnement PATH en utilisant l'option B<--prepend-path>. C'est utile "
+"quand on veut utiliser des outils comme ccache ou distcc pour la "
+"construction d'un paquet."
+
+#. type: Plain text
+#: ../scripts/debuild.1:114
+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:114
+#, no-wrap
+msgid "SUPERUSER REQUIREMENTS"
+msgstr "OBTENTION DES PRIVILÈGES DU SUPERUTILISATEUR"
+
+#. type: Plain text
+#: ../scripts/debuild.1:124
+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 privilèges. 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 "
+"supposée."
+
+#. type: Plain text
+#: ../scripts/debuild.1:130
+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. Notez cependant que B<lintian> s'arrêtera s'il est exécuté "
+"en tant que superutilisateur ou setuid root ; ceci 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:146
+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 privilèges 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>. Ceci permettra de conserver les "
+"permissions après les mises à jour."
+
+#. type: SH
+#: ../scripts/debuild.1:146
+#, no-wrap
+msgid "HOOKS"
+msgstr "CROCHETS"
+
+#. type: Plain text
+#: ../scripts/debuild.1:153
+msgid ""
+"B<debuild> supports a number of hooks when running B<dpkg-buildpackage>.  "
+"Note that if any of the hooks from clean-hook to final-clean (inclusive) are "
+"used, B<debuild> will emulate some sections of the B<dpkg-buildpackage> "
+"process rather than running them directly, as B<dpkg-buildpackage> does not "
+"support hooks.  The available hooks are as follows:"
+msgstr ""
+"B<debuild> gère un certain nombre de points d'accroche (« hook ») quand il "
+"exécute B<dpkg-buildpackage>. Notez que si un des points d'accroche entre "
+"clean-hook et final-hook (inclus) est utilisé, B<debuild> émulera certaines "
+"sections du processus B<dpkg-buildpackage> plutôt que de les exécuter "
+"directement, puisque B<dpkg-buildpackage> n'a pas de point d'accroche. Les "
+"points d'accroche suivants sont disponibles :"
+
+#. type: TP
+#: ../scripts/debuild.1:153
+#, no-wrap
+msgid "dpkg-buildpackage-hook"
+msgstr "dpkg-buildpackage-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:156
+msgid "Run before dpkg-buildpackage begins by calling dpkg-checkbuilddeps."
+msgstr ""
+"S'exécute avant le début de dpkg-buildpackage en appelant dpkg-"
+"checkbuilddeps."
+
+#. type: TP
+#: ../scripts/debuild.1:156
+#, no-wrap
+msgid "clean-hook"
+msgstr "clean-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:161
+msgid ""
+"Run before dpkg-buildpackage runs debian/rules clean to clean the source "
+"tree.  (Run even if the tree is not being cleaned because -nc is used.)"
+msgstr ""
+"S'exécute avant que dpkg-buildpackage lance la règle clean du fichier debian/"
+"rules pour nettoyer le source. (S'exécute même si le source n'est pas "
+"nettoyé car -nc est utilisée.)"
+
+#. type: TP
+#: ../scripts/debuild.1:161
+#, no-wrap
+msgid "dpkg-source-hook"
+msgstr "dpkg-source-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:165
+msgid ""
+"Run after cleaning the tree and before running dpkg-source.  (Run even if "
+"dpkg-source is not being called because -b or -B is used.)"
+msgstr ""
+"S'exécute après le nettoyage du source et avant l'exécution de dpkg-source. "
+"(S'exécute même si dpkg-source n'est pas appelé car -b ou -B est utilisée.)"
+
+#. type: TP
+#: ../scripts/debuild.1:165
+#, no-wrap
+msgid "dpkg-build-hook"
+msgstr "dpkg-build-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:170
+msgid ""
+"Run after dpkg-source and before calling debian/rules build.  (Run even if "
+"this is a source-only build, so debian/rules build is not being called.)"
+msgstr ""
+"S'exécute après dpkg-source et avant l'appel de la règle build du fichier "
+"debian/rules. (S'exécute même si ce n'est qu'une construction du paquet "
+"source, donc que la règle build du fichier debian/rules n'est pas appelée.)"
+
+#. type: TP
+#: ../scripts/debuild.1:170
+#, no-wrap
+msgid "dpkg-binary-hook"
+msgstr "dpkg-binary-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:174
+msgid ""
+"Run between debian/rules build and debian/rules binary(-arch).  Run ONLY if "
+"a binary package is being built."
+msgstr ""
+"S'exécute entre les appels aux règles build et binary(-arch) du fichier "
+"debian/rules. Ne s'exécute QUE si un paquet binaire est construit."
+
+#. type: TP
+#: ../scripts/debuild.1:174
+#, no-wrap
+msgid "dpkg-genchanges-hook"
+msgstr "dpkg-genchanges-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:178
+msgid ""
+"Run after the binary package is built and before calling dpkg-genchanges."
+msgstr ""
+"S'exécute seulement après la construction du paquet et avant l'appel à dpkg-"
+"genchanges."
+
+#. type: TP
+#: ../scripts/debuild.1:178
+#, no-wrap
+msgid "final-clean-hook"
+msgstr "final-clean-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:183
+msgid ""
+"Run after dpkg-genchanges and before the final debian/rules clean.  (Run "
+"even if we are not cleaning the tree post-build, which is the default.)"
+msgstr ""
+"S'exécute après dpkg-genchanges et avant l'appel final à la règle clean du "
+"fichier debian/rules. (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: TP
+#: ../scripts/debuild.1:183
+#, no-wrap
+msgid "lintian-hook"
+msgstr "lintian-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:187
+msgid ""
+"Run (once) before calling lintian.  (Run even if we are not calling lintian.)"
+msgstr ""
+"S'exécute (une fois) avant l'appel à lintian. (S'exécute même si aucun de "
+"ces programmes n'est appelé.)"
+
+#. type: TP
+#: ../scripts/debuild.1:187
+#, no-wrap
+msgid "signing-hook"
+msgstr "signing-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:191
+msgid ""
+"Run after calling lintian before any signing takes place.  (Run even if we "
+"are not signing anything.)"
+msgstr ""
+"S'exécute seulement après l'appel à lintian et avant la signature. "
+"(S'exécute même si rien n'est signé.)"
+
+#. type: TP
+#: ../scripts/debuild.1:191
+#, no-wrap
+msgid "post-dpkg-buildpackage-hook"
+msgstr "post-dpkg-buildpackage-hook"
+
+#. type: Plain text
+#: ../scripts/debuild.1:194
+msgid "Run after everything has finished."
+msgstr "S'exécute quand tout est fini."
+
+#. type: Plain text
+#: ../scripts/debuild.1:209
+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: %% will be "
+"replaced by a single % sign, %p will be replaced by the package name, %v by "
+"the package version number, %s by the source version number, %u by the "
+"upstream version number.  Neither %s nor %u will contain an epoch.  %a will "
+"be 1 if the immediately following action is to be performed and 0 if not "
+"(for example, in the dpkg-source hook, %a will become 1 if dpkg-source is to "
+"be run and 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 dpkg-"
+"source hook if dpkg-source is to be run, the hook could be something like: "
+"\"if [ %a -eq 1 ]; then ...; fi\"."
+msgstr ""
+"Une commande crochet 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 : %% deviendra un signe % simple, %p sera remplacé par le nom du "
+"paquet, %v par le numéro de version du paquet, %s par le numéro de version "
+"du source et %u par le numéro de version amont. Ni %s ni %u ne contiendra de "
+"temps absolu (« epoch »). %a sera 1 si l'action suivante doit être effectuée "
+"et 0 dans le cas contraire (par exemple, dans le crochet dpkg-source, %a "
+"sera 1 si dpkg-source doit être lancé et 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 dpkg-source si dpkg-source doit être exécutée, le crochet peut "
+"ressemble à ceci : « if [ %a -eq 1 ]; then ...; fi »."
+
+#. type: Plain text
+#: ../scripts/debuild.1:213
+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 crochets>, 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:219
+msgid ""
+"Finally, only dpkg-buildpackage-hook and the hooks from lintian-hook onwards "
+"can be used if B<dpkg-cross> is installed.  (This is because internally, "
+"B<debuild> reimplements B<dpkg-buildpackage>, but it does not attempt to "
+"reimplement the B<dpkg-cross> replacement of this script.)"
+msgstr ""
+"Enfin, seuls dpkg-buildpackage-hook et les crochets avant lintian-hook "
+"peuvent être utilisés si B<dpkg-cross> est installé. (Ceci est dû au fait "
+"que B<debuild> réimplémente en interne B<dpkg-buildpackage>, mais n'essaie "
+"pas de réimplémenter le remplacement de B<dpkg-cross> pour ce script.)"
+
+#. type: Plain text
+#: ../scripts/debuild.1:221
+msgid "For details, see above."
+msgstr "Pour plus de détails, voir ci-dessus."
+
+#. type: Plain text
+#: ../scripts/debuild.1:228
+msgid "Command to gain root (or fake root) privileges."
+msgstr "Commande pour obtenir (ou simuler) les privilèges superutilisateur."
+
+#. type: Plain text
+#: ../scripts/debuild.1:231
+msgid "Do not clean the environment, except for PATH."
+msgstr "Ne nettoie pas l'environnement, à l'exception du PATH."
+
+#. type: Plain text
+#: ../scripts/debuild.1:234
+msgid "Do not clean the I<var> variable from the environment."
+msgstr "Ne nettoie pas la variable d'environnement I<var>."
+
+#. type: Plain text
+#: ../scripts/debuild.1:238
+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:242
+msgid ""
+"Set the environment variable I<var> to I<value> and do not remove it from "
+"the environment."
+msgstr ""
+"Positionne la variable d'environnement I<var> à I<valeur> et ne l'enlève pas "
+"de l'environnement."
+
+#. type: TP
+#: ../scripts/debuild.1:242
+#, no-wrap
+msgid "B<--prepend-path=>I<value >"
+msgstr "B<--prepend-path=>I<valeur>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:246
+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:246
+#, no-wrap
+msgid "B<--lintian>"
+msgstr "B<--lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:251
+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écute 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:251
+#, no-wrap
+msgid "B<--no-lintian>"
+msgstr "B<--no-lintian>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:254
+msgid "Do not run B<lintian> after B<dpkg-buildpackage>."
+msgstr "N'exécute pas B<lintian> après B<dpkg-buildpackage>."
+
+#. type: TP
+#: ../scripts/debuild.1:254
+#, no-wrap
+msgid "B<--no-tgz-check>"
+msgstr "B<--no-tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:259
+msgid ""
+"Even if we're running B<dpkg-buildpackage> and the version number has a "
+"Debian revision, do not check that the .orig.tar.gz file or .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 vérifie pas que le fichier .orig.tar.gz existe "
+"avant de démarrer la construction."
+
+#. type: TP
+#: ../scripts/debuild.1:259
+#, no-wrap
+msgid "B<--tgz-check>"
+msgstr "B<--tgz-check>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:264
+msgid ""
+"If we're running B<dpkg-buildpackage> and the version number has a Debian "
+"revision, check that the .orig.tar.gz file or .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érifie que le fichier .orig.tar.gz existe avant de "
+"démarrer la construction. C'est le comportement par défaut."
+
+#. type: TP
+#: ../scripts/debuild.1:264
+#, no-wrap
+msgid "B<--username> I<username>"
+msgstr "B<--username> I<nom_utilisateur>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:268
+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<username> "
+"indique l'identifiant à utiliser."
+
+#. type: TP
+#: ../scripts/debuild.1:268
+#, no-wrap
+msgid "B<-->I<foo>B<-hook>=I<hook>"
+msgstr "B<-->I<toto>B<-hook>=I<crochet>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:272
+msgid ""
+"Set a hook as described above.  If I<hook> is blank, this unsets the hook."
+msgstr ""
+"Définit un crochet comme décrit ci-dessous. Si I<hook> est blanc, le crochet "
+"est annulé."
+
+#. type: TP
+#: ../scripts/debuild.1:272
+#, no-wrap
+msgid "B<--clear-hooks>"
+msgstr "B<--clear-hooks>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:276
+msgid ""
+"Clears all hooks.  They may be reinstated by later command line options."
+msgstr ""
+"Supprime tous les crochets. Ils peuvent être réinstallés par des options "
+"ultérieures en ligne de commande."
+
+#. type: Plain text
+#: ../scripts/debuild.1:287
+msgid "Do not run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"N'exécute pas B<dpkg-checkbuilddeps> pour vérifier les dépendances de "
+"construction du paquet (« build dependencies »)."
+
+#. type: TP
+#: ../scripts/debuild.1:287
+#, no-wrap
+msgid "B<-D>"
+msgstr "B<-D>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:290
+msgid "Run B<dpkg-checkbuilddeps> to check build dependencies."
+msgstr ""
+"Exécute B<dpkg-checkbuilddeps> pour vérifier les dépendances de construction."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/debuild.1:298
+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:298
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENV>"
+msgstr "B<DEBUILD_PRESERVE_ENV>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:302
+msgid ""
+"If this is set to I<yes>, then it is the same as the B<--preserve-env> "
+"command line parameter being used."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--preserve-"
+"env>."
+
+#. type: TP
+#: ../scripts/debuild.1:302
+#, no-wrap
+msgid "B<DEBUILD_PRESERVE_ENVVARS>"
+msgstr "B<DEBUILD_PRESERVE_ENVVARS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:307
+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. Ceci "
+"correspond à utiliser plusieurs fois les options B<--preserve-envvar> ou B<-"
+"e>."
+
+#. type: TP
+#: ../scripts/debuild.1:307
+#, 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:310
+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:310
+#, no-wrap
+msgid "B<DEBUILD_PREPEND_PATH>"
+msgstr "B<DEBUILD_PREPEND_PATH>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:313
+msgid "This corresponds to B<--prepend-path>."
+msgstr "Équivaut à utiliser B<--prepend-path>."
+
+#. type: TP
+#: ../scripts/debuild.1:313
+#, no-wrap
+msgid "B<DEBUILD_ROOTCMD>"
+msgstr "B<DEBUILD_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:317
+msgid "Setting this variable to I<prog> is the equivalent of B<-r>I<prog>."
+msgstr "Positionner cette variable à I<prog> équivaut à utiliser B<-r>I<prog>."
+
+#. type: TP
+#: ../scripts/debuild.1:317
+#, no-wrap
+msgid "B<DEBUILD_TGZ_CHECK>"
+msgstr "B<DEBUILD_TGZ_CHECK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:321
+msgid ""
+"Setting this variable to I<no> is the same as the B<--no-tgz-check> command "
+"line option."
+msgstr ""
+"Si elle est positionnée à I<no>, équivaut à utiliser l'option B<--no-tgz-"
+"check> en ligne de commande."
+
+#. type: TP
+#: ../scripts/debuild.1:321
+#, no-wrap
+msgid "B<DEBUILD_SIGNING_USERNAME>"
+msgstr "B<DEBUILD_SIGNING_USERNAME>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:325
+msgid ""
+"Setting this variable is the same as using the --username command line "
+"option."
+msgstr ""
+"Positionner cette variable équivaut à utiliser l'option B<--username> en "
+"ligne de commande."
+
+#. type: TP
+#: ../scripts/debuild.1:325
+#, no-wrap
+msgid "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+msgstr "B<DEBUILD_DPKG_BUILDPACKAGE_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:333
+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 config 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 clé GPG, même pour les envois sponsorisés (« sponsored upload »), le "
+"fichier de configuration pourra contenir :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:336
+#, 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:341
+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 `-' 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 « - »)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:346
+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 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>. Notez que "
+"l'option B<-r> placée ici écrasera le paramètre DEBUILD_ROOTCMD."
+
+#. type: TP
+#: ../scripts/debuild.1:346
+#, no-wrap
+msgid "B<DEBUILD_>I<FOO>B<_HOOK>"
+msgstr "B<DEBUILD_>I<TOTO>B<_HOOK>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:350
+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 crochet pour le crochet I<toto>. Voyez la section sur les "
+"crochets pour plus de détails. Par défaut, elle est non définie."
+
+#. type: TP
+#: ../scripts/debuild.1:350
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN>"
+msgstr "B<DEBUILD_LINTIAN>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:354
+msgid ""
+"Should we run B<lintian>? If this is set to I<no>, then B<lintian> will not "
+"be run."
+msgstr "Si elle est positionnée à I<no>, alors B<lintian> ne sera pas exécuté."
+
+#. type: TP
+#: ../scripts/debuild.1:354
+#, no-wrap
+msgid "B<DEBUILD_LINTIAN_OPTS>"
+msgstr "B<DEBUILD_LINTIAN_OPTS>"
+
+#. type: Plain text
+#: ../scripts/debuild.1:360
+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:371
+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 via la ligne de commande."
+
+#. type: Plain text
+#: ../scripts/debuild.1:374
+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:377
+#, no-wrap
+msgid "debuild -i -us -uc -b\n"
+msgstr "debuild -i -us -uc -b\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:380
+msgid "Change the \"-b\" to \"-S\" to build only a source package."
+msgstr "Changez « -b » en « -S » pour ne construire qu'un paquet source."
+
+#. type: Plain text
+#: ../scripts/debuild.1:383
+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:386
+#, no-wrap
+msgid "debuild --lintian-opts -i\n"
+msgstr "debuild --lintian-opts -i\n"
+
+#. type: Plain text
+#: ../scripts/debuild.1:394
+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 "
+"DEBUILD_DPKG_BUILDPACKAGE_OPTS configuration file option as described above."
+msgstr ""
+"Prenez note de 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 DEBUILD_DPKG_BUILDPACKAGE_OPTS "
+"du fichier de configuration, comme décrit plus haut."
+
+#. type: Plain text
+#: ../scripts/debuild.1:398
+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 sponsorisé (« sponsored upload »), "
+"donné par I<toto_1.0-1.dsc> et les fichiers sources respectifs, lancez "
+"quelque chose qui ressemblerait aux commandes suivantes :"
+
+#. type: Plain text
+#: ../scripts/debuild.1:403
+#, 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:410
+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 "
+"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 clé GPG ou un autre "
+"identifiant de clé tel que votre adresse de messagerie. De nouveau, Vous "
+"pouvez également utiliser l'option du fichier de configuration "
+"DEBUILD_DPKG_BUILDPACKAGE_OPTS tel que cela est décrit plus haut pour éviter "
+"d'avoir à taper l'option B<-k> à chaque fois que vous effectuez un envoi "
+"sponsorisé."
+
+#. type: Plain text
+#: ../scripts/debuild.1:423
+msgid ""
+"B<dpkg-buildpackage>(1), B<dpkg-checkbuilddeps>(1), B<debsign>(1), "
+"B<fakeroot>(1), B<lintian>(1), B<chmod>(1), B<dpkg-statoverride>(8), B<su>"
+"(1), B<sudo>(1), B<super>(1)  and B<devscripts.conf>(5)."
+msgstr ""
+"B<dpkg-buildpackage>(1), B<dpkg-checkbuilddeps>(1), B<debsign>(1), "
+"B<fakeroot>(1), B<lintian>(1), B<chmod>(1), B<dpkg-statoverride>(8), B<su>"
+"(1), B<sudo>(1), B<super>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/debuild.1:426
+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|--version>"
+msgstr "B<desktop2menu> B<--help|--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) 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/devscripts.1:1
+#, no-wrap
+msgid "DEVSCRIPTS"
+msgstr "DEVSCRIPTS"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/devscripts.1:16
+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."
+msgstr ""
+"Le répertoire I</usr/share/doc/devscripts/examples> contient également des "
+"exemples de scripts pour B<procmail> et B<exim> permettant de trier les "
+"messages arrivant aux listes de diffusion Debian."
+
+#. type: Plain text
+#: ../scripts/devscripts.1:20
+msgid ""
+"Several scripts of the devscripts suite use the following environment "
+"variables. Check the man page 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 la page de manuel de chaque script pour "
+"obtenir plus de précisions sur la façon dont ces variables sont utilisées."
+
+#. type: IX
+#: ../scripts/devscripts.1:20
+#, no-wrap
+msgid "Header"
+msgstr "Header"
+
+#. type: IP
+#: ../scripts/devscripts.1:21
+#, no-wrap
+msgid "\\s-1DEBEMAIL\\s0"
+msgstr "\\s-1DEBEMAIL\\s0"
+
+#. type: IX
+#: ../scripts/devscripts.1:22 ../scripts/devscripts.1:25
+#, no-wrap
+msgid "Item"
+msgstr "Item"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:24
+#, no-wrap
+msgid "\\s-1DEBFULLNAME\\s0"
+msgstr "\\s-1DEBFULLNAME\\s0"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:28
+#, no-wrap
+msgid "SCRIPTS"
+msgstr "SCRIPTS"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:31
+#, no-wrap
+msgid "I<annotate-output>(1)"
+msgstr "I<annotate-output>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:33
+#, no-wrap
+msgid "I<archpath>(1)"
+msgstr "I<archpath>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:35
+msgid "print tla/Bazaar package names [tla | bazaar]"
+msgstr "afficher les noms de paquets tla ou Bazaar [tla | bazaar]"
+
+#. type: IP
+#: ../scripts/devscripts.1:35
+#, no-wrap
+msgid "I<bts>(1)"
+msgstr "I<bts>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:37
+msgid ""
+"a command-line tool for manipulating the BTS [www-browser, libauthen-sasl-"
+"perl, libnet-smtp-ssl-perl, libsoap-lite-perl, libwww-perl, bsd-mailx | "
+"mailx]"
+msgstr ""
+"outil en ligne de commande pour manipuler le BTS [www-browser, libauthen-"
+"sasl-perl, libnet-smtp-ssl-perl, libsoap-lite-perl, libwww-perl, bsd-mailx | "
+"mailx]"
+
+#. type: IP
+#: ../scripts/devscripts.1:37
+#, no-wrap
+msgid "I<build-rdeps>(1)"
+msgstr "I<build-rdeps>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:39
+msgid ""
+"Searches for all packages that build-depend on a given package [dctrl-tools]"
+msgstr ""
+"rechercher tous les paquets qui dépendent du paquet indiqué pour leur "
+"construction (« reverse build depends » : dépendances de construction "
+"inverses) [dctrl-tools]"
+
+#. type: IP
+#: ../scripts/devscripts.1:39
+#, no-wrap
+msgid "I<chdist>(1)"
+msgstr "I<chdist>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:41
+#, no-wrap
+msgid "I<checkbashisms>(1)"
+msgstr "I<checkbashisms>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:43
+msgid ""
+"check whether a /bin/sh script contains any common bash-specific contructs"
+msgstr "rechercher des constructions spécifiques à bash dans un script /bin/sh"
+
+#. type: IP
+#: ../scripts/devscripts.1:43
+#, no-wrap
+msgid "I<cowpoke>(1)"
+msgstr "I<cowpoke>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:45
+#, no-wrap
+msgid "I<cvs-debi, cvs-debc>(1)"
+msgstr "I<cvs-debi, cvs-debc>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:47
+#, no-wrap
+msgid "I<cvs-debrelease>(1)"
+msgstr "I<cvs-debrelease>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:49
+#, no-wrap
+msgid "I<cvs-debuild>(1)"
+msgstr "I<cvs-debuild>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:51
+msgid ""
+"A wrapper for cvs-buildpackage to use debuild as its package building "
+"program. [cvs-buildpackage, fakeroot, lintian, gnupg]"
+msgstr ""
+"encapsulation de debuild pour construire les paquets avec cvs-buildpackage "
+"[cvs-buildpackage, fakeroot, lintian, gnupg]"
+
+#. type: IP
+#: ../scripts/devscripts.1:51
+#, no-wrap
+msgid "I<dcmd>(1)"
+msgstr "I<dcmd>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:53
+#, no-wrap
+msgid "I<dcontrol>(1)"
+msgstr "I<dcontrol>(1)"
+
+# NOTE: -- -> -
+#. type: Plain text
+#: ../scripts/devscripts.1:55
+msgid ""
+"remotely query package and source control files for all Debian "
+"distributions. [liburl-perl, libwww-perl]"
+msgstr ""
+"interroger les fichiers de contrôle des paquets sources et binaires pour "
+"toutes les distributions Debian [liburl-perl, libwww-perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:55
+#, no-wrap
+msgid "I<dd-list>(1)"
+msgstr "I<dd-list>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:57
+msgid "given a list of packages, pretty-print it ordered by maintainer"
+msgstr "ordonner joliment une liste de paquets par responsable"
+
+#. type: IP
+#: ../scripts/devscripts.1:57
+#, no-wrap
+msgid "I<debc>(1)"
+msgstr "I<debc>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:59
+msgid "display the contents of just-built .debs"
+msgstr "afficher le contenu des paquets venant d'être construits"
+
+#. type: IP
+#: ../scripts/devscripts.1:59
+#, no-wrap
+msgid "I<debchange/dch>(1)"
+msgstr "I<debchange/dch>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:61
+msgid ""
+"automagically add entries to debian/changelog files [libparse-debcontrol-"
+"perl, libsoap-lite-perl, lsb-release]"
+msgstr ""
+"ajouter automatiquement des entrées aux fichiers debian/changelog [libparse-"
+"debcontrol-perl, libsoap-lite-perl, lsb-release]"
+
+#. type: IP
+#: ../scripts/devscripts.1:61
+#, no-wrap
+msgid "I<debcheckout>(1)"
+msgstr "I<debcheckout>(1)"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/devscripts.1:63
+#, no-wrap
+msgid "I<debclean>(1)"
+msgstr "I<debclean>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:65
+msgid "purge a Debian source tree [fakeroot]"
+msgstr "nettoyer une arborescence source [fakeroot]"
+
+#. type: IP
+#: ../scripts/devscripts.1:65
+#, no-wrap
+msgid "I<debcommit>(1)"
+msgstr "I<debcommit>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:67
+msgid ""
+"commit changes to cvs, darcs, svn, svk, tla, bzr, git, or hg, basing commit "
+"message on changelog [cvs | darcs | subversion | svk | tla | bzr | git-core "
+"| mercurial]"
+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]"
+
+#. type: IP
+#: ../scripts/devscripts.1:67
+#, no-wrap
+msgid "I<debdiff>(1)"
+msgstr "I<debdiff>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:69
+msgid ""
+"compare two versions of a Debian package to check for added and removed "
+"files [wdiff, patchutils]"
+msgstr ""
+"comparer deux versions d'un paquet Debian pour vérifier les fichiers ajoutés "
+"ou supprimés [wdiff, patchutils]"
+
+#. type: IP
+#: ../scripts/devscripts.1:69
+#, no-wrap
+msgid "I<debi>(1)"
+msgstr "I<debi>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:71
+msgid "install a just-built package"
+msgstr "installer un paquet venant d'être construit"
+
+#. type: IP
+#: ../scripts/devscripts.1:71
+#, no-wrap
+msgid "I<debpkg>(1)"
+msgstr "I<debpkg>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:73
+msgid "dpkg wrapper to be able to manage/test packages without su"
+msgstr "encapsulation de dpkg pour gérer et essayer les paquets sans su"
+
+#. type: IP
+#: ../scripts/devscripts.1:73
+#, no-wrap
+msgid "I<debrelease>(1)"
+msgstr "I<debrelease>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:75
+msgid "wrapper around dupload or dput [dupload | dput, ssh-client]"
+msgstr "encapsulation de dupload ou dput [dupload | dput, ssh-client]"
+
+#. type: IP
+#: ../scripts/devscripts.1:75
+#, no-wrap
+msgid "I<debsign, debrsign>(1)"
+msgstr "I<debsign, debrsign>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:77
+msgid ""
+"sign a .changes/.dsc pair without needing any of the rest of the package to "
+"be present; can sign the pair remotely or fetch the pair from a remote "
+"machine for signing [gnupg, debian-keyring, ssh-client]"
+msgstr ""
+"signer une paire de fichiers .changes et .dsc sans avoir besoin du reste du "
+"paquet. Signature à distance possible, ainsi que la récupération de la paire "
+"de fichier depuis une machine distante pour la signature [gnupg, debian-"
+"keyring, ssh-client]"
+
+#. type: IP
+#: ../scripts/devscripts.1:77
+#, no-wrap
+msgid "I<debsnap>(1)"
+msgstr "I<debsnap>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:79
+msgid ""
+"grab packages from http://snapshot.debian.org [libwww-perl, libjson-perl]"
+msgstr ""
+"récupérer des paquets de http://snapshot.debian.org [libwww-perl, libjson-"
+"perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:79
+#, no-wrap
+msgid "I<debuild>(1)"
+msgstr "I<debuild>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:81
+msgid ""
+"wrapper to build a package without having to su or worry about how to invoke "
+"dpkg to build using fakeroot.  Also deals with common environment problems, "
+"umask etc. [fakeroot, lintian, gnupg]"
+msgstr ""
+"encapsulation pour construire un paquet sans su ni s'embêter à appeler dpkg "
+"pour construire avec fakeroot. Les problèmes d'environnement classiques sont "
+"aussi gérés, umask, etc. [fakeroot, lintian, gnupg]"
+
+#. type: IP
+#: ../scripts/devscripts.1:81
+#, no-wrap
+msgid "I<deb-reversion>(1)"
+msgstr "I<deb-reversion>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:83
+msgid "increases a binary package version number and repacks the archive"
+msgstr ""
+"augmenter le numéro de version d'un paquet binaire et reconstruire l'archive."
+
+#. type: IP
+#: ../scripts/devscripts.1:83
+#, no-wrap
+msgid "I<desktop2menu>(1)"
+msgstr "I<desktop2menu>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:85
+msgid ""
+"produce a skeleton menu file from a freedesktop.org desktop file [libfile-"
+"desktopentry-perl]"
+msgstr ""
+"produire un corps de fichier menu à partir d'un fichier desktop freedesktop."
+"org [libfile-desktopentry-perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:85
+#, no-wrap
+msgid "I<dget>(1)"
+msgstr "I<dget>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:87
+msgid "downloads Debian source and binary packages [wget | curl]"
+msgstr "télécharger des paquets Debian source et binaire [wget | curl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:87
+#, no-wrap
+msgid "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+msgstr "I<dpkg-depcheck, dpkg-genbuilddeps>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:89
+msgid ""
+"determine the packages used during the build of a Debian package; useful for "
+"determining the Build-Depends control field needed [build-essential, strace]"
+msgstr ""
+"déterminer les paquets utilisés pendant la construction du paquet Debian. "
+"Pratique pour déterminer les champs de contrôle Build-Depends nécessaires "
+"[build-essential, strace]"
+
+#. type: IP
+#: ../scripts/devscripts.1:89
+#, no-wrap
+msgid "I<diff2patches>(1)"
+msgstr "I<diff2patches>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:91
+msgid ""
+"extract patches from a .diff.gz file placing them under debian/ or, if "
+"present, debian/patches [patchutils]"
+msgstr ""
+"extraire les correctifs d'un fichier .diff.gz en les plaçant dans debian/ ou "
+"debian/patches s'il existe [patchutils]"
+
+#. type: IP
+#: ../scripts/devscripts.1:91
+#, no-wrap
+msgid "I<dscverify>(1)"
+msgstr "I<dscverify>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:93
+msgid ""
+"verify the integrity of a Debian package from the .changes or .dsc files "
+"[gnupg, debian-keyring, libdigest-md5-perl]"
+msgstr ""
+"vérifier l'intégrité d'un paquet Debian à partir des fichiers .changes ou ."
+"dsc [gnupg, debian-keyring, libdigest-md5-perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:93
+#, no-wrap
+msgid "I<getbuildlog>(1)"
+msgstr "I<getbuildlog>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:95
+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
+#: ../scripts/devscripts.1:95
+#, no-wrap
+msgid "I<grep-excuses>(1)"
+msgstr "I<grep-excuses>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:97
+msgid ""
+"grep the update_excuses.html file for your packages [libterm-size-perl, "
+"wget, w3m]"
+msgstr ""
+"rechercher vos paquets dans le fichier update_excuses.html [libterm-size-"
+"perl, wget, w3m]"
+
+#. type: IP
+#: ../scripts/devscripts.1:97
+#, no-wrap
+msgid "I<licensecheck>(1)"
+msgstr "I<licensecheck>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:99
+msgid "attempt to determine the license of source files"
+msgstr "essayer de déterminer la licence des fichiers sources"
+
+#. type: IP
+#: ../scripts/devscripts.1:99
+#, no-wrap
+msgid "I<list-unreleased>(1)"
+msgstr "I<list-unreleased>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:101
+msgid "searches for unreleased packages"
+msgstr "rechercher les paquets qui ne sont toujours pas envoyés (UNRELEASED)"
+
+#. type: IP
+#: ../scripts/devscripts.1:101
+#, no-wrap
+msgid "I<manpage-alert>(1)"
+msgstr "I<manpage-alert>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:103
+msgid "locate binaries without corresponding manpages [man-db]"
+msgstr "trouver des programmes sans page de manuel [man-db]"
+
+#. type: IP
+#: ../scripts/devscripts.1:103
+#, no-wrap
+msgid "I<mass-bug>(1)"
+msgstr "I<mass-bug>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:105
+msgid "mass-file bug reports [bsd-mailx | mailx]"
+msgstr "soumettre en masse des rapports de bogue [bsd-mailx | mailx]"
+
+#. type: IP
+#: ../scripts/devscripts.1:105
+#, no-wrap
+msgid "I<mergechanges>(1)"
+msgstr "I<mergechanges>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:107
+msgid "merge .changes files from a package built on different architectures"
+msgstr ""
+"fusionner les fichiers .changes d'un paquet construit sur plusieurs "
+"architectures"
+
+#. type: IP
+#: ../scripts/devscripts.1:107
+#, no-wrap
+msgid "I<mk-build-deps>(1)"
+msgstr "I<mk-build-deps>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:109
+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 packages. "
+"[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
+#: ../scripts/devscripts.1:109
+#, no-wrap
+msgid "I<namecheck>(1)"
+msgstr "I<namecheck>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:111
+msgid "Check project names are not already taken."
+msgstr "vérifier la disponibilité des noms de projet."
+
+#. type: IP
+#: ../scripts/devscripts.1:111
+#, no-wrap
+msgid "I<nmudiff>(1)"
+msgstr "I<nmudiff>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:113
+msgid ""
+"mail a diff of the current package against the previous version to the BTS "
+"to assist in tracking NMUs [patchutils, mutt]"
+msgstr ""
+"envoyer un correctif du paquet en cours par rapport à la version précédente "
+"vers le BTS pour aider au suivi des NMU [patchutils, mutt]"
+
+#. type: IP
+#: ../scripts/devscripts.1:113
+#, no-wrap
+msgid "I<plotchangelog>(1)"
+msgstr "I<plotchangelog>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:115
+msgid ""
+"view a nice plot of the data in a changelog file [libtimedate-perl, gnuplot]"
+msgstr ""
+"afficher sous forme graphique les données d'un fichier changelog "
+"[libtimedate-perl, gnuplot]"
+
+#. type: IP
+#: ../scripts/devscripts.1:115
+#, no-wrap
+msgid "I<pts-subscribe>(1)"
+msgstr "I<pts-subscribe>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:117
+msgid ""
+"subscribe to the PTS for a limited period of time [bsd-mailx | mailx, at]"
+msgstr "s'abonner au PTS pendant un temps limité [bsd-mailx | mailx, at]"
+
+#. type: IP
+#: ../scripts/devscripts.1:117
+#, no-wrap
+msgid "I<rc-alert>(1)"
+msgstr "I<rc-alert>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:119
+msgid "list installed packages which have release-critical bugs [wget]"
+msgstr ""
+"lister les paquets installés ayant des bogues empêchant leur intégration "
+"dans la prochaine distribution [wget]"
+
+#. type: IP
+#: ../scripts/devscripts.1:119
+#, no-wrap
+msgid "I<rmadison>(1)"
+msgstr "I<rmadison>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:121
+msgid ""
+"remotely query the Debian archive database about packages [wget | curl, "
+"liburi-perl]"
+msgstr ""
+"interroger à distance la base de données de l'archive Debian [wget | curl, "
+"liburi-perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:121
+#, no-wrap
+msgid "I<svnpath>(1)"
+msgstr "I<svnpath>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:123
+msgid "print svn repository paths [subversion]"
+msgstr "afficher les chemins de dépôt Subversion [subversion]"
+
+#. type: IP
+#: ../scripts/devscripts.1:123
+#, no-wrap
+msgid "I<tagpending>(1)"
+msgstr "I<tagpending>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:125
+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
+#: ../scripts/devscripts.1:125
+#, no-wrap
+msgid "I<transition-check>(1)"
+msgstr "I<transition-check>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:127
+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 sources listés est impliqué dans une transition "
+"pour laquelle les uploads sont bloqués actuellement [libwww-perl, libyaml-"
+"syck-perl]"
+
+#. type: IP
+#: ../scripts/devscripts.1:127
+#, no-wrap
+msgid "I<uscan>(1)"
+msgstr "I<uscan>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:129
+msgid ""
+"scan upstream sites for new releases of packages [libcrypt-ssleay-perl, "
+"libwww-perl, unzip, lzma, xz-utils]"
+msgstr ""
+"surveiller la disponibilité d'une nouvelle version amont [libcrypt-ssleay-"
+"perl, libwww-perl, unzip, lzma, xz-utils]"
+
+#. type: IP
+#: ../scripts/devscripts.1:129
+#, no-wrap
+msgid "I<uupdate>(1)"
+msgstr "I<uupdate>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:131
+msgid "integrate upstream changes into a source package [patch]"
+msgstr "intégrer les modifications amont à un paquet source [patch]"
+
+#. type: IP
+#: ../scripts/devscripts.1:131
+#, no-wrap
+msgid "I<whodepends>(1)"
+msgstr "I<whodepends>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:133
+msgid "check which maintainers' packages depend on a package"
+msgstr "vérifier quels paquets (et responsables) dépendent d'un autre"
+
+#. type: IP
+#: ../scripts/devscripts.1:133
+#, no-wrap
+msgid "I<who-uploads>(1)"
+msgstr "I<who-uploads>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:135
+msgid ""
+"determine the most recent uploaders of a package to the Debian archive "
+"[gnupg, debian-keyring, debian-maintainers, wget]"
+msgstr ""
+"identifier les dernières personnes ayant envoyé un paquet vers l'archive "
+"Debian [gnupg, debian-keyring, debian-maintainers, wget]"
+
+#. type: IP
+#: ../scripts/devscripts.1:135
+#, no-wrap
+msgid "I<wnpp-alert>(1)"
+msgstr "I<wnpp-alert>(1)"
+
+#. type: Plain text
+#: ../scripts/devscripts.1:136
+msgid "list installed packages which are orphaned or up for adoption [wget]"
+msgstr ""
+"afficher la liste des paquets installés offerts à l'adoption ou orphelins "
+"[wget]"
+
+#. type: textblock
+#: ../scripts/dget.pl:481
+msgid "dget -- Download Debian source and binary packages"
+msgstr "dget - Télécharger des paquets Debian source et binaire"
+
+#. type: =item
+#: ../scripts/dget.pl:487
+msgid "B<dget> [I<options>] I<URL> ..."
+msgstr "B<dget> [I<options>] I<URL> ..."
+
+#. type: =item
+#: ../scripts/dget.pl:489
+msgid "B<dget> [I<options>] I<package>[=I<version>]"
+msgstr "B<dget> [I<options>] I<paquet>=I<version>"
+
+#. type: textblock
+#: ../scripts/dget.pl:495
+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:502
+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."
+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 courant 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."
+
+#. type: textblock
+#: ../scripts/dget.pl:509
+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 paquet et/ou URL à la fois."
+
+#. type: textblock
+#: ../scripts/dget.pl:512
+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 ""
+"(Notez 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<composant>/I<debian-installer>)."
+
+#. type: textblock
+#: ../scripts/dget.pl:517
+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:527
+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 sources via le "
+"web pour les envois sponsorisés. Afin de vérifier le paquet avec B<debdiff>, "
+"la dernière version binaire est disponible via B<dget> I<package>, la "
+"dernière version source via B<apt-get source> I<package>."
+
+#. type: =item
+#: ../scripts/dget.pl:536
+msgid "B<-b>, B<--backup>"
+msgstr "B<-b>, B<--backup>"
+
+#. type: textblock
+#: ../scripts/dget.pl:538
+msgid "Move files that would be overwritten to I<./backup>."
+msgstr "Déplace les fichiers qui devraient être écrasés dans I<./backup>."
+
+#. type: =item
+#: ../scripts/dget.pl:540
+msgid "B<-q>, B<--quiet>"
+msgstr "B<-q>, B<--quiet>"
+
+#. type: textblock
+#: ../scripts/dget.pl:542
+msgid "Suppress B<wget>/B<curl> non-error output."
+msgstr "Supprime la sortie de B<wget>/B<curl> (sauf les erreurs)."
+
+#. type: =item
+#: ../scripts/dget.pl:544
+msgid "B<-d>, B<--download-only>"
+msgstr "B<-d>, B<--download-only>"
+
+#. type: textblock
+#: ../scripts/dget.pl:546
+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:549
+msgid "B<-x>, B<--extract>"
+msgstr "B<-x>, B<--extract>"
+
+#. type: textblock
+#: ../scripts/dget.pl:551
+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:555
+msgid "B<-u>, B<--allow-unauthenticated>"
+msgstr "B<-u>, B<--allow-unauthenticated>"
+
+#. type: textblock
+#: ../scripts/dget.pl:557
+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 sources téléchargés en "
+"utilisant B<dscverify>."
+
+#. type: =item
+#: ../scripts/dget.pl:560
+msgid "B<--build>"
+msgstr "B<--build>"
+
+#. type: textblock
+#: ../scripts/dget.pl:562
+msgid "Run B<dpkg-buildpackage -b -uc> on the downloaded source package."
+msgstr "Exécute B<dpkg-buildpackage -b -uc> sur le paquet source téléchargé."
+
+#. type: =item
+#: ../scripts/dget.pl:564
+msgid "B<--path> DIR[:DIR...]"
+msgstr "B<--path> RÉP[:RÉP...]"
+
+#. type: textblock
+#: ../scripts/dget.pl:566
+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 « S--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:577
+msgid "B<--insecure>"
+msgstr "B<--insecure>"
+
+#. type: textblock
+#: ../scripts/dget.pl:579
+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:581
+msgid "B<--no-cache>"
+msgstr "B<--no-cache>"
+
+#. type: textblock
+#: ../scripts/dget.pl:583
+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: =item
+#: ../scripts/dget.pl:605
+msgid "DGET_PATH"
+msgstr "DGET_PATH"
+
+#. type: textblock
+#: ../scripts/dget.pl:607
+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 positionnée."
+
+#. type: =item
+#: ../scripts/dget.pl:612
+msgid "DGET_UNPACK"
+msgstr "DGET_UNPACK"
+
+#. type: textblock
+#: ../scripts/dget.pl:614
+msgid ""
+"Set to 'no' to disable extracting downloaded source packages.  Default is "
+"'yes'."
+msgstr ""
+"À configurer à « no » pour désactiver l'extraction des paquets sources "
+"téléchargés. La valeur par défaut est « yes »."
+
+#. type: =item
+#: ../scripts/dget.pl:617
+msgid "DGET_VERIFY"
+msgstr "DGET_VERIFY"
+
+#. type: textblock
+#: ../scripts/dget.pl:619
+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 sources téléchargés. La valeur par défaut est « yes »."
+
+#. type: =head1
+#: ../scripts/dget.pl:624
+msgid "BUGS AND COMPATIBILITY"
+msgstr "BOGUES ET COMPATIBILITÉ"
+
+#. type: textblock
+#: ../scripts/dget.pl:626
+msgid "B<dget> I<package> should be implemented in B<apt-get install -d>."
+msgstr "B<dget> I<package> devrait être implémenté dans B<apt-get install -d>."
+
+#. type: textblock
+#: ../scripts/dget.pl:628
+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 "
+"d'extraire les paquets sources téléchargés. Configurez DGET_UNPACK à « no » "
+"pour retrouver cet ancien comportement."
+
+#. type: textblock
+#: ../scripts/dget.pl:633
+msgid ""
+"This program is Copyright (C) 2005-08 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-2008 Christoph Berg <myon@debian.org>. "
+"Les modifications sont Copyright (C) 2005-2006 Julian Gilbey <jdg@debian."
+"org>."
+
+#. type: textblock
+#: ../scripts/dget.pl:641
+msgid ""
+"B<apt-get>(1), B<debdiff>(1), B<dpkg-source>(1), B<curl>(1), B<wget>(1)."
+msgstr ""
+"B<apt-get>(1), B<debdiff>(1), B<dpkg-source>(1), B<curl>(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 "diff2patches I<E<lt>filenameE<gt>>"
+msgstr "diff2patches I<E<lt>nom_fichierE<gt>>"
+
+#. type: Plain text
+#: ../scripts/diff2patches.1:10
+msgid "diff2patches I<--help>|I<--version>"
+msgstr "diff2patches I<--help>|I<--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: TP
+#: ../scripts/diff2patches.1:22
+#, no-wrap
+msgid "B<--help> "
+msgstr "B<--help> "
+
+#. 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 "I<DEB_PATCHES>"
+msgstr "I<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 "
+"patches sont extraits dans ce répertoire au lieu de le 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: TP
+#: ../scripts/dpkg-depcheck.1:16
+#, no-wrap
+msgid "B<-a>, B<--all>"
+msgstr "B<-a>, B<--all>"
+
+#. 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 signale aucune utilisation d'un paquet « essential » (essentiel) ou "
+"« build-essential » (essentiel pour la construction des paquets), ou d'une "
+"de leurs dépendances (directe ou indirecte)."
+
+#. 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'affiche pas 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 ""
+"Donne un ensemble minimaliste de paquets nécessaires, en prenant en compte "
+"les dépendances directes. Utiliser B<-m> implique B<-d> et aussi 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écute 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 change pas 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 "Signale é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 signale pas 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 ""
+"Dirige 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 ""
+"Lorsque la I<commande> est « tracée », écrit la sortie de B<strace> dans "
+"I<FICHIER> plutôt que dans un fichier temporaire."
+
+#. 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 ""
+"Utilise la sortie B<strace> du I<FICHIER> au lieu de « tracer » 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 ""
+"Active ou désactive 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 ""
+"Avertit 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 ""
+"N'utilise pas I<execve> lorsque seul un argument I<--version> est donné au "
+"programme. C'est une astuce pour les scripts « configure » qui recherchent "
+"des exécutables qu'ils n'utilisent en fait pas. 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 ""
+"Essaye é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 ""
+"Avertit à 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 prend pas 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 "Affiche un message d'aide et quitte."
+
+#. type: =item
+#: ../scripts/dpkg-depcheck.1:99 ../scripts/mk-build-deps.pl:83
+#, 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 "Affiche la version et le copyright puis quitte."
+
+# NOTE: presque identique
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:108 ../scripts/grep-excuses.1:34
+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:124
+msgid ""
+"B<dpkg>(1), B<strace>(1), B<update-alternatives>(8)  and B<devscripts.conf>"
+"(5)."
+msgstr ""
+"B<dpkg>(1), B<strace>(1), B<update-alternatives>(8) et B<devscripts.conf>(5)."
+
+#. type: SH
+#: ../scripts/dpkg-depcheck.1:124
+#, no-wrap
+msgid "COPYING"
+msgstr "COPYRIGHT"
+
+#. type: Plain text
+#: ../scripts/dpkg-depcheck.1:131
+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 arguments 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. Ceci 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 qui dépend de l'architecture et ceux utilisés pour "
+"l'étape qui ne dépend pas de l'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:36
+msgid ""
+"B<The Debian Policy Manual,> sections on Build-Depends etc., B<dpkg-depcheck>"
+"(1)  and B<fakeroot>(1)."
+msgstr ""
+"B<La charte Debian>, sections Build-Depends etc., B<dpkg-depcheck>(1) et  "
+"B<fakeroot>(1)."
+
+#. 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
+#: ../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_dsc_filename> ..."
+msgstr ""
+"B<dscverify> [B<--keyring >I<trousseau_de_clés>] ... "
+"I<fichier_changes_ou_dsc> ..."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:17
+msgid ""
+"B<dscverify> checks that the GPG or PGP signatures on the given I<.changes> "
+"or I<.dsc> files are good signatures made by keys in the current Debian "
+"keyrings, found in the I<debian-keyring> and I<debian-maintainers> "
+"packages.  (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> 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 ou PGP des fichiers I<.changes> "
+"ou I<.dsc> sont des signatures correctes effectuées avec des clés du "
+"trousseau de clés Debian actuel, que l'on peut trouver dans les paquets "
+"I<debian-keyring> et I<debian-maintainers>. (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> 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 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 clés à 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 clés 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:32
+msgid ""
+"Skip the signature verification step. That is, only verify the sizes and "
+"checksums of the files listed in the I<.changes> 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 le fichier I<.changes> ou "
+"I<.dsc>."
+
+#. type: TP
+#: ../scripts/dscverify.1:32 ../scripts/plotchangelog.1:78
+#: ../scripts/uscan.1:418
+#, no-wrap
+msgid "B<--verbose>"
+msgstr "B<--verbose>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:35
+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:49
+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:49
+#, no-wrap
+msgid "B<DSCVERIFY_KEYRINGS>"
+msgstr "B<DSCVERIFY_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:53
+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 clés supplémentaires (séparés par des « : ») à "
+"utiliser en plus de ceux indiqués en ligne de commande."
+
+#. type: SH
+#: ../scripts/dscverify.1:53
+#, no-wrap
+msgid "KEYRING"
+msgstr "TROUSSEAU DE CLÉ"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:60
+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 ""
+"Veillez noter que le trousseau de clés 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 clés à 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:62
+msgid "Below is an example for an alias:"
+msgstr "Voici un exemple d'alias :"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:64
+msgid "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+msgstr "alias dscverify='dscverify --keyring ~/.gnupg/pubring.gpg'"
+
+#. type: SH
+#: ../scripts/dscverify.1:64
+#, no-wrap
+msgid "STANDARD KEYRING LOCATIONS"
+msgstr "EMPLACEMENTS STANDARDS DES TROUSSEAUX"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:67
+msgid ""
+"By default dscverify searches for the debian-keyring in the following "
+"locations:"
+msgstr ""
+"Par défaut, dscverify recherche le trousseau de clé debian aux emplacements "
+"suivants :"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:69
+msgid "- /org/keyring.debian.org/keyrings/debian-keyring.(gpg|pgp)"
+msgstr "- /org/keyring.debian.org/keyrings/debian-keyring.(gpg|pgp)"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:71
+msgid "- /usr/share/keyrings/debian-keyring.(pgp|gpg)"
+msgstr "- /usr/share/keyrings/debian-keyring.(pgp|gpg)"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:73
+msgid "- /usr/share/keyrings/debian-maintainers.gpg"
+msgstr "- /usr/share/keyrings/debian-maintainers.gpg"
+
+#. type: Plain text
+#: ../scripts/dscverify.1:77
+msgid "B<gpg>(1)  and B<devscripts.conf>(5)."
+msgstr "B<gpg>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/dscverify.1:81
+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 seul 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 "Affiche 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: 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:13
+msgid ""
+"B<grep-excuses> downloads the update_excuses.html file and greps it for the "
+"specified maintainer name.  The B<libwww-perl> 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 le fichier update_excuses.html et y recherche "
+"(avec grep) un certain nom de responsable. Le paquet B<libwww-perl> est "
+"nécessaire pour ce script. Si aucun nom n'est fourni en ligne de commande, "
+"la 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:18
+#, no-wrap
+msgid "B<--wipnity>, B<-w>"
+msgstr "B<--wipnity>, B<-w>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:22
+msgid ""
+"Get information from E<lt>http://release.debian.org/migration/E<gt>.  A "
+"package name must be given when using this option."
+msgstr ""
+"Récupérer les informations de E<lt>http://release.debian.org/migration/"
+"E<gt>. Un nom de paquet doit être fourni quand on utilise cette option."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:25 ../scripts/whodepends.1:14
+msgid "Show a brief usage message."
+msgstr "Affiche un bref message d'aide."
+
+#. type: TP
+#: ../scripts/grep-excuses.1:34
+#, no-wrap
+msgid "B<GREP_EXCUSES_MAINTAINER>"
+msgstr "B<GREP_EXCUSES_MAINTAINER>"
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:38
+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: Plain text
+#: ../scripts/grep-excuses.1:40 ../scripts/plotchangelog.1:126
+msgid "B<devscripts.conf>(5)."
+msgstr "B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/grep-excuses.1:42
+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/licensecheck.pl:24
+msgid "licensecheck - simple license checker for source files"
+msgstr "licensecheck - Vérificateur de licence pour fichiers source"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:28
+msgid "B<licensecheck> B<--help|--version>"
+msgstr "B<licensecheck> B<--help|--version>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:30
+msgid ""
+"B<licensecheck> [B<--no-conf>] [B<--verbose>] [B<--copyright>] [B<-l|--"
+"lines=N>] [B<-i|--ignore=regex>] [B<-c|--check=regex>] [B<-r|--recursive>] "
+"I<list of files and directories to check>"
+msgstr ""
+"B<licensecheck> [B<--no-conf>] [B<--verbose>] [B<--copyright>] [B<-l|--"
+"lines=N>] [B<-i|--ignore=regex>] [B<-c|--check=regex>] [B<-r|--recursive>] "
+"I<liste de fichiers ou répertoires à vérifier>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:36
+msgid ""
+"B<licensecheck> attempts to determine the license that applies to each file "
+"passed to it, by searching the start of the file for text belonging to "
+"various licenses."
+msgstr ""
+"B<licensecheck> cherche à déterminer la licence qui s'applique à chaque "
+"fichier qui lui est fourni en recherchant, au début du fichier, différents "
+"blocs de texte qui appartiennent à des licences."
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:40
+msgid ""
+"If any of the arguments passed are directories, B<licensecheck> will add the "
+"files contained within to the list of files to process."
+msgstr ""
+"Si un des paramètre est un répertoire, B<licensecheck> ajoutera les fichiers "
+"contenus dans ce répertoire à la liste des fichiers à analyser."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:47
+msgid "B<--verbose> B<--no-verbose>"
+msgstr "B<--verbose> B<--no-verbose>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:49
+msgid ""
+"Specify whether to output the text being processed from each file before the "
+"corresponding license information."
+msgstr ""
+"Indiquer s'il faut afficher le texte analysé pour chacun des fichiers avant "
+"les informations sur la licence du fichier."
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:52
+msgid "Default is to be quiet."
+msgstr "Le comportement par défaut est d'être silencieux."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:54
+msgid "B<-l=N> B<--lines=N>"
+msgstr "B<-l=N> B<--lines=N>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:56
+msgid ""
+"Specify the number of lines of each file's header which should be parsed for "
+"license information. (Default is 60)."
+msgstr ""
+"Indiquer le nombre de lignes de chaque en-tête de fichier qui doit être "
+"analysé pour rechercher les informations sur les licences. (Par défaut, "
+"c'est 60 lignes)."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:59
+msgid "B<-i=regex> B<--ignore=regex>"
+msgstr "B<-i=regex> B<--ignore=regex>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:61
+msgid ""
+"When processing the list of files and directories, the regular expression "
+"specified by this option will be used to indicate those which should not be "
+"considered (e.g. backup files, VCS metadata)."
+msgstr ""
+"Lors du traitement de la liste des fichiers et répertoires, l'expression "
+"rationnelle précisée par cette option sera utilisée pour indiquer les "
+"fichiers ou répertoires qui ne doivent pas être traités (par exemple les "
+"fichiers de sauvegarde ou les fichiers des systèmes de gestion de "
+"configuration)."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:65
+msgid "B<-r> B<--recursive>"
+msgstr "B<-r> B<--recursive>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:67
+msgid "Specify that the contents of directories should be added recursively."
+msgstr ""
+"Indiquer que le contenu des répertoires doit être ajouté récursivement."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:70
+msgid "B<-c=regex> B<--check=regex>"
+msgstr "B<-c=regex> B<--check=regex>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:72
+msgid ""
+"Specify a pattern against which filenames will be matched in order to decide "
+"which files to check the license of."
+msgstr ""
+"Indiquer un modèle utilisé pour définir les fichiers dont la licence doit "
+"être vérifiée."
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:75
+msgid "The default includes common source files."
+msgstr "La valeur par défaut comprend différents fichiers sources usuels."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:77
+msgid "B<--copyright>"
+msgstr "B<--copyright>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:79
+msgid "Also display copyright text found within the file"
+msgstr ""
+"Afficher aussi les blocs de texte de copyright trouvés dans le fichier."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:81
+msgid "B<--no-conf> B<--noconf>"
+msgstr "B<--no-conf>, B<--noconf>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:83
+msgid ""
+"Do not read any configuration files. This can only be used as the first "
+"option given on the command-line."
+msgstr ""
+"Ne lit aucun fichier de configuration. L'option ne peut être utilisée qu'en "
+"première position de la ligne de commande."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:98
+msgid "B<LICENSECHECK_VERBOSE>"
+msgstr "B<LICENSECHECK_VERBOSE>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:100
+msgid ""
+"If this is set to I<yes>, then it is the same as the --verbose command line "
+"parameter being used. The default is I<no>."
+msgstr ""
+"Si elle est positionnée à I<yes>, équivaut à utiliser l'option B<--verbose> "
+"de la ligne de commande. La valeur par défaut est I<no>."
+
+#. type: =item
+#: ../scripts/licensecheck.pl:103
+msgid "B<LICENSECHECK_PARSELINES>"
+msgstr "B<LICENSECHECK_PARSELINES>"
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:105
+msgid ""
+"If this is set to a positive number then the specified number of lines at "
+"the start of each file will be read whilst attempting to determine the "
+"license(s) in use.  This is equivalent to the --lines command line option."
+msgstr ""
+"Si elle est configurée avec un nombre positif, alors le nombre de lignes "
+"indiqué au début des fichiers sera lu pour essayer de déterminer la ou les "
+"licences utilisées. C'est équivalent à utiliser l'option --lines de la ligne "
+"de commande."
+
+#. type: textblock
+#: ../scripts/licensecheck.pl:114
+msgid ""
+"This code is copyright by Adam D. Barratt <adam@adam-barratt.org.uk>, all "
+"rights reserved; based on a script of the same name from the KDE SDK, which "
+"is copyright by <dfaure@kde.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."
+msgstr ""
+"Ce code est copyright Adam D. Barratt <adam@adam-barratt.org.uk>, tous "
+"droits réservés ; basé sur un script du même nom du SDK KDE, copyright "
+"<dfaure@kde.org>. 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/licensecheck.pl:123 ../scripts/transition-check.pl:83
+msgid "Adam D. Barratt <adam@adam-barratt.org.uk>"
+msgstr "Adam D. Barratt <adam@adam-barratt.org.uk>"
+
+#. 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 toujours pas 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 le journal des modifications indique qu'il y a "
+"des changements en cours (UNRELEASED) et lister ces paquets ou les entrées "
+"des journaux des modifications correspondants."
+
+#. 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:21
+msgid "B<debchange>(1)"
+msgstr "B<debchange>(1)"
+
+#. 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: 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<[path list]>"
+msgstr "B<manpage-alert> I<[liste de chemins]>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:8
+msgid "B<manpage-alert --help|--version>"
+msgstr "B<manpage-alert --help|--version>"
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:11
+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:14
+msgid ""
+"If no 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 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: Plain text
+#: ../scripts/manpage-alert.1:17
+msgid "B<--help>, B<-h> Show a summary of options."
+msgstr "B<--help>, B<-h> Afficher un résumé des options."
+
+#. type: Plain text
+#: ../scripts/manpage-alert.1:25
+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:28
+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:24
+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:28
+msgid "mass-bug [options] --subject=\"bug subject\" template package-list"
+msgstr ""
+"mass-bug [options] --subject=\"sujet du bogue\" modèle liste-des-paquets"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:32
+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:38
+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 générer 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:43
+msgid "TEMPLATE"
+msgstr "MODÈLE"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:45
+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:50
+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:55
+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 ""
+"Notez 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:62
+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:68
+msgid "--severity=(wishlist|minor|normal|important|serious|grave|critical)"
+msgstr "--severity=(wishlist|minor|normal|important|serious|grave|critical)"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:70
+msgid ""
+"Specify the severity with which bugs should be filed. Default is 'normal'."
+msgstr ""
+"Indiquer la sévérité avec laquelle soumettre les bogues. Par défaut, "
+"« normal » est utilisé."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:73
+msgid "--display"
+msgstr "--display"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:75
+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:78
+msgid "--send"
+msgstr "--send"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:80
+msgid "Actually send the bug reports."
+msgstr "Envoie réellement les rapports de bogue."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:82
+msgid "--subject=\"bug subject\""
+msgstr "--subject=\"sujet du bogue\""
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:84
+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 ""
+"Indique 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:87
+msgid "--tags"
+msgstr "--tags"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:89
+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:91
+msgid "--user"
+msgstr "--user"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:93
+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:95
+msgid "--usertags"
+msgstr "--usertags"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:97
+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:99
+msgid "--source"
+msgstr "--source"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:101
+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 sources et non pas "
+"à des paquets binaires."
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:106
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will not be passed to a shell.  Default is '/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 « /usr/sbin/sendmail » qui est utilisé."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:109
+msgid "--no-wrap"
+msgstr "--no-wrap"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:111
+msgid "Do not wrap the template to lines of 70 characters."
+msgstr "Ne remet pas les lignes en forme à 70 caractères."
+
+#. type: =item
+#: ../scripts/mass-bug.pl:118
+msgid "--help"
+msgstr "--help"
+
+#. type: textblock
+#: ../scripts/mass-bug.pl:130
+msgid ""
+"DEBEMAIL and EMAIL can be set in the environment to control the email "
+"address that the bugs are sent from."
+msgstr ""
+"DEBEMAIL et 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:516
+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<-f>] I<file1 file2> [I<file>...]"
+msgstr "B<mergechanges> [B<-f>] 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 ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications by Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> and Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<gt>."
+msgstr ""
+"Gergely Nagy E<lt>algernon@debian.orgE<gt>, modifications par Julian Gilbey "
+"E<lt>jdg@debian.orgE<gt> et Adam D. Barratt E<lt>adam@adam-barratt.org."
+"ukE<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> --help|--version"
+msgstr "B<mk-build-deps> --help|--version"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:32
+msgid "B<mk-build-deps> [options] <control file | package name> [...]"
+msgstr "B<mk-build-deps> [options] <fichier control | nom paquet> [...]"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:36
+msgid ""
+"Given a package name and/or 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 nom de paquet ou d'un fichier « control », B<mk-build-deps> "
+"utilisera B<equivs> pour générer 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 généré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: apt-"
+"get)"
+msgstr ""
+"Pour l'installation du paquet généré, utiliser l'outil indiqué (par défaut : "
+"apt-get)."
+
+#. 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 "
+"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 ""
+"If the source package has architecture-specific build dependencies, produce "
+"a package for architecture I<foo>, not for the system architecture. (If the "
+"source package does not have architecture-specific build dependencies, the "
+"package produced is always for the pseudo-architecture B<all>.)"
+msgstr ""
+"Si le paquet source possède des dépendances de construction spécifiques à "
+"l'architecture, produit un paquet pour l'architecture I<toto> et non pour "
+"l'architecture du système (si le paquet source ne possède pas de dépendances "
+"de construction spécifiques à l'architecture, le paquet produit est toujours "
+"pour la pseudo-architecture B<all>). "
+
+#. type: =item
+#: ../scripts/mk-build-deps.pl:69
+msgid "B<-B>, B<--build-dep>"
+msgstr "B<-B>, B<--build-dep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:71
+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:74
+msgid "B<-A>, B<--build-indep>"
+msgstr "B<-A>, B<--build-indep>"
+
+#. type: textblock
+#: ../scripts/mk-build-deps.pl:76
+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: textblock
+#: ../scripts/mk-build-deps.pl:91
+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:94 ../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/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 que 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: =head1
+#: ../scripts/namecheck.pl:24
+msgid "HOMEPAGE"
+msgstr "PAGE D'ACCUEIL"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:26
+msgid "The most recent version of this script may be found here:"
+msgstr "La version la plus récente de ce script peut se trouver à l'adresse :"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:28
+msgid "http://mybin.repository.steve.org.uk/?raw-file/tip/namecheck"
+msgstr "http://mybin.repository.steve.org.uk/?raw-file/tip/namecheck"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:32
+msgid "Steve -- http://www.steve.org.uk/"
+msgstr "Steve -- http://www.steve.org.uk/"
+
+#. type: textblock
+#: ../scripts/namecheck.pl:38
+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:40
+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'un 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:16
+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 .dsc and any corresponding tar and 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 le NMU a été construit. Cela suppose que le source (c'est-à-"
+"dire le fichier .dsc et éventuellement les fichiers tar et 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 générer un diff du NMU, puis B<mutt> ou un éditeur "
+"(choisi par B<sensible-editor>) est utilisé pour lancer un éditeur de sorte "
+"que le mail (y compris le diff) puisse être examiné et modifié ; une fois "
+"que vous avez quitté l'éditeur, le diff est envoyé par mail au système de "
+"gestion de bogues (« BTS ») Debian."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:21
+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 le NMU, le comportement par défaut est "
+"d'envoyer le mail à 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:22
+#, no-wrap
+msgid "B<--new>"
+msgstr "B<--new>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:26
+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 mail aux "
+"bogues corrigés par le NMU."
+
+#. type: TP
+#: ../scripts/nmudiff.1:26
+#, no-wrap
+msgid "B<--old>"
+msgstr "B<--old>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:31
+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 ce NMU, au lieu "
+"d'ouvrir un nouveau bogue. Cette option n'a aucun effet si le NMU ne corrige "
+"aucun bogue."
+
+#. type: TP
+#: ../scripts/nmudiff.1:31
+#, no-wrap
+msgid "B<--mutt>"
+msgstr "B<--mutt>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:36
+msgid ""
+"Use B<mutt>(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) pour modifier et envoyer le mail au BTS (comportement "
+"par défaut). Ceci peut être choisi par une option du fichier de "
+"configuration (voir plus bas)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:36
+#, no-wrap
+msgid "B<--no-mutt>"
+msgstr "B<--no-mutt>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:41
+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 mail, puis l'envoyer "
+"directement avec I</usr/sbin/sendmail>. Ceci peut être choisi par une option "
+"du fichier de configuration (voir plus bas)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:41
+#, no-wrap
+msgid "B<--sendmail> I<SENDMAILCMD>"
+msgstr "B<--sendmail> I<COMMANDE_D_ENVOI_DE_MAIL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:51
+msgid ""
+"Specify the sendmail command.  The command will be split on white space and "
+"will be interpreted by the shell.  Default is I</usr/sbin/sendmail>.  The I<-"
+"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 I<-t> "
+"option, this must be included in the I<SENDMAILCMD>, for example: --sendmail="
+"\"/usr/sbin/mymailer -t\".  This can also be set using the devscripts "
+"configuration files; see below."
+msgstr ""
+"Indiquer la commande d'envoi de mail. 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 I<-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 mail, l'option I<-t> doit être incluse explicitement dans "
+"I<COMMANDE_D_ENVOI_DE_MAIL> si elle est nécessaire (par exemple --sendmail="
+"\"/usr/sbin/mymailer -t\"). La commande peut également être indiquée dans "
+"les fichiers de configuration de devscripts ; voir ci-dessous."
+
+#. type: TP
+#: ../scripts/nmudiff.1:51
+#, no-wrap
+msgid "B<--from> I<EMAIL>"
+msgstr "B<--from> I<EMAIL>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:59
+msgid ""
+"If using the sendmail (B<--no-mutt>) option, then the email to the BTS will "
+"be sent using the name and address in the environment variables DEBEMAIL and "
+"DEBFULLNAME.  If these are not set, then the variables EMAIL and 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 sendmail est utilisée (option B<--no-mutt>), le mail envoyé "
+"au BTS utilisera le nom et l'adresse contenus dans les variables "
+"d'environnement DEBEMAIL et DEBFULLNAME. Si elles n'existent pas, les "
+"variables EMAIL et 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 email."
+
+#. type: TP
+#: ../scripts/nmudiff.1:59
+#, no-wrap
+msgid "B<--delay> I<DELAY>"
+msgstr "B<--delay> I<DÉLAI>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:66
+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 0 indicates that the upload has not "
+"been delayed.  This can also be set using the devscripts configuration "
+"files; see below."
+msgstr ""
+"Indique dans le mail généré que le NMU a été envoyé 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 mail. Une valeur "
+"de 0 indique que l'envoi n'a pas été différé. On peut aussi utiliser les "
+"fichiers de configuration de devscripts ; voir ci-dessous."
+
+#. type: TP
+#: ../scripts/nmudiff.1:66
+#, no-wrap
+msgid "B<--no-delay>, B<--nodelay>"
+msgstr "B<--no-delay>, B<--nodelay>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:69
+msgid "Equivalent to B<--delay 0>."
+msgstr "Équivalent à B<--delay 0>."
+
+#. type: TP
+#: ../scripts/nmudiff.1:85
+#, no-wrap
+msgid "B<NMUDIFF_DELAY>"
+msgstr "B<NMUDIFF_DELAY>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:91
+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 \"0\" indicates that the DELAYED queue has not been used."
+msgstr ""
+"Lorsque qu'un nombre est configuré dans cette variable, les courriers "
+"généré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 « 0 » indique que la file d'attente différée n'a pas été "
+"utilisée."
+
+#. type: TP
+#: ../scripts/nmudiff.1:91
+#, no-wrap
+msgid "B<NMUDIFF_MUTT>"
+msgstr "B<NMUDIFF_MUTT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:96
+msgid ""
+"Can be \"yes\" (default) or \"no\", and specifies whether to use B<mutt> to "
+"compose and send the message or not, as described above."
+msgstr ""
+"Peut être « yes » (par défaut) ou « no », et indique s'il faut utiliser "
+"B<mutt> pour écrire et envoyer le mail, tel que décrit ci-dessus."
+
+#. type: TP
+#: ../scripts/nmudiff.1:96
+#, no-wrap
+msgid "B<NMUDIFF_NEWREPORT>"
+msgstr "B<NMUDIFF_NEWREPORT>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:104
+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 \"maybe\" (default), which "
+"sends to the existing bug reports if exactly one bug is being closed; \"yes"
+"\", which always creates a new report, or \"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 le NMU. Peut être l'une des "
+"valeurs « maybe » (par défaut) qui envoie au bogue fermé par le NMU s'il est "
+"unique, « yes » qui crée systématiquement un nouveau rapport de bogue, ou "
+"« no » qui envoie toujours aux bogues corrigés (sauf si aucun bogue n'est "
+"corrigé, auquel cas un nouveau rapport est toujours créé)."
+
+#. type: TP
+#: ../scripts/nmudiff.1:104
+#, no-wrap
+msgid "B<BTS_SENDMAIL_COMMAND>"
+msgstr "B<BTS_SENDMAIL_COMMAND>"
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:113
+msgid "B<debdiff>(1), B<sensible-editor>(1)  and B<devscripts.conf>(5)."
+msgstr "B<debdiff>(1), B<sensible-editor>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/nmudiff.1:117
+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: 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 changements sous forme de graphique"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:7
+msgid "B<plotchangelog> I<[options] changelog ...>"
+msgstr "B<plotchangelog> I<[options] changelog ...>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:17
+msgid ""
+"B<plotchangelog> is a tool to aid in visualizing a Debian 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 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 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 ""
+"Notez 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 un 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. "
+"Un NMU peut également être facilement détecté 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'un 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, --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 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, --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 changelog. "
+"Notez que ce nombre de bogues est trouvé en recherchant « #dddd » dans le "
+"fichier 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, --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 changelog."
+
+#. type: TP
+#: ../scripts/plotchangelog.1:65
+#, no-wrap
+msgid "B<-v, --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, --save=file>"
+msgstr "B<-s> I<fichier>, B<--save>=I<fichier>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:75
+msgid ""
+"Save the graph to \"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, --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 \"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 générer le graphique. Les commandes sont placées "
+"après l'initialisation, mais avant la commande « 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, --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 "B<changelog ...>"
+msgstr "B<changelog ...>"
+
+#. type: Plain text
+#: ../scripts/plotchangelog.1:106
+msgid ""
+"The changelog files to graph. If multiple files are specified they will all "
+"be display 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 changelog dont on veut le graphique. Si plusieurs fichiers sont "
+"indiqués, ils seront 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 \"-l -b"
+"\".  Do not include \"-g\" or \"--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, « -l -b ». N'incluez pas les options « -g » ou « --"
+"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> [options] I<package>"
+msgstr "B<pts-subscribe> [options] I<paquet>"
+
+#. type: Plain text
+#: ../scripts/pts-subscribe.1:8
+msgid "B<pts-unsubscribe> [options] I<package>"
+msgstr "B<pts-unsubscribe> [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é un 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. Ceci 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 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 à 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. Ceci 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 http://www.debian.org/doc/developers-reference/ch-resources#s-"
+"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 à http://www.debian.org/doc/manuals/developers-"
+"reference/ch-resources.fr.html#s-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 [inclusion options] [--debtags [tag[,tag ...]] [--popcon] "
+"[package ...]>"
+msgstr ""
+"B<rc-alert [options d'inclusion] [--debtags [tag[,tag ...]] [--popcon] "
+"[paquet ...]>"
+
+#. type: Plain text
+#: ../scripts/rc-alert.1:8
+msgid "B<rc-alert --help|--version>"
+msgstr "B<rc-alert --help|--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<~/.devscripts_cache> 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<~/.devscripts_cache> 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<~/.devscripts_cache> cache directory."
+msgstr "Force la création du répertoire de cache I<~/.devscripts_cache>."
+
+#. 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 »). Notez 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:183
+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:189
+msgid "B<rmadison> [I<OPTIONS>] I<PACKAGE> ..."
+msgstr "B<rmadison> [I<OPTIONS>] I<PAQUET> ..."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:195
+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<http://qa.debian.org/madison.php> provides that service without "
+"requiring ssh access to ftp-master.debian.org or the mirror on ries.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/composant/"
+"distribution. Le script CGI à B<http://qa.debian.org/madison.php> met ce "
+"service à disposition, de sorte qu'un accès SSH à ftp-master.debian.org ou "
+"au miroir ries.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:206
+msgid "B<-a>, B<--architecture=>I<ARCH>"
+msgstr "B<-a>, B<--architecture=>I<ARCH>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:208
+msgid "only show info for ARCH(s)"
+msgstr "N'afficher les informations que pour ARCH(s)."
+
+#. type: =item
+#: ../scripts/rmadison.pl:210
+msgid "B<-b>, B<--binary-type=>I<TYPE>"
+msgstr "B<-b>, B<--binary-type=>I<TYPE>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:212
+msgid "only show info for binary TYPE"
+msgstr "N'afficher les informations que pour les binaires TYPE."
+
+#. type: =item
+#: ../scripts/rmadison.pl:214
+msgid "B<-c>, B<--component=>I<COMPONENT>"
+msgstr "B<-c>, B<--component=>I<COMPOSANT>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:216
+msgid "only show info for COMPONENT(s)"
+msgstr "N'afficher les informations que pour COMPOSANT(s)."
+
+#. type: =item
+#: ../scripts/rmadison.pl:218
+msgid "B<-g>, B<--greaterorequal>"
+msgstr "B<-g>, B<--greaterorequal>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:220
+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:222
+msgid "B<-G>, B<--greaterthan>"
+msgstr "B<-G>, B<--greaterthan>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:224
+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:228
+msgid "show this help and exit"
+msgstr "Afficher cette aide et quitter."
+
+#. type: =item
+#: ../scripts/rmadison.pl:230
+msgid "B<-s>, B<--suite=>I<SUITE>"
+msgstr "B<-s>, B<--suite=>I<DISTRIBUTION>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:232
+msgid "only show info for this suite"
+msgstr "N'afficher des informations que pour cette distribution."
+
+#. type: =item
+#: ../scripts/rmadison.pl:234
+msgid "B<-S>, B<--source-and-binary>"
+msgstr "B<-S>, B<--source-and-binary>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:236
+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:238
+msgid "B<-t>, B<--time>"
+msgstr "B<-t>, B<--time>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:240
+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:242
+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:244
+#, no-wrap
+msgid ""
+"use I<URL> for the query. Supported shorthands are\n"
+" B<debian> or B<qa> http://qa.debian.org/madison.php (the default)\n"
+" B<bpo> http://backports.debian.org/cgi-bin/madison.cgi\n"
+" B<debug> http://debug.debian.net/cgi-bin/madison.cgi\n"
+" B<ubuntu> http://people.canonical.com/~ubuntu-archive/madison.cgi\n"
+"\n"
+msgstr ""
+"utiliser I<URL> pour la requête. Les raccourcis autorisés sont\n"
+" B<debian> ou B<qa> http://qa.debian.org/madison.php (par défaut)\n"
+" B<bpo> http://backports.debian.org/cgi-bin/madison.cgi\n"
+" B<debug> http://debug.debian.net/cgi-bin/madison.cgi\n"
+" B<ubuntu> http://people.ubuntu.com/~ubuntu-archive/madison.cgi\n"
+"\n"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:250
+msgid ""
+"See the B<RMADISON_URL_MAP_> variable below for a method to add new "
+"shorthands."
+msgstr ""
+"Voir la variable B<RMADISON_URL_MAP_> ci-dessous pour une méthode d'ajout de "
+"raccourcis."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:255
+msgid "show version and exit"
+msgstr "Afficher la version et quitter."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:259
+msgid "don't read the devscripts configuration files"
+msgstr "Ne pas lire les fichiers de configuration de devscripts."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:263
+msgid ""
+"ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g.  --"
+"architecture=m68k,i386"
+msgstr ""
+"ARCH, COMPOSANT et DISTRIBUTION peuvent être des listes dont les éléments "
+"sont séparés par des virgules (ou des espaces), par exemple --"
+"architecture=m68k,i386."
+
+#. type: =item
+#: ../scripts/rmadison.pl:276
+msgid "B<RMADISON_URL_MAP_>I<SHORTHAND>=I<URL>"
+msgstr "B<RMADISON_URL_MAP_>I<RACCOURCIS>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:278
+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:281
+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:284
+msgid "B<RMADISON_DEFAULT_URL>=I<URL>"
+msgstr "B<RMADISON_DEFAULT_URL>=I<URL>"
+
+#. type: textblock
+#: ../scripts/rmadison.pl:286
+msgid "Set the default URL to use unless overridden by a command line option."
+msgstr ""
+"Définir l'URL par défaut, à utiliser à moins qu'une autre soit fournie par "
+"une option en ligne de commande."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:292
+msgid ""
+"B<dak ls> also supports B<-r>, B<--regex> to treat I<PACKAGE> as a regex. "
+"Since that can easily DoS the database (\"-r .\"), this option is not "
+"supported by the CGI and rmadison."
+msgstr ""
+"B<dak ls> a aussi l'option B<-r> ou B<--regex> pour considérer PAQUET comme "
+"une expression rationnelle. Étant donné que cela peut facilement créer un "
+"déni de service sur la base de données (« -r . »), cette option n'est pas "
+"supportée par le script CGI ni par rmadison."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:296
+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:298
+msgid ""
+"The protocol used by rmadison is fairly simple, the CGI accepts query the "
+"parameters a, b, c, g, G, 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, s, S, t et package. Le paramètre text est "
+"utilisé pour permettre une sortie textuelle."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:304
+msgid "madison-lite(1), dak(1)."
+msgstr "madison-lite(1), dak(1)."
+
+#. type: textblock
+#: ../scripts/rmadison.pl:308
+msgid ""
+"rmadison and http://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 http://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/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 "svnpath"
+msgstr "svnpath"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:11
+msgid "svnpath tags"
+msgstr "svnpath tags"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:13
+msgid "svnpath branches"
+msgstr "svnpath branches"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:15
+msgid "svnpath trunk"
+msgstr "svnpath trunk"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:19
+msgid "svnpath is intended to be run in a subversion working copy."
+msgstr ""
+"svnpath est destiné à être utilisé dans une copie de travail subversion."
+
+#. type: textblock
+#: ../scripts/svnpath.pl:21
+msgid ""
+"In its simplest usage, svnpath with no parameters outputs the svn url for "
+"the repository associated with the working copy."
+msgstr ""
+"Dans son utilisation la plus simple, 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, 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é, svnpath essaie d'afficher à la place l'URL qui "
+"serait utilisée pour les tags, les branches ou le tronc. Ceci 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 les tags, 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 \"trunk\", \"tags\", or "
+"\"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 « trunk », "
+"« tags » ou « branches » avec le nom que vous recherchez. Ceci 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 ~/."
+"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 ~/.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 ceci 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:95
+msgid "GPL version 2 or later"
+msgstr "GPL version 2 ou ultérieure"
+
+#. type: textblock
+#: ../scripts/svnpath.pl:99
+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 changelog"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:86
+msgid "B<tagpending> [options]"
+msgstr "B<tagpending> [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 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: =item
+#: ../scripts/tagpending.pl:98
+msgid "-n, --noact"
+msgstr "-n, --noact"
+
+#. 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 "-s, --silent"
+msgstr "-s, --silent"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:104
+msgid "Do not output any messages."
+msgstr "Ne pas afficher de messages."
+
+#. type: =item
+#: ../scripts/tagpending.pl:106
+msgid "-v, --verbose"
+msgstr "-v, --verbose"
+
+#. 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: =item
+#: ../scripts/tagpending.pl:110
+msgid "-f, --force"
+msgstr "-f, --force"
+
+#. 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 changelog."
+
+#. type: =item
+#: ../scripts/tagpending.pl:114
+msgid "--comments"
+msgstr "--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 généré. C'est "
+"le comportement par défaut."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:119
+msgid ""
+"Note that when used in combination with --to, the header line output will "
+"always be that of the most recent version."
+msgstr ""
+"Notez, lors d'une utilisation avec l'option --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 "--no-comments"
+msgstr "--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 changelog dans le courrier généré."
+
+#. type: =item
+#: ../scripts/tagpending.pl:126
+msgid "-c, --confirm"
+msgstr "-c, --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 "-t, --to <version>"
+msgstr "-t, --to <version>"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:132
+msgid "Parse changelogs for all versions strictly greater than <version>."
+msgstr ""
+"Analyser les entrées du changelog plus récentes (strictement) que la "
+"<version>."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:134
+msgid "Equivalent to dpkg-parsechangelog's -v option."
+msgstr "C'est équivalent à l'option -v de dpkg-parsechangelog."
+
+#. type: textblock
+#: ../scripts/tagpending.pl:138
+msgid ""
+"Display the message which would be sent to the BTS and, except when --noact "
+"was used, prompt for confirmation before sending it."
+msgstr ""
+"Afficher le message qui sera envoyé au BTS et, à moins que l'option --noact "
+"ne soit utilisée, demander une confirmation avant de l'envoyer."
+
+#. type: =item
+#: ../scripts/tagpending.pl:141
+msgid "-w, --wnpp"
+msgstr "-w, --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. Ceci 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) et B<dpkg-parsechangelog>(1)"
+
+#. type: textblock
+#: ../scripts/tagpending.pl:433
+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:436
+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|--version>"
+msgstr "B<transition-check> B<--help|--version>"
+
+#. type: textblock
+#: ../scripts/transition-check.pl:31
+msgid ""
+"B<transition-check> [B<-f|--filename>=I<FILENAME>] [I<source package list>]"
+msgstr ""
+"B<transition-check> [B<-f|--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 sources listés est impliqué "
+"dans une transition pour laquelle les uploads 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 .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 .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: TP
+#: ../scripts/transition-check.pl:61 ../scripts/uscan.1:502
+#: ../scripts/wnpp-check.1:26
+#, no-wrap
+msgid "0"
+msgstr "0"
+
+#. 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 <adam@adam-barratt.org.uk>, all "
+"rights reserved."
+msgstr ""
+"Ce programme est soumis au copyright de Adam D. Barratt <adam@adam-barratt."
+"org.uk>, Tous droits réservés."
+
+#. type: TH
+#: ../scripts/uscan.1:1
+#, no-wrap
+msgid "USCAN"
+msgstr "USCAN"
+
+#. type: Plain text
+#: ../scripts/uscan.1:4
+msgid "uscan - scan/watch upstream sources for new releases of software"
+msgstr ""
+"uscan - Tester ou surveiller la disponibilité d'une nouvelle version amont"
+
+#. type: Plain text
+#: ../scripts/uscan.1:6
+msgid "B<uscan> [I<options>] [I<path-to-debian-source-packages> ...]"
+msgstr "B<uscan> [I<options>] [I<chemin-vers-le-paquet-source> ...]"
+
+#. type: Plain text
+#: ../scripts/uscan.1:16
+msgid ""
+"B<uscan> scans the given directories (or the current directory if none are "
+"specified) and all of their subdirectories for packages containing a control "
+"file I<debian/watch>.  Parameters are then read from those control files and "
+"upstream ftp or http sites are inspected for newly available updates (as "
+"compared with the upstream version number retrieved from the I<debian/"
+"changelog> file in the same directory).  The newest updates are retrieved "
+"(as determined by their version numbers) and if specified in the watchfile, "
+"a program may then be executed on the newly downloaded source."
+msgstr ""
+"B<uscan> parcourt les répertoires donnés (ou le répertoire courant si aucun "
+"n'est indiqué) et tous leurs sous-répertoires à la recherche de paquets "
+"contenant un fichier de contrôle I<debian/watch>. Les paramètres de ces "
+"fichiers de contrôle sont ensuite analysés, et les sites FTP ou HTTP amont "
+"sont inspectés pour tester la présence de nouvelles mises à jour (qui sont "
+"comparées aux numéros de version amont des fichiers I<debian/changelog> du "
+"même répertoire). Les mises à jour les plus récentes (en fonction de leur "
+"numéro de version) sont récupérées et un programme est exécuté sur les "
+"sources téléchargées si c'est spécifié dans le fichier « watch »."
+
+#. type: Plain text
+#: ../scripts/uscan.1:21
+msgid ""
+"The traditional I<debian/watch> files can still be used, but the current "
+"format offers both simpler and more flexible services.  We do not describe "
+"the old format here; for their documentation, see the source code for uscan."
+msgstr ""
+"Les fichiers I<debian/watch> traditionnels peuvent encore être utilisés, "
+"mais le format actuel est à la fois plus simple et offre des services plus "
+"souples. L'ancien format n'est pas décrit ici. Pour la documentation de "
+"l'ancien format, reportez-vous au code source de uscan."
+
+#. type: SH
+#: ../scripts/uscan.1:22
+#, no-wrap
+msgid "FORMAT of debian/watch files"
+msgstr "FORMAT du fichier debian/watch"
+
+#. type: Plain text
+#: ../scripts/uscan.1:28
+msgid ""
+"The following demonstrates the type of entries which can appear in a "
+"I<debian/watch> file.  Obviously, not all of these would appear in one such "
+"file; usually, one would have one line for the current package."
+msgstr ""
+"L'exemple suivant montre le type d'entrée que l'on peut trouver dans un "
+"fichier I<debian/watch>. Bien sûr, toutes ces entrées n'apparaîtront pas "
+"dans un seul fichier. Il y a d'habitude une seule ligne pour le paquet "
+"courant."
+
+#. type: Plain text
+#: ../scripts/uscan.1:33
+#, no-wrap
+msgid ""
+"# format version number, currently 3; this line is compulsory!\n"
+"version=3\n"
+msgstr ""
+"# numéro de version du format, actuellement 3.\n"
+"# Cette ligne est obligatoire !\n"
+"version=3\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:35
+#, no-wrap
+msgid "# Line continuations are performed with \\e\n"
+msgstr "# Les lignes peuvent être poursuivies à la ligne suivante avec un \\e\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:40
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site:\n"
+"# Full-site-with-pattern  [Version  [Action]]\n"
+"ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.*)\\e.tar\\e.gz \\e\n"
+"  debian  uupdate\n"
+msgstr ""
+"# Voici le format pour un site FTP :\n"
+"# Nom-complet-du-site-avec-modèle [Version [Action]]\n"
+"ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.*)\\e.tar\\e.gz \\e\n"
+"  debian  uupdate\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:44
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site with regex special characters in\n"
+"# the filename part\n"
+"ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\\e+\\e+-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+"# Voici la syntaxe pour un site FTP, avec une expression rationnelle \n"
+"# dans le nom du fichier\n"
+"ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\\e+\\e+-(.*)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:47
+#, no-wrap
+msgid ""
+"# This is the format for an FTP site with directory pattern matching\n"
+"ftp://ftp.nessus.org/pub/nessus/nessus-([\\ed\\e.]+)/src/nessus-core-([\\ed\\e.]+)\\e.tar\\e.gz\n"
+msgstr ""
+"# Voici la syntaxe pour un site FTP avec un modèle de répertoire\n"
+"ftp://ftp.nessus.org/pub/nessus/nessus-([\\ed\\e.]+)/src/nessus-core-([\\ed\\e.]+)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:51
+#, no-wrap
+msgid ""
+"# This can be used if you want to override the PASV setting\n"
+"# for a specific site\n"
+"# opts=pasv ftp://.../...\n"
+msgstr ""
+"# Voici comment remplacer le paramètre PASV pour un site spécifique :\n"
+"# opts=pasv ftp://.../...\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:57
+#, no-wrap
+msgid ""
+"# This is one format for an HTTP site, which is the same\n"
+"# as the FTP format.  uscan starts by downloading the homepage,\n"
+"# obtained by removing the last component of the URL; in this case,\n"
+"# http://www.cpan.org/modules/by-module/Text/\n"
+"http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+"# Il s'agit d'un format pour un site HTTP, identique à celui d'un\n"
+"# site FTP. uscan commence par télécharger la page principale,\n"
+"# obtenue en supprimant le dernier élément de l'URL ; dans ce cas,\n"
+"# http://www.cpan.org/modules/by-module/Text/\n"
+"http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.*)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:63
+#, no-wrap
+msgid ""
+"# This is a variant HTTP format which allows direct specification of\n"
+"# the homepage:\n"
+"# Homepage  Pattern  [Version  [Action]]\n"
+"http://www.dataway.ch/~lukasl/amph/amph.html \\e\n"
+"  files/amphetamine-([\\ed\\e.]*).tar.bz2\n"
+msgstr ""
+"# Voici un autre format pour les sites HTTP,\n"
+"# qui permet de spécifier directement la page principale :\n"
+"# Page principale  Modèle  [Version  [Action]]\n"
+"http://www.dataway.ch/~lukasl/amph/amph.html \\e\n"
+"  files/amphetamine-([\\ed\\e.]*).tar.bz2\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:70
+#, no-wrap
+msgid ""
+"# This one shows that recursive directory scanning works, in either of\n"
+"# two forms, as long as the website can handle requests of the form\n"
+"# http://site/inter/mediate/dir/\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/ \\e\n"
+"  Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+msgstr ""
+"# Cet exemple montre qu'il est possible de scanner des répertoires, sous\n"
+"# deux formes différentes, à condition que le site web autorise les\n"
+"# requêtes de la forme http://site/répertoire/inter/médiaire/\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/ \\e\n"
+"  Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+"http://tmrc.mit.edu/mirror/twisted/Twisted/(\\ed\\e.\\ed)/Twisted-([\\ed\\e.]*)\\e.tar\\e.bz2\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:75
+#, no-wrap
+msgid ""
+"# qa.debian.org runs a redirector which allows a simpler form of URL\n"
+"# for SourceForge based projects. The format below will automatically\n"
+"# be rewritten to use the redirector.\n"
+"http://sf.net/audacity/audacity-src-(.+)\\e.tar\\e.gz\n"
+msgstr ""
+"# qa.debian.org fournit un redirecteur qui permet une forme plus\n"
+"# simple pour les projets hébergés sur SourceForge. Le format\n"
+"# ci-dessous sera automatiquement récrit pour utiliser le redirecteur\n"
+"http://sf.net/audacity/audacity-src-(.+)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:79
+#, no-wrap
+msgid ""
+"# githubredir.debian.net is a redirector for GitHub projects\n"
+"# It can be used as following:\n"
+"http://githubredir.debian.net/github/E<lt>userE<gt>/E<lt>projectE<gt> (.*).tar.gz\n"
+msgstr ""
+"# githubredir.debian.net est un redirecteur pour les projets GitHub\n"
+"# Il peut être utilisé de la façon suivante :\n"
+"http://githubredir.debian.net/github/E<lt>utilisateurE<gt>/E<lt>projetE<gt> (.*).tar.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:84
+#, no-wrap
+msgid ""
+"# This is the format for a site which has funny version numbers;\n"
+"# the parenthesised groups will be joined with dots to make a\n"
+"# sanitised version number\n"
+"http://www.site.com/pub/foobar/foobar_v(\\ed+)_(\\ed+)\\e.tar\\e.gz\n"
+msgstr ""
+"# Ceci est le format pour un site qui possède des numéros de\n"
+"# version exotiques ; le groupe entre parenthèses devra être joint\n"
+"# par des points pour créer un numéro de version sain\n"
+"http://www.site.com/pub/toto/toto_v(\\ed+)_(\\ed+)\\e.tar\\e.gz\n"
+
+# NOTE: Ca reste encore cryptique
+#. type: Plain text
+#: ../scripts/uscan.1:92
+#, no-wrap
+msgid ""
+"# This is another way of handling site with funny version numbers,\n"
+"# this time using mangling.  (Note that multiple groups will be\n"
+"# concatenated before mangling is performed, and that mangling will\n"
+"# only be performed on the basename version number, not any path\n"
+"# version numbers.)\n"
+"opts=\"uversionmangle=s/^/0.0./\" \\e\n"
+"  ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+"# Voici une autre manière pour des sites ayant des numéros de version\n"
+"# bizarres, en effectuant une modification cette fois. (Notez que\n"
+"# plusieurs groupes seront concaténés avant d'effectuer la modification,\n"
+"# et que les modifications ne seront effectuées que sur le numéro de\n"
+"# version de base, et pas dans les versions contenues dans les chemins.)\n"
+"opts=\"uversionmangle=s/^/0.0/\" \\e\n"
+"  ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:97
+#, no-wrap
+msgid ""
+"# Similarly, the upstream part of the Debian version number can be\n"
+"# mangled:\n"
+"opts=dversionmangle=s/\\e.dfsg\\e.\\ed+$// \\e\n"
+"  http://some.site.org/some/path/foobar-(.*)\\e.tar\\e.gz\n"
+msgstr ""
+"# De manière similaire, la partie de la version amont du numéro de\n"
+"# version Debian peut être modifiée :\n"
+"opts=dversionmangle=s/\\e.dfsg\\e.\\ed+$// \\e\n"
+"  http://un.site.org/un/chemin/toto-(.*)\\e.tar\\e.gz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:110
+#, no-wrap
+msgid ""
+"# The filename is found by taking the last component of the URL and\n"
+"# removing everything after any '?'.  If this would not make a usable\n"
+"# filename, use filenamemangle.  For example,\n"
+"# E<lt>A href=\"http://foo.bar.org/download/?path=&download=foo-0.1.1.tar.gz\"E<gt>\n"
+"# could be handled as:\n"
+"# opts=filenamemangle=s/.*=(.*)/$1/ \\e\n"
+"#     http://foo.bar.org/download/\\e?path=&download=foo-(.*)\\e.tar\\e.gz\n"
+"# \n"
+"# E<lt>A href=\"http://foo.bar.org/download/?path=&download_version=0.1.1\"E<gt>\n"
+"# could be handled as:\n"
+"# opts=filenamemangle=s/.*=(.*)/foo-$1\\e.tar\\e.gz/ \\e\n"
+"#    http://foo.bar.org/download/\\e?path=&download_version=(.*)\n"
+msgstr ""
+"# Le nom de fichier est déterminé en prenant le dernier composant de\n"
+"# l'URL et en retirant tout ce qui se trouve après un éventuel « ? ».\n"
+"# Si ça ne donne pas de nom de fichier utilisable, utilisez\n"
+"# filenamemangle. Par exemple,\n"
+"# E<lt>A href=\"http://toto.titi.org/download/?path=&amp;download=toto-0.1.1.tar.gz\"E<gt>\n"
+"# peut être géré ainsi :\n"
+"# opts=filenamemangle=s/.*=(.*)/$1/ \\e\n"
+"#     http://toto.titi.org/download/\\e?path=&amp;download=toto-(.*)\\e.tar\\e.gz\n"
+"# \n"
+"# E<lt>A href=\"http://toto.titi.org/download/?path=&amp;download_version=0.1.1\"E<gt>\n"
+"# peut être géré ainsi :\n"
+"# opts=filenamemangle=s/.*=(.*)/toto-$1\\e.tar\\e.gz/ \\e\n"
+"#    http://toto.titi.org/download/\\e?path=&amp;download_version=(.*)\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:118
+#, no-wrap
+msgid ""
+"# The option downloadurlmangle can be used to mangle the URL of the file\n"
+"# to download.  This can only be used with http:// URLs.  This may be\n"
+"# necessary if the link given on the webpage needs to be transformed in\n"
+"# some way into one which will work automatically, for example:\n"
+"# opts=downloadurlmangle=s/prdownload/download/ \\e\n"
+"#   http://developer.berlios.de/project/showfiles.php?group_id=2051 \\e\n"
+"#   http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz\n"
+msgstr ""
+"# L'option downloadurlmangle peut être utilisée pour modifier l'URL\n"
+"# du fichier à télécharger. Ceci ne peut être utilisé qu'avec des liens\n"
+"# http://. Ceci peut être nécessaire si le lien donné sur la page web\n"
+"# doit être transformé de manière à ce que cela fonctionne\n"
+"# automatiquement, par exemple :\n"
+"# opts=downloadurlmangle=s/prdownload/download/ \\e\n"
+"#   http://developer.berlios.de/project/showfiles.php?group_id=2051 \\e\n"
+"#   http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:124
+msgid ""
+"Comment lines may be introduced with a `#' character.  Continuation lines "
+"may be indicated by terminating a line with a backslash character."
+msgstr ""
+"Des lignes de commentaire peuvent être ajoutées avec un caractère « # ». Les "
+"lignes peuvent se poursuivre à la ligne suivante en les terminant par un "
+"caractère backslash (« \\e »)."
+
+#. type: Plain text
+#: ../scripts/uscan.1:128
+msgid ""
+"The first (non-comment) line of the file must begin `version=3'.  This "
+"allows for future extensions without having to change the name of the file."
+msgstr ""
+"La première ligne (en ne prenant pas en compte les commentaires) doit "
+"commencer par « version=3 ». Ceci devrait permettre des extensions futures, "
+"sans avoir à changer le nom du fichier."
+
+#. type: Plain text
+#: ../scripts/uscan.1:133
+msgid ""
+"There are two possibilities for the syntax of an HTTP watchfile line, and "
+"only one for an FTP line.  We begin with the common (and simpler)  format.  "
+"We describe the optional opts=... first field below, and ignore it in what "
+"follows."
+msgstr ""
+"Les fichiers « watch » acceptent deux syntaxes pour les sites HTTP, et une "
+"seule pour les sites FTP. Voici la syntaxe la plus commune (et la plus "
+"simple). Le premier champ optionnel opts=... est décrit plus bas et sera "
+"ignoré dans ce qui suit."
+
+#. type: Plain text
+#: ../scripts/uscan.1:150
+msgid ""
+"The first field gives the full pattern of URLs being searched for.  In the "
+"case of an FTP site, the directory listing for the requested directory will "
+"be requested and this will be scanned for files matching the basename "
+"(everything after the trailing `/').  In the case of an HTTP site, the URL "
+"obtained by stripping everything after the trailing slash will be downloaded "
+"and searched for hrefs (links of the form E<lt>a href=...E<gt>) to either "
+"the full URL pattern given, or to the absolute part (everything without the "
+"http://host.name/ part), or to the basename (just the part after the final "
+"`/').  Everything up to the final slash is taken as a verbatim URL, as long "
+"as there are no parentheses (`(' and ')') in this part of the URL: if it "
+"does, the directory name will be matched in the same way as the final "
+"component of the URL as described below.  (Note that regex metacharacters "
+"such as `+' are regarded literally unless they are in a path component "
+"containing parentheses; see the Atlas-C++ example above.  Also, the "
+"parentheses must match within each path component.)"
+msgstr ""
+"Le premier champ donne le modèle complet des URL à rechercher. Dans le cas "
+"d'un site FTP, la liste des fichiers du répertoire indiqué sera demandée et "
+"il recherchera dans cette liste des fichiers dont le nom de base (ce qui "
+"suit le « / » final) correspond. Dans le cas d'un site HTTP, il recherche "
+"dans l'URL obtenue en enlevant tout ce qui suit le « / » de fin des "
+"références « href » (liens de la forme E<lt>a href=...E<gt>) vers soit une "
+"URL complète, un chemin absolu (l'ensemble de l'URL, sans la partie http://"
+"nom.serveur/) ou encore vers un nom de base (la partie qui suit le « / » "
+"final) qui correspond au modèle donné. L'ensemble, jusqu'au « / » final est "
+"considéré comme l'URL complète, tant qu'il n'y a pas de parenthèse (« ( » et "
+"« ) ») dans cette partie de l'URL. S'il y a des parenthèses, on cherchera à "
+"faire correspondre le nom du répertoire de la même façon que l'élément final "
+"de l'URL, comme décrit ci-dessous. (Veuillez noter que les caractères "
+"spéciaux des expressions rationnelles, comme « + » sont considérés "
+"littéralement, à moins qu'ils se trouvent dans une partie entre "
+"parenthèses ; voyez l'exemple d'Atlas-C++ ci-dessus. De plus, les "
+"parenthèses doivent se fermer à l'intérieur de chaque élément du chemin.)"
+
+# NOTE: ancré: ^...$
+#. type: Plain text
+#: ../scripts/uscan.1:159
+msgid ""
+"The pattern (after the final slash) is a Perl regexp (see B<perlre>(1) for "
+"details of these).  You need to make the pattern so tight that it matches "
+"only the upstream software you are interested in and nothing else.  Also, "
+"the pattern will be anchored at the beginning and at the end, so it must "
+"match the full filename.  (Note that for HTTP URLs, the href may include the "
+"absolute path or full site and path and still be accepted.)  The pattern "
+"must contain at least one Perl group as explained in the next paragraph."
+msgstr ""
+"Le modèle (la partie après le « / » final) est une expression rationnelle "
+"Perl (voir B<perlre>(1) pour plus de détails). Vous devez utiliser un modèle "
+"suffisamment strict pour qu'il ne corresponde qu'au programme amont qui vous "
+"intéresse, et à rien d'autre. Aussi, le modèle sera ancré au début et à la "
+"fin pour qu'il corresponde au nom complet. (Notez que dans les URL HTTP, le "
+"champ « href » peut contenir un chemin absolu ou le nom du site avec le "
+"chemin, et être toujours accepté.) Le modèle doit contenir au moins un "
+"groupe Perl comme décrit dans le prochain paragraphe."
+
+#. type: Plain text
+#: ../scripts/uscan.1:170
+msgid ""
+"Having got a list of `files' matching the pattern, their version numbers are "
+"extracted by treating the part matching the Perl regexp groups, demarcated "
+"by `(...)', joining them with `.' as a separator, and using the result as "
+"the version number of the file.  The version number will then be mangled if "
+"required by the uversionmangle option described below.  Finally, the file "
+"versions are then compared to find the one with the greatest version number, "
+"as determined by B<dpkg --compare-versions>.  Note that if you need Perl "
+"groups which are not to be used in the version number, either use `(?:...)' "
+"or use the uversionmangle option to clean up the mess!"
+msgstr ""
+"Après avoir récupéré une liste de « fichiers » qui correspondent au modèle, "
+"leurs numéros de version sont extraits en concaténant l'ensemble des groupes "
+"de l'expression rationnelle Perl (démarqués par « (...) ») et en les "
+"séparant par un « . ». Ce numéro est considéré comme le numéro de version du "
+"fichier. Les numéros de version sont ensuite modifiés si l'option "
+"B<uversionmangle>, décrite ci-dessous, a été précisée. Enfin, les versions "
+"des fichiers sont ensuite comparées pour trouver celui qui a le plus grand "
+"numéro de version, qui est trouvé en utilisant B<dpkg --compare-versions>. "
+"Note : si vous avez besoin de groupes qui ne sont pas utilisés dans le "
+"numéro de version, utilisez soit « (?:...) » soit l'option B<uversionmangle> "
+"pour nettoyer la version par la suite."
+
+#. type: Plain text
+#: ../scripts/uscan.1:189
+msgid ""
+"The current (upstream) version can be specified as the second parameter in "
+"the watchfile line.  If this is I<debian> or absent, then the current Debian "
+"version (as determined by I<debian/changelog>) is used to determine the "
+"current upstream version.  The current upstream version may also be "
+"specified by the command-line option B<--upstream-version>, which specifies "
+"the upstream version number of the currently installed package (i.e., the "
+"Debian version number without epoch and Debian revision).  The upstream "
+"version number will then be mangled using the dversionmangle option if one "
+"is specified, as described below.  If the newest version available is newer "
+"than the current version, then it is downloaded into the parent directory, "
+"unless the B<--report> or --report-status option has been used.  Once the "
+"file has been downloaded, then a symlink to the file is made from "
+"I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig.tar.gz> if the file has a I<.tar."
+"gz> or a I<.tgz> suffix and from I<E<lt>packageE<gt>_E<lt>versionE<gt>.orig."
+"tar.bz2> if the file has a I<.tar.bz2> or a I<.tbz> or I<.tbz2> suffix."
+msgstr ""
+"La version courante (amont) peut être indiquée comme le second paramètre "
+"dans la ligne du fichier. Si elle vaut I<debian> ou est absente, alors la "
+"version courante Debian (telle qu'elle est déterminée par I<debian/"
+"changelog>) est utilisée pour déterminer la version amont courante. La "
+"version amont courante peut aussi être indiquée par l'option B<--upstream-"
+"version> en ligne de commande, qui spécifie le numéro de version amont du "
+"paquet actuellement installé (c'est-à-dire, le numéro de version Debian sans "
+"epoch ni version Debian). Le numéro de version amont sera alors modifié en "
+"utilisant l'option B<dversionmangle> si elle est indiquée, tel que cela est "
+"décrit plus bas. Si la version la plus récente disponible est plus récente "
+"que la version courante, alors elle sera téléchargée dans le répertoire "
+"parent, sans que l'option B<--report> ou B<--report-status> ait été "
+"utilisée. Une fois que le fichier a été téléchargé, un lien symbolique vers "
+"le fichier est créé depuis le paquet I<E<lt>paquetE<gt>_E<lt>versionE<gt>."
+"orig.tar.gz> si le fichier a un suffixe I<.tar.gz> ou I<.tgz> et  "
+"I<E<lt>paquetE<gt>_E<lt>versionE<gt>.orig.tar.bz2> si le fichier a un "
+"suffixe I<.tar.bz2>, I<.tbz> ou I<.tbz2>."
+
+#. type: Plain text
+#: ../scripts/uscan.1:192
+msgid ""
+"Finally, if a third parameter (an action) is given in the watchfile line, "
+"this is taken as the name of a command, and the command"
+msgstr ""
+"Enfin, si un troisième paramètre est donné dans la ligne du fichier "
+"« watch », il est considéré comme le nom d'une commande, et la commande :"
+
+#. type: Plain text
+#: ../scripts/uscan.1:194
+#, no-wrap
+msgid "    I<command >B<--upstream-version>I< version filename>\n"
+msgstr "    I<commande> B<--upstream-version> I<version nom_fichier>\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:203
+msgid ""
+"is executed, using either the original file or the symlink name.  A common "
+"such command would be B<uupdate>(1).  (Note that the calling syntax was "
+"slightly different when using watchfiles without a `version=...' line; there "
+"the command executed was `command filename version'.)  If the command is "
+"B<uupdate>, then the B<--no-symlink> option is given to B<uupdate> as a "
+"first option, since any requested symlinking will already be done by "
+"B<uscan>."
+msgstr ""
+"est exécutée, en utilisant soit le fichier initial, soit le nom du lien "
+"symbolique. En règle générale, cette commande est B<uupdate>. (Notez que la "
+"syntaxe d'appel est légèrement différente de celle des fichiers « watch » "
+"sans la ligne « version=... », pour lesquels la commande exécutée était "
+"« commande fichier version ».)"
+
+#. type: Plain text
+#: ../scripts/uscan.1:219
+msgid ""
+"The alternative version of the watchfile syntax for HTTP URLs is as "
+"follows.  The first field is a homepage which should be downloaded and then "
+"searched for hrefs matching the pattern given in the second field.  (Again, "
+"this pattern will be anchored at the beginning and the end, so it must match "
+"the whole href.  If you want to match just the basename of the href, you can "
+"use a pattern like \".*/name-(.*)\\e.tar\\e.gz\" if you know that there is a "
+"full URL, or better still: \"(?:.*/)?name-(.*)\\e.tar\\e.gz\" if there may "
+"or may not be.  Note the use of (?:...) to avoid making a backreference.)  "
+"If any of the hrefs in the homepage which match the (anchored) pattern are "
+"relative URLs, they will be taken as being relative to the base URL of the "
+"homepage (i.e., with everything after the trailing slash removed), or "
+"relative to the base URL specified in the homepage itself with a E<lt>base "
+"href=\"...\"E<gt> tag.  The third and fourth fields are the version number "
+"and action fields as before."
+msgstr ""
+"L'autre syntaxe possible pour les URL HTTP est la suivante. Le premier champ "
+"correspond à la page d'accueil qui doit être téléchargée et dans laquelle "
+"doivent être recherchés les liens (« href ») correspondant au modèle donné "
+"dans le second champ. (Encore une fois, ce modèle sera ancré à son début et "
+"à sa fin, de façon à ce qu'il corresponde au lien complet. Si vous chercher "
+"à faire correspondre uniquement le nom de base du lien, vous pouvez utiliser "
+"un modèle comme « .*/nom-(.*)\\e.tar\\e.gz » si vous savez qu'il y a une URL "
+"complète, ou encore mieux : « (?:.*/)?nom-(.*)\\e.tar\\e.gz » si l'URL peut "
+"être ou ne pas être complète. Notez l'utilisation de « (?:...) » qui évite "
+"de créer une référence.) Si un des liens de cette page est une URL relative, "
+"elle sera considérée comme relative à l'URL de base de la page d'accueil "
+"(c'est-à-dire en retirant tout ce qui suit le « / » final), ou relative à "
+"l'URL de base indiquée dans cette page avec une balise E<lt>base href=\"..."
+"\"E<gt>. Les troisième et quatrième champs sont les champs du numéro de "
+"version et de la commande, comme précédemment."
+
+#. type: SH
+#: ../scripts/uscan.1:219
+#, no-wrap
+msgid "PER-SITE OPTIONS"
+msgstr "OPTIONS SPÉCIFIQUES À UN SITE"
+
+#. type: Plain text
+#: ../scripts/uscan.1:225
+msgid ""
+"A watchfile line may be prefixed with `opts=I<options>', where I<options> is "
+"a comma-separated list of options.  The whole I<options> string may be "
+"enclosed in double quotes, which is necessary if I<options> contains any "
+"spaces.  The recognised options are as follows:"
+msgstr ""
+"Une ligne du fichier « watch » peut être précédée de « opts=I<options> », où "
+"I<options> est une liste d'options séparées par des virgules. La chaîne "
+"I<options> peut être placée entre guillemets doubles (« \" »), ce qui est "
+"nécessaire si I<options> contient des espaces. Les options reconnues sont :"
+
+#. type: TP
+#: ../scripts/uscan.1:225
+#, no-wrap
+msgid "B<active> and B<passive> (or B<pasv>)"
+msgstr "B<active> et B<passive> (ou B<pasv>)"
+
+#. type: Plain text
+#: ../scripts/uscan.1:230
+msgid ""
+"If used on an FTP line, these override the choice of whether to use PASV "
+"mode or not, and force the use of the specified mode for this site."
+msgstr ""
+"Si utilisé sur une ligne FTP, ceci forcera l'utilisation du mode passif "
+"(PASV) ou actif pour ce site."
+
+#. type: TP
+#: ../scripts/uscan.1:230
+#, no-wrap
+msgid "B<uversionmangle=>I<rules>"
+msgstr "B<uversionmangle=>I<règles>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:237
+msgid ""
+"This is used to mangle the upstream version number as matched by the "
+"ftp://... or http:// rules as follows.  First, the I<rules> string is split "
+"into multiple rules at every `;'.  Then the upstream version number is "
+"mangled by applying I<rule> to the version, in a similar way to executing "
+"the Perl command:"
+msgstr ""
+"Ceci permet de modifier le numéro de version amont qui correspond à une "
+"règle ftp://... ou http://... de la façon suivante. Dans un premier temps, "
+"les I<règles> sont découpées en plusieurs règles en utilisant « ; » comme "
+"séparateur. Puis les numéros de version amont sont modifiés en appliquant la "
+"I<règle> à la version, de façon similaire à l'exécution de la commande Perl "
+"suivante :"
+
+#. type: Plain text
+#: ../scripts/uscan.1:239
+#, no-wrap
+msgid "    $version =~ I<rule>;\n"
+msgstr "    $version =~ I<règle>;\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:244
+msgid ""
+"for each rule.  Thus, suitable rules might be `s/^/0./' to prepend `0.' to "
+"the version number and `s/_/./g' to change underscores into periods.  Note "
+"that the I<rules> string may not contain commas; this should not be a "
+"problem."
+msgstr ""
+"pour chaque règle. Ainsi, la règle « s/^/0./ » permet d'ajouter « 0. » au "
+"début du numéro de version et « s/_/./g » pour changer les « underscore » en "
+"point. Notez que la chaîne de caractères I<règle> ne doit pas contenir de "
+"virgule ; ceci ne devrait pas être un problème."
+
+#. type: Plain text
+#: ../scripts/uscan.1:249
+msgid ""
+"I<rule> may only use the 's', 'tr' and 'y' operations.  When the 's' "
+"operation is used, only the 'g', 'i' and 'x' flags are available and I<rule> "
+"may not contain any expressions which have the potential to execute code (i."
+"e. the (?{}) and (??{}) constructs are not supported)."
+msgstr ""
+"I<règle> ne peut utiliser que les opérations « s », « tr » et « y ». Quand "
+"l'opération « s » est utilisée, seuls les drapeaux « g », « i » et « x » "
+"peuvent être utilisés et I<règle> ne peut contenir d'expression pouvant "
+"exécuter du code (c'est-à-dire que les constructions de la forme (?{}) ou (??"
+"{}) ne sont pas prises en charge)."
+
+#. type: TP
+#: ../scripts/uscan.1:249
+#, no-wrap
+msgid "B<dversionmangle=>I<rules>"
+msgstr "B<dversionmangle=>I<règles>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:257
+msgid ""
+"This is used to mangle the Debian version number of the currently installed "
+"package in the same way as the B<uversionmangle> option.  Thus, a suitable "
+"rule might be `s/\\e.dfsg\\e.\\ed+$//' to remove a `.dfsg.1' suffix from the "
+"Debian version number, or to handle `.pre6' type version numbers.  Again, "
+"the I<rules> string may not contain commas; this should not be a problem."
+msgstr ""
+"Utilisé pour modifier le numéro de version Debian du paquet courant installé "
+"dans la même optique que l'option B<uversionmangle>. Ainsi, une règle "
+"appropriée peut être « s/\\e.dfsg\\e.\\ed+$// » pour supprimer le suffixe « ."
+"dfsg.1 » dans un numéro de version Debian ou pour gérer les numéros de "
+"version de type « .pre6 ». Ici encore, la chaîne de caractères I<règles> ne "
+"doit pas contenir de virgule ; ceci ne devrait pas être un problème."
+
+#. type: TP
+#: ../scripts/uscan.1:257
+#, no-wrap
+msgid "B<versionmangle=>I<rules>"
+msgstr "B<versionmangle=>I<règles>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:262
+msgid ""
+"This is a syntactic shorthand for B<uversionmangle=>I<rules>B<,"
+"dversionmangle=>I<rules>B<, applying the same rules to both the upstream and "
+"Debian version numbers.>"
+msgstr ""
+"Il s'agit d'un raccourci syntactique pour B<uversionmangle=>I<règles>,"
+"B<dversionmangle>=I<règles>, appliquant les mêmes règles à la fois aux "
+"numéros de version Debian et amont."
+
+#. type: TP
+#: ../scripts/uscan.1:262
+#, no-wrap
+msgid "B<filenamemangle=>I<rules>"
+msgstr "B<filenamemangle=>I<règles>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:268
+msgid ""
+"This is used to mangle the filename with which the downloaded file will be "
+"saved, and is parsed in the same way as the B<uversionmangle> option.  "
+"Examples of its use are given in the examples section above."
+msgstr ""
+"Ceci est utilisé pour modifier le nom de fichier sous lequel le fichier "
+"téléchargé sera enregistré, et est parcouru de la même manière qu'avec "
+"l'option B<uversionmangle>. Les exemples d'utilisation sont donnés dans la "
+"section ci-dessus."
+
+#. type: TP
+#: ../scripts/uscan.1:268
+#, no-wrap
+msgid "B<downloadurlmangle=>I<rules>"
+msgstr "B<downloadurlmangle=>I<règles>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:276
+msgid ""
+"This is used to mangle the URL to be used for the download.  The URL is "
+"first computed based on the homepage downloaded and the pattern matched, "
+"then the version number is determined from this URL.  Finally, any rules "
+"given by this option are applied before the actual download attempt is made. "
+"An example of its use is given in the examples section above."
+msgstr ""
+"Ceci est utilisé pour modifier l'URL nécessaire pour le téléchargement. "
+"L'URL est d'abord calculée en se basant sur la page principale téléchargée "
+"et sur la correspondance du motif, puis le numéro de version est déterminé "
+"depuis cette URL. Enfin, toutes les règles données par cette option sont "
+"appliquées avant que la tentative de téléchargement soit effectuée. Un "
+"exemple d'utilisation est donné dans la section des exemples ci-dessus."
+
+# NOTE: "and in order to promote efficiency" ?
+#. type: Plain text
+#: ../scripts/uscan.1:291
+msgid ""
+"Similarly to several other scripts in the B<devscripts> package, B<uscan> "
+"explores the requested directory trees looking for I<debian/changelog> and "
+"I<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 I<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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL and 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 le "
+"répertoire demandé à la recherche de fichiers I<debian/changelog> et "
+"I<debian/watch>. Pour se protéger contre certains fichiers égarés qui "
+"pourraient poser problème, 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. 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 "
+"DEVSCRIPTS_CHECK_DIRNAME_LEVEL et 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/uscan.1:302
+msgid ""
+"Only check the directory name if we have had to change directory in our "
+"search for I<debian/changelog>, that is, the directory containing I<debian/"
+"changelog> is not the directory from which B<uscan> was invoked.  This is "
+"the default behaviour."
+msgstr ""
+"Ne vérifie le nom du répertoire que s'il a fallu changer de répertoire pour "
+"trouver le fichier I<debian/changelog>, c'est-à-dire que le répertoire qui "
+"contient I<debian/changelog> n'est pas le répertoire dans lequel B<uscan> a "
+"été invoqué. C'est le comportement par défaut."
+
+#. type: Plain text
+#: ../scripts/uscan.1:320
+msgid "This script will perform a fully automatic upstream update."
+msgstr ""
+"Ce script va réaliser une mise à jour complètement automatique avec l'amont."
+
+#. type: Plain text
+#: ../scripts/uscan.1:328
+#, no-wrap
+msgid ""
+"#!/bin/sh -e\n"
+"# called with '--upstream-version' E<lt>versionE<gt> E<lt>fileE<gt>\n"
+"uupdate \"$@\"\n"
+"package=`dpkg-parsechangelog | sed -n 's/^Source: //p'`\n"
+"cd ../$package-$2\n"
+"debuild\n"
+msgstr ""
+"#!/bin/sh -e\n"
+"# appelé avec '--upstream-version' E<lt>versionE<gt> E<lt>fichierE<gt>\n"
+"uupdate \"$@\"\n"
+"package=`dpkg-parsechangelog | sed -n 's/^Source: //p'`\n"
+"cd ../$package-$2\n"
+"debuild\n"
+
+#. type: Plain text
+#: ../scripts/uscan.1:333
+msgid ""
+"Note that we don't call B<dupload> or B<dput> automatically, as the "
+"maintainer should perform sanity checks on the software before uploading it "
+"to Debian."
+msgstr ""
+"Remarquez que B<dupload> et B<dput> ne sont pas appelés automatiquement, "
+"puisque le responsable doit réaliser des vérifications sur le logiciel avant "
+"de l'envoyer à l'archive Debian."
+
+#. type: TP
+#: ../scripts/uscan.1:334
+#, no-wrap
+msgid "B<--report, --no-download>"
+msgstr "B<--report>, B<--no-download>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:337
+msgid ""
+"Only report about available newer versions but do not download anything."
+msgstr ""
+"Ne fournit qu'un rapport indiquant les nouvelles versions, mais ne "
+"télécharge rien."
+
+#. type: TP
+#: ../scripts/uscan.1:337
+#, no-wrap
+msgid "B<--report-status>"
+msgstr "B<--report-status>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:341
+msgid ""
+"Report on the status of all packages, even those which are up-to-date, but "
+"do not download anything."
+msgstr ""
+"Rapporte l'état de tous les paquets, même ceux qui sont à jour, mais ne "
+"télécharge rien du tout."
+
+#. type: TP
+#: ../scripts/uscan.1:341
+#, no-wrap
+msgid "B<--download>"
+msgstr "B<--download>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:344
+msgid "Report and download.  (This is the default behaviour.)"
+msgstr ""
+"Fournit un rapport puis télécharge. (C'est le comportement par défaut.)"
+
+#. type: TP
+#: ../scripts/uscan.1:344
+#, no-wrap
+msgid "B<--destdir>"
+msgstr "B<--destdir>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:347
+msgid "Path of directory to which to download."
+msgstr "Chemin du répertoire dans lequel placer les fichiers téléchargés."
+
+#. type: TP
+#: ../scripts/uscan.1:347
+#, no-wrap
+msgid "B<--force-download>"
+msgstr "B<--force-download>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:350
+msgid ""
+"Download upstream even if up to date (will not overwrite local files, "
+"however)"
+msgstr ""
+"Télécharger le fichier amont même si le paquet est à jour (cependant, les "
+"fichiers locaux ne sont pas écrasés)."
+
+#. type: TP
+#: ../scripts/uscan.1:350
+#, no-wrap
+msgid "B<--pasv>"
+msgstr "B<--pasv>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:353
+msgid "Force PASV mode for FTP connections."
+msgstr "Force le mode passif (« PASV ») pour les connexions FTP."
+
+#. type: TP
+#: ../scripts/uscan.1:353
+#, no-wrap
+msgid "B<--no-pasv>"
+msgstr "B<--no-pasv>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:356
+msgid "Do not use PASV mode for FTP connections."
+msgstr "N'utilise pas le mode passif pour les connexions FTP."
+
+#. type: TP
+#: ../scripts/uscan.1:356
+#, no-wrap
+msgid "B<--timeout> I<N>"
+msgstr "B<--timeout> I<N>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:359
+msgid "Set timeout to N seconds (default 20 seconds)."
+msgstr "Défini le temps d'attente à N secondes (20 secondes par défaut)."
+
+#. type: TP
+#: ../scripts/uscan.1:359
+#, no-wrap
+msgid "B<--symlink>"
+msgstr "B<--symlink>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:365
+msgid ""
+"Make orig.tar.gz symlinks to any downloaded files if their extensions are I<."
+"tar.gz> or I<.tgz>, and similarly for to orig.tar.bz2 for the suffixes I<."
+"tar.gz>, I<.tbz> and I<.tbz2>.  (This is the default behaviour.)"
+msgstr ""
+"Utilise un lien symbolique pour orig.tar.gz (respectivement orig.tar.bz2) "
+"lorsque les fichiers téléchargés ont des extensions I<.tar.gz> ou I<.tgz> "
+"(respectivement I<.tar.bz2>, I<.tbz> et I<.tbz2>). (C'est le comportement "
+"par défaut.)"
+
+#. type: TP
+#: ../scripts/uscan.1:365
+#, no-wrap
+msgid "B<--rename>"
+msgstr "B<--rename>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:370
+msgid ""
+"Instead of symlinking, rename the downloaded files to their Debian orig.tar."
+"gz names if their extensions are I<.tar.gz> or I<.tgz>, and similarly for "
+"tar.bz2 files."
+msgstr ""
+"Au lieu de créer des liens symboliques, renomme les fichiers téléchargés "
+"avec leur nom Debian orig.tar.gz si leurs extensions sont I<.tar.gz> ou I<."
+"tgz> et de manière semblable pour les fichiers d'extension tar.bz2."
+
+#. type: TP
+#: ../scripts/uscan.1:370
+#, no-wrap
+msgid "B<--repack>"
+msgstr "B<--repack>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:381
+msgid ""
+"After having downloaded an lzma tar, xz tar, bzip tar or zip archive, repack "
+"it to a gzip tar archive, which is still currently required as a member of a "
+"Debian source package. Does nothing if the downloaded archive is not an lzma "
+"tar archive, xz tar archive, bzip tar archive or a zip archive (i.e. it "
+"doesn't match a .tlz, .tar.lzma, .txz, .tar.xz \\^.tbz, .tbz2, .tar.bz2 or ."
+"zip extension). The unzip package must be installed in order to repack .zip "
+"archives, the lzma package must be installed to repack lzma tar archives, "
+"and the xz-utils package must be installed to repack xz tar archives."
+msgstr ""
+"Après avoir téléchargé une archive tar compressée avec lzma ou xz ou bzip ou "
+"une archive zip, la rempaqueter dans une archive tar compressée avec gzip, "
+"ce qui est toujours nécessaire pour les paquets sources Debian. Ne rien "
+"faire si l'archive téléchargée n'est ni une archive tar compressée avec lzma "
+"ou xz ou bzip ni une archive zip (c'est-à-dire si elle ne finie pas par "
+"l'extension .tlz, tar.lzma, .txz, .tar.xz \\^.tbz, .tbz2, .tar.bz2 ou .zip). "
+"Le paquet unzip doit être installé pour rempaqueter les archives .zip, le "
+"paquet lzma doit être installé pour rempaqueter les archives tar compressées "
+"avec lzma et le paquet xz-utils doit être installé pour rempaqueter les "
+"archives tar compressées avec xz."
+
+#. type: TP
+#: ../scripts/uscan.1:381 ../scripts/uupdate.1:74
+#, no-wrap
+msgid "B<--no-symlink>"
+msgstr "B<--no-symlink>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:384
+msgid "Don't make these symlinks and don't rename the files."
+msgstr "Ne crée pas ces liens symboliques et ne renomme pas les fichiers."
+
+#. type: TP
+#: ../scripts/uscan.1:384
+#, no-wrap
+msgid "B<--dehs>"
+msgstr "B<--dehs>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:387
+msgid "Use an XML format for output, as required by the DEHS system."
+msgstr "Utilise le format XML pour la sortie, requis par le système DEHS."
+
+#. type: TP
+#: ../scripts/uscan.1:387
+#, no-wrap
+msgid "B<--no-dehs>"
+msgstr "B<--no-dehs>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:390
+msgid ""
+"Use the traditional uscan output format.  (This is the default behaviour.)"
+msgstr ""
+"Utilise le format de sortie traditionnel de uscan. (C'est le comportement "
+"par défaut.)"
+
+#. type: Plain text
+#: ../scripts/uscan.1:399
+msgid ""
+"Specify the name of the package to check for rather than examining I<debian/"
+"changelog>; this requires the B<--upstream-version> (unless a version is "
+"specified in the watchfile)  and B<--watchfile> options as well.  "
+"Furthermore, no directory scanning will be done and nothing will be "
+"downloaded.  This option is probably most useful in conjunction with the "
+"DEHS system (and B<--dehs>)."
+msgstr ""
+"Indique le nom du paquet à contrôler plutôt que d'examiner I<debian/"
+"changelog> ; ceci requiert les options B<--upstream-version> (à moins qu'une "
+"option ne soit précisée dans le fichier watch) et B<--watchfile>. De plus, "
+"aucun répertoire ne sera scanné et rien ne sera téléchargé. Cette option est "
+"probablement la plus utile en conjonction avec le système DEHS (et B<--"
+"dehs>)."
+
+#. type: TP
+#: ../scripts/uscan.1:399
+#, no-wrap
+msgid "B<--upstream-version> I<upstream-version>"
+msgstr "B<--upstream-version> I<version-amont>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:404
+msgid ""
+"Specify the current upstream version rather than examine the watchfile or "
+"changelog to determine it.  This is ignored if a directory scan is being "
+"performed and more than one watchfile is found."
+msgstr ""
+"Indique la version amont courante plutôt que d'examiner le fichier watchfile "
+"ou le journal des modifications pour le déterminer. Ceci est ignoré si un "
+"balayage de répertoire est fait et que plus d'un fichier watchfile est "
+"trouvé."
+
+#. type: TP
+#: ../scripts/uscan.1:404
+#, no-wrap
+msgid "B<--watchfile> I<watchfile>"
+msgstr "B<--watchfile> I<watchfile>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:411
+msgid ""
+"Specify the 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 I<debian/changelog> can "
+"be found simply by stepping up through the tree)."
+msgstr ""
+"Indique le fichier watchfile plutôt que de 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 I<debian/changelog> puisse être trouvé simplement par une recherche dans "
+"l'arborescence)."
+
+#. type: TP
+#: ../scripts/uscan.1:411
+#, no-wrap
+msgid "B<--download-version> I<version>"
+msgstr "B<--download-version> I<version>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:415
+msgid ""
+"Specify the version which the upstream release must match in order to be "
+"considered, rather than using the release with the highest version."
+msgstr ""
+"Indique la version amont souhaitée, plutôt que d'utiliser celle avec le "
+"numéro de version le plus important."
+
+#. type: TP
+#: ../scripts/uscan.1:415
+#, no-wrap
+msgid "B<--download-current-version>"
+msgstr "B<--download-current-version>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:418
+msgid "Download the currently packaged version"
+msgstr "Télécharger la version du paquet actuel"
+
+#. type: Plain text
+#: ../scripts/uscan.1:421
+msgid "Give verbose output."
+msgstr "Donne une sortie bavarde."
+
+#. type: TP
+#: ../scripts/uscan.1:421
+#, no-wrap
+msgid "B<--no-verbose>"
+msgstr "B<--no-verbose>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:424
+msgid "Don't give verbose output.  (This is the default behaviour.)"
+msgstr "Ne donne pas de sortie bavarde. (C'est le comportement par défaut.)"
+
+#. type: TP
+#: ../scripts/uscan.1:424
+#, no-wrap
+msgid "B<--debug>"
+msgstr "B<--debug>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:427
+msgid "Dump the downloaded web pages to stdout for debugging your watch file."
+msgstr ""
+"Affiche les pages web téléchargées sur la sortie standard afin de déboguer "
+"votre fichier « watch »."
+
+#. type: TP
+#: ../scripts/uscan.1:435
+#, no-wrap
+msgid "B<--user-agent>, B<--useragent>"
+msgstr "B<--user-agent>, B<--useragent>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:438
+msgid "Override the default user agent header."
+msgstr "Utiliser un champ « user agent » différent de celui par défaut."
+
+#. type: Plain text
+#: ../scripts/uscan.1:445
+msgid "Give brief usage information."
+msgstr "Affiche un bref message d'aide."
+
+# NOTE: presque identique à un autre ?
+#. type: Plain text
+#: ../scripts/uscan.1:455
+msgid ""
+"The two configuration files I</etc/devscripts.conf> and I<~/.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 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/uscan.1:455
+#, no-wrap
+msgid "B<USCAN_DOWNLOAD>"
+msgstr "B<USCAN_DOWNLOAD>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:460
+msgid ""
+"If this is set to I<no>, then newer upstream files will not be downloaded; "
+"this is equivalent to the B<--report> or B<--no-download> options."
+msgstr ""
+"Si elle est positionnée à I<no>, les nouveaux fichiers amonts ne seront pas "
+"téléchargés, ce qui équivaut à utiliser les options B<--report> ou B<--no-"
+"download>."
+
+#. type: TP
+#: ../scripts/uscan.1:460
+#, no-wrap
+msgid "B<USCAN_PASV>"
+msgstr "B<USCAN_PASV>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:466
+msgid ""
+"If this is set to I<yes> or I<no>, this will force FTP connections to use "
+"PASV mode or not to, respectively.  If this is set to I<default>, then Net::"
+"FTP(3) make the choice (primarily based on the FTP_PASSIVE environment "
+"variable)."
+msgstr ""
+"Si elle est positionnée à I<yes> ou I<no>, cela force respectivement à "
+"utiliser ou à ne pas utiliser le mode passif pour les connexions FTP. Si "
+"elle est positionnée à I<default>, alors Net::FTP(3) fera un choix (basé "
+"principalement sur la variable d'environnement FTP_PASSIVE)."
+
+#. type: TP
+#: ../scripts/uscan.1:466
+#, no-wrap
+msgid "B<USCAN_TIMEOUT>"
+msgstr "B<USCAN_TIMEOUT>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:470
+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: TP
+#: ../scripts/uscan.1:470
+#, no-wrap
+msgid "B<USCAN_SYMLINK>"
+msgstr "B<USCAN_SYMLINK>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:477
+msgid ""
+"If this is set to I<no>, then a pkg_version.orig.tar.{gz|bz2} symlink will "
+"not be made (equivalent to the B<--no-symlink> option).  If it is set to "
+"I<yes> or I<symlink>, then the symlinks will be made.  If it is set to "
+"I<rename>, then the files are renamed (equivalent to the B<--rename> option)."
+msgstr ""
+"Si cette option est mise à I<no>, un lien symbolique vers paquet_version."
+"orig.tar.{gz|bz2} ne sera pas créé (équivalent à l'option B<--no-symlink>). "
+"Si elle est à I<yes> ou I<symlink>, les liens symboliques seront créés. Si "
+"elle est à I<rename>, les fichiers sont renommés (équivalent à l'option B<--"
+"rename>)."
+
+#. type: TP
+#: ../scripts/uscan.1:477
+#, no-wrap
+msgid "B<USCAN_DEHS_OUTPUT>"
+msgstr "B<USCAN_DEHS_OUTPUT>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:481
+msgid ""
+"If this is set to I<yes>, then DEHS-style output will be used.  This is "
+"equivalent to the B<--dehs> option."
+msgstr ""
+"Si cette option est à I<yes>, alors la sortie sera de type DEHS, comme si "
+"l'option B<--dehs> était utilisée."
+
+#. type: TP
+#: ../scripts/uscan.1:481
+#, no-wrap
+msgid "B<USCAN_VERBOSE>"
+msgstr "B<USCAN_VERBOSE>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:485
+msgid ""
+"If this is set to I<yes>, then verbose output will be given.  This is "
+"equivalent to the B<--verbose> option."
+msgstr ""
+"Si elle est positionnée à I<yes>, alors la sortie sera bavarde, comme si "
+"l'option B<--verbose> était utilisée."
+
+#. type: TP
+#: ../scripts/uscan.1:485
+#, no-wrap
+msgid "B<USCAN_USER_AGENT>"
+msgstr "B<USCAN_USER_AGENT>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:489
+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: TP
+#: ../scripts/uscan.1:489
+#, no-wrap
+msgid "B<USCAN_DESTDIR>"
+msgstr "B<USCAN_DESTDIR>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:493
+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: TP
+#: ../scripts/uscan.1:493
+#, no-wrap
+msgid "B<USCAN_REPACK>"
+msgstr "B<USCAN_REPACK>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:498
+msgid ""
+"If this is set to I<yes>, then after having downloaded a bzip tar, lzma tar, "
+"xz tar, or zip archive, B<uscan> will repack it to a gzip tar.  This is "
+"equivalent to the B<--repack> option."
+msgstr ""
+"Si elle est positionnée à I<yes>, alors après avoir téléchargé une archive "
+"tar compressée avec bzip ou lzma ou xz ou une archive zip, B<uscan> recréera "
+"une archive tar compressée avec gzip. C'est équivalent à l'option B<--"
+"repack>."
+
+#. type: Plain text
+#: ../scripts/uscan.1:502
+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: Plain text
+#: ../scripts/uscan.1:506
+msgid ""
+"Either B<--help> or B<--version> was used, or for some watchfile 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 « watch » examinés."
+
+#. type: Plain text
+#: ../scripts/uscan.1:510
+msgid ""
+"No newer upstream versions were located for any of the watchfiles examined."
+msgstr ""
+"Aucune nouvelle version amont n'a été trouvée pour les fichiers « watch » "
+"examinés."
+
+#. type: SH
+#: ../scripts/uscan.1:510
+#, no-wrap
+msgid "HISTORY AND UPGRADING"
+msgstr "HISTORIQUE ET MISE À NIVEAU"
+
+#. type: Plain text
+#: ../scripts/uscan.1:514
+msgid ""
+"This section briefly describes the backwards-incompatible watchfile features "
+"which have been added in each watchfile 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 watchfile qui ont été ajoutées dans chaque "
+"version du watchfile et la première version du paquet B<devscripts> qui les "
+"comprenait."
+
+#. type: TP
+#: ../scripts/uscan.1:514
+#, no-wrap
+msgid "I<Pre-version 2>"
+msgstr "I<Versions antérieures à 2>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:519
+msgid ""
+"The watchfile syntax was significantly different in those days.  Don't use "
+"it.  If you are upgrading from a pre-version 2 watchfile, you are advised to "
+"read this manpage and to start from scratch."
+msgstr ""
+"La syntaxe du fichier watchfile était très différente à l'époque. Ne "
+"l'utilisez plus. Si vous mettez votre fichier watchfile à niveau depuis une "
+"version antérieure à 2, il est recommandé de lire cette page de manuel et de "
+"recommencer à zéro."
+
+#. type: TP
+#: ../scripts/uscan.1:519
+#, no-wrap
+msgid "I<Version 2>"
+msgstr "I<Version 2>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:523
+msgid ""
+"devscripts version 2.6.90: The first incarnation of the current style of "
+"watchfiles."
+msgstr ""
+"devscripts version 2.6.90 : la première incarnation du style courant de "
+"watchfile."
+
+#. type: TP
+#: ../scripts/uscan.1:523
+#, no-wrap
+msgid "I<Version 3>"
+msgstr "I<Version 3>"
+
+#. type: Plain text
+#: ../scripts/uscan.1:529
+msgid ""
+"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 ""
+"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: Plain text
+#: ../scripts/uscan.1:535
+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 "
+"behaviour, change the non-version-number groups to be (?:...) instead of a "
+"plain (...) group."
+msgstr ""
+"Si vous êtes en train de vous mettre à niveau depuis la version 2, "
+"l'incompatibilité principale est s'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 (?:...) au lieu d'un "
+"groupe ordinaire (...)."
+
+#. type: Plain text
+#: ../scripts/uscan.1:541
+msgid "B<dpkg>(1), B<perlre>(1), B<uupdate>(1)  and B<devscripts.conf>(5)."
+msgstr "B<dpkg>(1), B<perlre>(1), B<uupdate>(1) et B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/uscan.1:546
+msgid ""
+"The original version of B<uscan> was written by Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>.  Significant improvements, changes and "
+"bugfixes were made by Julian Gilbey E<lt>jdg@debian.orgE<gt>.  HTTP support "
+"was added by Piotr Roszatycki E<lt>dexter@debian.orgE<gt>.  The program was "
+"rewritten in Perl by Julian Gilbey."
+msgstr ""
+"La version initiale de B<uscan> a été écrite par Christoph Lameter "
+"E<lt>clameter@debian.orgE<gt>. Des améliorations significatives, d'autres "
+"modifications et des corrections de bogues ont été apportées par Julian "
+"Gilbey E<lt>jdg@debian.orgE<gt>. Le support pour HTTP a été ajouté par Piotr "
+"Roszatycki E<lt>dexter@debian.orgE<gt>. Le programme a été récrit en Perl "
+"par Julian Gilbey."
+
+#. 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<--patch>|B<-p> I<patch_file>"
+msgstr "B<uupdate> [I<options>] B<--patch>|B<-p> I<fichier_rustine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:20
+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 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>). Notez 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:30
+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:40
+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). Ceci "
+"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:45
+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:52
+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> tant que possible. Ceci "
+"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:54
+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:54
+#, 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:57
+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:57
+#, no-wrap
+msgid "B<--rootcmd >I<gain-root-command>, B<-r >I<gain-root-command>"
+msgstr "B<--rootcmd> I<commande-pour-devenir-root>, B<-r> I<commande-pour-devenir-root>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:61
+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:61
+#, no-wrap
+msgid "B<--pristine>, B<-u>"
+msgstr "B<--pristine>, B<-u>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:66
+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:66
+#, no-wrap
+msgid "B<--no-pristine>"
+msgstr "B<--no-pristine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:69
+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:69
+#, no-wrap
+msgid "B<--symlink>, B<-s>"
+msgstr "B<--symlink>, B<-s>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:74
+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:78
+msgid ""
+"Copy the upstream I<.tar.gz> to the new location instead of making a symlink."
+msgstr ""
+"Copie l'archive I<.tar.gz> amont au nouvel emplacement au lieu de faire un "
+"lien symbolique."
+
+#. type: TP
+#: ../scripts/uupdate.1:94
+#, no-wrap
+msgid "B<UUPDATE_PRISTINE>"
+msgstr "B<UUPDATE_PRISTINE>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:98
+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 positionnée à « no », alors c'est comme si l'option B<--no-"
+"pristine> était utilisée."
+
+#. type: TP
+#: ../scripts/uupdate.1:98
+#, no-wrap
+msgid "B<UUPDATE_SYMLINK_ORIG>"
+msgstr "B<UUPDATE_SYMLINK_ORIG>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:102
+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 positionnée à « no », alors c'est comme si l'option B<--no-"
+"symlink> était utilisée."
+
+#. type: TP
+#: ../scripts/uupdate.1:102
+#, no-wrap
+msgid "B<UUPDATE_ROOTCMD>"
+msgstr "B<UUPDATE_ROOTCMD>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:105
+msgid "This is equivalent to the B<--rootcmd> option."
+msgstr "Équivaut à utiliser l'option B<--rootcmd>."
+
+#. type: SH
+#: ../scripts/uupdate.1:105
+#, no-wrap
+msgid "ACTIONS TAKEN ON AN ARCHIVE"
+msgstr "ACTIONS EFFECTUÉES SUR UNE ARCHIVE"
+
+#. type: TP
+#: ../scripts/uupdate.1:106 ../scripts/uupdate.1:139
+#, 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:112
+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:112
+#, 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:117
+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:117
+#, no-wrap
+msgid "B<Unpacking>"
+msgstr "B<Décompression>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:122
+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:122 ../scripts/uupdate.1:150
+#, no-wrap
+msgid "B<Patching>"
+msgstr "B<Application de la rustine>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:130
+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:130 ../scripts/uupdate.1:162
+#, no-wrap
+msgid "B<Changelog update>"
+msgstr "B<Mise à jour du fichier changelog>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:134 ../scripts/uupdate.1:166
+msgid ""
+"A changelog entry with the new version number is generated with the text "
+"``New upstream release''."
+msgstr ""
+"Une entrée du fichier changelog avec la nouvelle version est générée avec le "
+"texte « New upstream release » (nouvelle version amont)."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:138 ../scripts/uupdate.1:170
+msgid ""
+"When used on Ubuntu systems, B<lsb_release> 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<lsb_release> 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:138
+#, no-wrap
+msgid "ACTIONS TAKEN ON A PATCH FILE"
+msgstr "ACTIONS APPLIQUÉES À UN FICHIER DE RUSTINES"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:145
+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:145
+#, no-wrap
+msgid "B<Clean the current source tree>"
+msgstr "B<Nettoyage de l'arborescence source actuelle>"
+
+#. type: Plain text
+#: ../scripts/uupdate.1:150
+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:162
+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:177
+msgid ""
+"B<debuild>(1), B<fakeroot>(1), B<patch>(1), I<The Debian Policy Manual> and "
+"B<devscripts.conf>(5)."
+msgstr ""
+"B<debuild>(1), B<fakeroot>(1), B<patch>(1), I<la charte Debian> et "
+"B<devscripts.conf>(5)."
+
+#. type: Plain text
+#: ../scripts/uupdate.1:180
+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
+#: ../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>] [options]"
+msgstr "B<whodepends> [I<paquet>] [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 email et le nom des "
+"paquets concernés."
+
+#. type: TP
+#: ../scripts/whodepends.1:11
+#, no-wrap
+msgid "B<--help, -h>"
+msgstr "B<--help>, B<-h>"
+
+#. type: TP
+#: ../scripts/whodepends.1:14
+#, no-wrap
+msgid "B<--version, -v>"
+msgstr "B<--version>, B<-v>"
+
+#. 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 sources "
+"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) 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. Notez que ces personnes sont identifiées avec leurs clés "
+"B<gpg>(1). L'installation d'une version récente du paquet I<debian-keyring> "
+"devrait fournir la plupart des clés 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 ""
+"Notez 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. Notez 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 clés à la liste des trousseaux à utiliser pour "
+"identifier la clé GPG des personnes ayant envoyé un paquet."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:33
+msgid ""
+"By default, B<who-uploads> uses the three Debian keyrings I</usr/share/"
+"keyrings/debian-keyring.{gpg,pgp}> 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,pgp}> 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:33
+#, no-wrap
+msgid "B<--date>"
+msgstr "B<--date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:36
+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:36
+#, no-wrap
+msgid "B<--nodate>, B<--no-date>"
+msgstr "B<--nodate>, B<--no-date>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:40
+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:56
+#, no-wrap
+msgid "B<WHOUPLOADS_DATE>"
+msgstr "B<WHOUPLOADS_DATE>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:60
+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:60
+#, no-wrap
+msgid "B<WHOUPLOADS_MAXUPLOADS>"
+msgstr "B<WHOUPLOADS_MAXUPLOADS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:64
+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:64
+#, no-wrap
+msgid "B<WHOUPLOADS_KEYRINGS>"
+msgstr "B<WHOUPLOADS_KEYRINGS>"
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:71
+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,pgp}> 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,pgp}> et I</usr/share/keyrings/debian-"
+"maintainers.gpg>."
+
+#. type: Plain text
+#: ../scripts/who-uploads.1:74
+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: 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 [--diff] [package ...]>"
+msgstr "B<wnpp-alert [--diff] [paquet ...]>"
+
+#. type: Plain text
+#: ../scripts/wnpp-alert.1:8
+msgid "B<wnpp-alert --help|--version>"
+msgstr "B<wnpp-alert --help|--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 ""
+"Notez 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<~/.devscripts_cache> 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<~/.devscripts_cache> 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:25
+msgid "http://www.debian.org/devel/wnpp"
+msgstr "http://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 package [...]>"
+msgstr "B<wnpp-check paquet [...]>"
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:8
+msgid "B<wnpp-check --help|--version>"
+msgstr "B<wnpp-check --help|--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 ""
+"Notez que WNPP, et donc la sortie de B<wnpp-check>, est basé sur des paquets "
+"source."
+
+#. type: Plain text
+#: ../scripts/wnpp-check.1:29
+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:33
+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:39
+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
+#: ../scripts/devscripts.conf.5:1
+#, no-wrap
+msgid "DEVSCRIPTS.CONF"
+msgstr "DEVSCRIPTS.CONF"
+
+#. type: Plain text
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/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
+#: ../scripts/devscripts.conf.5:40
+#, no-wrap
+msgid "PACKAGE-WIDE VARIABLES"
+msgstr "VARIABLES GLOBALES AU PAQUET"
+
+#. type: Plain text
+#: ../scripts/devscripts.conf.5:42
+msgid "The currently recognised package-wide variables are:"
+msgstr "Les options globales au paquet actuellement reconnues sont :"
+
+#. type: Plain text
+#: ../scripts/devscripts.conf.5:54
+msgid ""
+"These 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 ""
+"Permet 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 non souhaités, 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
+#: ../scripts/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
+#: ../scripts/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>."
+
+#~ msgid "Status of the bug."
+#~ msgstr "État du bogue."
+
+#~ msgid "B<--qa ,  -q>"
+#~ msgstr "B<--qa ,  -q>"
+
+#~ msgid ""
+#~ "Using this setting users can specify how to enable authenticated mode for "
+#~ "repositories hosted on non well-known machines."
+#~ msgstr ""
+#~ "En utilisant cette configuration, les utilisateurs peuvent indiquer "
+#~ "comment activer le mode authentifié pour les dépôts qui ne se trouvent "
+#~ "pas sur des machines bien connues."
+
+#~ msgid ""
+#~ "Extracts patches from .diff.gz which apply to files outside the debian/ "
+#~ "directory scope."
+#~ msgstr ""
+#~ "Extraire les parties de fichiers .diff.gz qui ne s'appliquent pas au "
+#~ "répertoire debian/."
+
+#~ msgid ""
+#~ "I<debian/patches> When present and is a directory, patches are extracted "
+#~ "in that directory, unless I<DEB_PATCHES> is defined (read the "
+#~ "\"ENVIRONMENT VARIABLES\" section below)."
+#~ msgstr ""
+#~ "I<debian/patches> Quand ce répertoire est présent, les patches sont "
+#~ "extraits dans ce répertoire, à moins que I<DEB_PATCHES> ne soit définie "
+#~ "(consultez la section « VARIABLES D'ENVIRONNEMENT » ci-dessous)."
+
+#~ msgid ""
+#~ "The base url for the snapshots archive.  This is the root of a directory "
+#~ "tree such as I<pool/E<lt>initialE<gt>/E<lt>packageE<gt>/> under which a "
+#~ "I<Sources.gz> may be found, and the root for the location of the packages "
+#~ "specified in the I<Sources.gz> file found there."
+#~ msgstr ""
+#~ "L'URL de base de l'archive. Il s'agit de la racine d'une arborescence de "
+#~ "répertoires telle que I<pool/E<lt>initialeE<gt>/E<lt>paquetE<gt>/> sous "
+#~ "laquelle se trouve un fichier I<Sources.gz>, et la racine des "
+#~ "emplacements des fichiers indiqués par le fichier I<Sources.gz>."
+
+#~ msgid "B<DEBSNAP_CLEAN_REGEX>"
+#~ msgstr "B<DEBSNAP_CLEAN_REGEX>"
+
+#~ msgid ""
+#~ "A sed regular expression to transform the directory returned by `B<apt-"
+#~ "cache showsrc> I<package> B<| grep ^Directory>` to a suitable path to be "
+#~ "put between B<DEBSNAP_BASE_URL> and B<DEBSNAP_SOURCES_GZ_PATH>."
+#~ msgstr ""
+#~ "Une expression rationnelle sed pour transformer le répertoire renvoyé par "
+#~ "« B<apt-cache showsrc> I<paquet> B<| grep ^Directory> » en un chemin qui "
+#~ "conviendra pour être mis entre B<DEBSNAP_BASE_URL> et "
+#~ "B<DEBSNAP_SOURCES_GZ_PATH>."
+
+#~ msgid ""
+#~ "If unset it will default to s@\\e([^/]*\\e)/[^/]*/\\e(\\&.*\\e)@\\e1/\\e2@"
+#~ msgstr ""
+#~ "Si elle n'est pas définie, la valeur par défaut est s@\\e([^/]*\\e)/[^/]*/"
+#~ "\\e(\\&.*\\e)@\\e1/\\e2@"
+
+#~ msgid ""
+#~ "i.e. it transforms I<pool/E<lt>componentE<gt>/E<lt>initialE<gt>/"
+#~ "E<lt>packageE<gt>> into I<pool/E<lt>initialE<gt>/E<lt>packageE<gt>>"
+#~ msgstr ""
+#~ "C'est-à-dire qu'il transforme I<pool/E<lt>composantE<gt>/"
+#~ "E<lt>initialeE<gt>/E<lt>paquetE<gt>> en I<pool/E<lt>initialeE<gt>/"
+#~ "E<lt>paquetE<gt>>"
+
+#~ msgid "B<DEBSNAP_SOURCES_GZ_PATH>"
+#~ msgstr "B<DEBSNAP_SOURCES_GZ_PATH>"
+
+#~ msgid ""
+#~ "The final path to the I<Sources.gz> file.  This is appended after the "
+#~ "B<DEBSNAP_BASE_URL> and the path modified by B<DEBSNAP_CLEAN_REGEX> to "
+#~ "locate the I<Sources.gz> file for the package to download."
+#~ msgstr ""
+#~ "Le chemin final du fichier I<Sources.gz>. Il est rajouté à la fin de "
+#~ "B<DEBSNAP_BASE_URL> et du chemin modifié par B<DEBSNAP_CLEAN_REGEX> pour "
+#~ "trouver le fichier I<Sources.gz> du paquet à télécharger."
+
+#~ msgid "If unset it will default to I<source/Sources.gz>"
+#~ msgstr ""
+#~ "Si elle n'est pas définie, la valeur par défaut est I<source/Sources.gz>"
+
+#~ msgid "Ron Lee E<lt>ron@debian.orgE<gt>"
+#~ msgstr "Ron Lee E<lt>ron@debian.orgE<gt>"
+
+#~ msgid "B<hg>"
+#~ msgstr "B<hg>"
+
+#~ msgid ""
+#~ "B<annotate-output> does not currently accept any command-line options, so "
+#~ "--help, --version, and that kind of stuff do not currently work (unless "
+#~ "you install /usr/bin/--help ;) )."
+#~ msgstr ""
+#~ "B<annotate-output> n'accepte pas d'option sur la ligne de commande pour "
+#~ "l'instant, donc --help, --version et ce genre de choses ne fonctionnent "
+#~ "pas pour l'instant (à moins d'installer /usr/bin/--help)."
+
+#~ msgid "TODO"
+#~ msgstr "À FAIRE"
+
+#~ msgid "Accept --help, --version command-line options."
+#~ msgstr "Accepter les options --help et --version."
+
+#~ msgid "Get rich with this very sophisticated piece of bash."
+#~ msgstr "Devenir riche avec ce morceau de bash très sophistiqué."
+
+#~ msgid ""
+#~ "The most recent version of this utility is on http://jeroen.A-Eskwadraat."
+#~ "nl/sw/annotate"
+#~ msgstr ""
+#~ "La version la plus récente de cet utilitaire se trouve sur http://jeroen."
+#~ "A-Eskwadraat.nl/sw/annotate"
+
+#~ msgid "Empty status fields are not displayed."
+#~ msgstr "Les champs d'état qui sont vides ne sont pas affichés."
+
+#~ msgid "B<--no-preserve>, B<--nopreserve>"
+#~ msgstr "B<--no-preserve>, B<--nopreserve>"
+
+#~ msgid "B<--no-preserve>"
+#~ msgstr "B<--no-preserve>"
+
+#~ msgid "B<mk-build-deps> [-i|--install] <control file | package name> [...]"
+#~ msgstr ""
+#~ "B<mk-build-deps> [-i|--install] <fichier control | nom paquet> [...]"
+
+#~ msgid ""
+#~ "When B<cowpoke> is run the following configuration options are read from "
+#~ "global, per-user, and per-project configuration files if present:"
+#~ 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 :"
+
+#~ msgid ""
+#~ "If this opton is unset (which is the default), cowpoke will attempt to "
+#~ "log in to the build machine as the root user initially, then drop those "
+#~ "privileges to assume the identity of the B<BUILDD_USER> for operations "
+#~ "which do not require them.  This is the recommended method when used in "
+#~ "conjunction with a secure key to grant root access to the machine.  If "
+#~ "you prefer to gain root access through some other method, then you should "
+#~ "set this option to contain the privilege escalation command that will be "
+#~ "used to execute the scripts which must run as root, and cowpoke will "
+#~ "initially log in as the B<BUILDD_USER>."
+#~ msgstr ""
+#~ "Si cette option est activée (ce qui est le cas par défaut), cowpoke "
+#~ "essaiera de se connecter initialement en tant que root sur la machine de "
+#~ "construction, puis abandonnera ces privilèges pour prendre l'identité "
+#~ "fournie par B<BUILDD_USER> pour les opérations qui ne nécessitent pas ces "
+#~ "privilèges. Il s'agit de la méthode recommandée lorsqu'une clé sécurisée "
+#~ "est utilisée pour accéder à la machine. Si vous préférez obtenir un accès "
+#~ "root avec une autre méthode, alors vous devez fournir à cette option la "
+#~ "commande qui sera utilisée pour obtenir ces privilèges lors de "
+#~ "l'exécution des scripts qui doivent s'exécuter en tant que root et "
+#~ "cowpoke se connectera initialement en tant que B<BUILDD_USER>."
+
+#~ msgid "doc"
+#~ msgstr "doc"
+
+#~ msgid ""
+#~ "  Load the list of sites, and patterns, to test.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Charger la liste des sites et des motifs à tester.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "  By default these will come from the end of the script\n"
+#~ " itself.  A user may create the file ~/.namecheckrc with\n"
+#~ " their own patterns if they prefer.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Par défaut, ils proviennent de la fin du script lui-même. \n"
+#~ "Un utilisateur peut indiquer ses propres motifs dans un fichier ~/."
+#~ "namecheckrc.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "  Test the given name against the patterns we've loaded from our\n"
+#~ " own script, or the users configuration file.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Tester le nom de projet vis à vis des motifs chargés à partir du \n"
+#~ "script lui-même ou du fichier de configuration propre à l'utilisateur.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "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."
+#~ msgstr ""
+#~ "Ne lit aucun fichier de configuration. L'option ne peut être utilisée "
+#~ "qu'en première position de la ligne de commande."
+
+#~ msgid "Pass"
+#~ msgstr "Passer"
+
+#~ msgid ""
+#~ "# If your package is located on SourceForge and the redirector\n"
+#~ "# isn't working for you, you can use the following format. Note\n"
+#~ "# that the trailing .* is required.\n"
+#~ "http://downloads.sourceforge.net/audacity/audacity-src-(.+)\\e.tar\\e.gz"
+#~ "\\e.*\n"
+#~ msgstr ""
+#~ "# Si votre paquet est situé sur sourceforge, et que le redirecteur\n"
+#~ "# ne marche pas pour vous, vous pouvez utiliser le format suivant.\n"
+#~ "# Notez que le « .* » de fin est nécessaire.\n"
+#~ "http://downloads.sourceforge.net/audacity/audacity-src-(.+)\\e.tar\\e.gz"
+#~ "\\e.*\n"
+
+#~ msgid ""
+#~ "apt-cache(8), Section 4.10.4 of the Debian Developer's Reference and/or "
+#~ "Bug#391023 in the Debian Bug Tracking System (for more information about "
+#~ "Vcs-* fields)"
+#~ msgstr ""
+#~ "apt-cache(8), la section 4.10.4 de la référence du développeur Debian et/"
+#~ "ou le bogue #391023 dans le BTS (pour plus d'informations sur les champs "
+#~ "Vcs-*)."
+
+#~ msgid "Record that you have claimed a bug (e.g. for a bug squashing party)."
+#~ msgstr ""
+#~ "Marque un bogue comme revendiqué par vous (par exemple pour une BSP)."
+
+#~ msgid ""
+#~ "In most cases, adding a comment will cause the generated mail to be CCed "
+#~ "to the bug report, in addition to control@bugs.debian.org."
+#~ msgstr ""
+#~ "Dans la plupart des cas, ajouter un commentaire mettra le courrier généré "
+#~ "en copie du rapport de bogue en plus de control@bugs.debian.org."
+
+#~ msgid ""
+#~ "This is a command line interface to the bug tracking system, 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."
+#~ msgstr ""
+#~ "Ceci 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 via 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 courriel à l'adresse de contrôle du BTS."
+
+#~ msgid ""
+#~ "Options may be specified after the \"bugs\" command in addition to or "
+#~ "instead of options at the start of the command line: recognised options "
+#~ "at his point are: -o/--offline/--online, --mbox, --mailreader and --[no-]"
+#~ "cache.  These are described earlier in this manpage.  If either the -o or "
+#~ "--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 « bugs » en plus ou "
+#~ "à la place des options au début de la ligne de commande. Les options "
+#~ "reconnues pour l'instant sont : -o/--offline/--online, --mbox, --"
+#~ "mailreader et --[no-]cache. Celles-ci sont expliquées plus haut dans "
+#~ "cette page de manuel. Si -o ou --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."
+
+#~ msgid ""
+#~ "If caching has been enabled (that is, --no-cache has not been used, and "
+#~ "BTS_CACHE has not been set to \"no\"), then any page requested by \"bts "
+#~ "show\" will automatically be cached, and be available offline "
+#~ "thereafter.  Pages which are automatically cached in this way will be "
+#~ "deleted on subsequent \"bts show|bugs|cache\" invocations if they have "
+#~ "not been accessed in 30 days."
+#~ msgstr ""
+#~ "Si la mise en cache a été activée (c'est-à-dire si --no-cache n'a pas été "
+#~ "utilisé et si la variable BTS_CACHE ne vaut pas « no »), alors toute page "
+#~ "demandée via « bts show » va être automatiquement mise en cache et 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 « bts show|bugs|cache » si elles n'ont "
+#~ "pas été accédées dans les 30 jours."
+
+#~ msgid ""
+#~ "This code is copyright by Patrick Schoenfeld <schoenfeld@in-medias-res."
+#~ "com>, 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@in-medias-res.com>, "
+#~ "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."
+
+#~ msgid ""
+#~ "Increment the Debian release number for a binary non-maintainer upload by "
+#~ "ether appending a \"+b1\" to a non-binNMU version number or by "
+#~ "incrementing a binNMU version number, and add a binNMU changelog comment."
+#~ msgstr ""
+#~ "Incrémente le numéro de version Debian pour un envoi binaire d'un non-"
+#~ "responsable soit en ajoutant « +b1 » à une version non-binNMU soit en "
+#~ "incrémentant un numéro de binNMU, et ajoute un commentaire « binNMU » "
+#~ "dans le changelog."
+
+#~ msgid ""
+#~ "Increment the Debian release number for a upload to etch-backports, and "
+#~ "add a backport upload changelog comment."
+#~ msgstr ""
+#~ "Incrémente le numéro de publication de Debian pour un envoi d'un "
+#~ "rétroportage pour Etch, et ajoute un commentaire pour l'envoi du "
+#~ "rétroportage dans le changelog."
+
+#~ 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; it can be overridden providing the I<DESTDIR> "
+#~ "argument."
+#~ msgstr ""
+#~ "B<debcheckout> récupère l'information sur le système de gestion de "
+#~ "configuration 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> ; mais ça peut être changé à l'aide "
+#~ "du paramètre I<REP_DESTINATION>."
+
+#~ 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 vim package exposes such an information with a field like "
+#~ "S<Vcs-Svn: svn://svn.debian.org/svn/pkg-vim/trunk/packages/vim>, you can "
+#~ "see it grepping through C<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 vim fournit "
+#~ "les informations en utilisant un champ S<Vcs-Svn: svn://svn.debian.org/"
+#~ "svn/pkg-vim/trunk/packages/vim> que vous pouvez voir dans la sortie de "
+#~ "C<apt-cache showsrc vim>."
+
+#~ msgid ""
+#~ "If you already know the URL of a given repository you can invoke "
+#~ "debcheckout directly on it, but you will probably need to pass the "
+#~ "appropriate B<-t> flag."
+#~ msgstr ""
+#~ "Si vous connaissez déjà l'URL d'un dépôt, vous pouvez appeler directement "
+#~ "debcheckout avec celle-ci, mais vous aurez probablement à utiliser le "
+#~ "paramètre B<-t> approprié."
+
+#~ msgid ""
+#~ "work in authenticated mode; this means that for known repositories "
+#~ "(mainly those hosted on S<http://alioth.debian.org>) URL rewriting is "
+#~ "attempted before checking out, to ensure that the repository can be "
+#~ "committed to. For example, for subversion repositories hosted on alioth "
+#~ "this means that S<svn+ssh://svn.debian.org/...> will be used instead of "
+#~ "S<svn://svn.debian.org/...>"
+#~ msgstr ""
+#~ "Utiliser le mode authentifié ; ceci signifie que pour les dépôts connus "
+#~ "(principalement ceux hébergés sur S<http://alioth.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 subversion hébergés sur Alioth, ceci "
+#~ "signifie que S<svn+ssh://svn.debian.org/...> sera utilisé à la place de "
+#~ "S<svn://svn.debian.org/...>"
+
+#~ msgid "print a detailed help message and exit"
+#~ msgstr "Affiche un message d'aide détaillé et quitte."
+
+#~ msgid ""
+#~ "only print information about the package repository, without checking it "
+#~ "out; the output format is TAB-separated with two fields: repository type, "
+#~ "repository URL"
+#~ msgstr ""
+#~ "Ne faire qu'afficher 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."
+
+#~ msgid ""
+#~ "set the repository type (defaults to \"svn\"), should be one of the "
+#~ "currently supported repository types"
+#~ msgstr ""
+#~ "Définir le type de dépôt (par défaut « svn »), qui doit être un des types "
+#~ "de dépôt gérés."
+
+#~ 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 ""
+#~ "Spécifier 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."
+
+#~ msgid ""
+#~ "Specify that the named file should be extracted from the repository and "
+#~ "placed in the destionation directory. May be used more than once to "
+#~ "extract mutliple files."
+#~ msgstr ""
+#~ "Spécifier 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."
+
+#~ 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)."
+#~ msgstr ""
+#~ "B<debcommit> génère un message de commit basé sur le nouveau texte dans "
+#~ "le fichier debian/changelog, et commite le changement 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 supportés sont B<cvs>, B<git>, B<hg> "
+#~ "(mercurial), B<svk>, B<svn> (subversion), B<baz>, B<bzr>, B<tla> (arch)."
+
+#~ 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 "
+#~ "non-zero, and will depend upon the type of error encountered: if it was "
+#~ "an external error, then it will be the exit code of that program, else it "
+#~ "should 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'un erreur fatale, la "
+#~ "valeur de retour ne sera pas nulle et dépendra du type d'erreur : s'il "
+#~ "s'agit d'une erreur externe, alors la valeur renvoyée est celle du "
+#~ "programme, sinon ce sera 255."
+
+#~ 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"
+#~ 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 courant, mais moins récent que tout futur "
+#~ "paquet Debian officiel. Avec"
+
+#~ msgid ""
+#~ ", 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 ""
+#~ ", un script crochet (« hook ») peut être précisé, alors lancé sur les "
+#~ "paquets binaires dépaquetés juste avant d'être réempaqueté. Si vous "
+#~ "voulez écrire les entrées du fichier changelog avec ce script, utilisez "
+#~ "la commande « <command>dch -a -- <replaceable class=\"parameter\">votre "
+#~ "message</replaceable></command> ». (Alternativement, vous pouvez ne pas "
+#~ "spécifier l'entrée du changelog dans la ligne de commande "
+#~ "<command>&dhcommand;</command>, <command>dch</command> sera alors appelé "
+#~ "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>."
+
+#~ msgid ""
+#~ "Only calculate and display the new version number which would be used; do "
+#~ "not build a new .deb file.  Cannot be used in conjunction with"
+#~ msgstr ""
+#~ "Se contente de calculer et d'afficher le nouveau numéro de version qui "
+#~ "serait utilisé ; ne pas construire de nouveau paquet .deb. Ne peut pas "
+#~ "être utilisé en même temps que"
+
+#~ msgid ""
+#~ "to <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> <manvolnum>1</"
+#~ "manvolnum> </citerefentry>."
+#~ msgstr ""
+#~ "à <citerefentry> <refentrytitle>dpkg-deb</refentrytitle> <manvolnum>1</"
+#~ "manvolnum> </citerefentry>."
+
+#~ msgid ""
+#~ "to <citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</"
+#~ "manvolnum> </citerefentry>"
+#~ msgstr ""
+#~ "à <citerefentry> <refentrytitle>dch</refentrytitle> <manvolnum>1</"
+#~ "manvolnum> </citerefentry>."
+
+#~ msgid "B<debsign> [options] [I<changes-file>|I<dsc-file>|I<commands-file>]"
+#~ msgstr ""
+#~ "B<debsign> [options] [I<fichier-changes>|I<fichier-dsc>|I<fichier-"
+#~ "commands>]"
+
+# NOTE: presque identique à une autre chaîne
+#~ 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 process can be "
+#~ "automated in two ways.  If the files to be signed live on the 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 local machine, "
+#~ "then they may be transferred to the remote machine for signing using "
+#~ "B<debrsign>(1)."
+#~ 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 processus peut être "
+#~ "automatisé de deux façons. Si les fichiers à signer se trouvent sur la "
+#~ "machine 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 locale, ils "
+#~ "peuvent être transférés sur la machine distante pour être signés en "
+#~ "utilisant B<debrsign>(1)."
+
+#~ msgid ""
+#~ "The I<.changes> and I<.dsc> files live on the specified remote host.  In "
+#~ "this case, a I<.changes> file must be explicitly named, with an absolute "
+#~ "directory or one relative to the remote home directory.  SSH will be used "
+#~ "for the copying.  The [I<username>B<@>]I<remotehost>B<:>I<changes> syntax "
+#~ "is permitted as an alternative."
+#~ msgstr ""
+#~ "Les fichiers I<.changes> et I<.dsc> se trouvent sur l'hôte distant "
+#~ "indiqué. Dans ce cas, un fichier I<.changes> doit être explicitement "
+#~ "nommé, avec un nom de répertoire absolu ou relatif au répertoire "
+#~ "personnel distant. SSH sera utilisé pour le transfert. La syntaxe "
+#~ "[I<nom_utilisateur>@]I<hôte_distant>:I<fichier_changes> est également "
+#~ "permise."
+
+#~ msgid ""
+#~ "B<dget> downloads Debian packages.  In the first form, B<dget> fetches "
+#~ "the requested URL.  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 "
+#~ "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 dépaqueté "
+#~ "avec B<dpkg-source>."
+
+#~ msgid ""
+#~ "B<licensecheck> [B<--verbose>] [B<--copyright>] [B<-l|--lines=N>] [B<-i|--"
+#~ "ignore=regex>] [B<-c|--check=regex>] [B<-r|--recursive>] I<list of files "
+#~ "and directories to check>"
+#~ msgstr ""
+#~ "B<licensecheck> [B<--verbose>] [B<--copyright>] [B<-l|--lines=N>] [B<-i|--"
+#~ "ignore=regex>] [B<-c|--check=regex>] [B<-r|--recursive>] I<liste de "
+#~ "fichiers ou répertoires à vérifier>"
+
+#~ msgid ""
+#~ "If using the sendmail (B<--no-mutt>) option, then the email to the BTS "
+#~ "will be sent using the name and address in the environment variable "
+#~ "DEBEMAIL.  If this is not set, then the variable EMAIL 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 sendmail est utilisée (option B<--no-mutt>), le mail "
+#~ "envoyé au BTS utilisera le nom et l'adresse contenus dans la variable "
+#~ "d'environnement DEBEMAIL. Si elle n'existe pas, la variable EMAIL sera "
+#~ "utilisée. L'option B<--from> remplace ces variables d'environnement. Le "
+#~ "programme ne fonctionnera pas s'il est impossible de déterminer une "
+#~ "adresse email."
+
+#~ 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."
+#~ 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."
+
+#~ msgid ""
+#~ "use I<URL> for the query. Supported shorthands are\n"
+#~ " B<debian> or B<qa> http://qa.debian.org/madison.php (the default)\n"
+#~ " B<bpo> http://www.backports.org/cgi-bin/madison.cgi\n"
+#~ " B<ubuntu> http://people.ubuntu.com/~ubuntu-archive/madison.cgi\n"
+#~ "\n"
+#~ msgstr ""
+#~ "utiliser I<URL> pour la requête. Les raccourcis autorisés sont\n"
+#~ " B<debian> ou B<qa> http://qa.debian.org/madison.php (par défaut)\n"
+#~ " B<bpo> http://www.backports.org/cgi-bin/madison.cgi\n"
+#~ " B<ubuntu> http://people.ubuntu.com/~ubuntu-archive/madison.cgi\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "for each rule.  Thus, suitable rules might be `s/^/0./' to prepend `0.' "
+#~ "to the version number and `s/_/./' to change underscores into periods.  "
+#~ "Note that the I<rules> string may not contain commas; this should not be "
+#~ "a problem."
+#~ msgstr ""
+#~ "pour chaque règle. Ainsi, la règle « s/^/0./ » permet d'ajouter « 0. » au "
+#~ "numéro de version et « s/_/./ » pour changer les « underscore » en point. "
+#~ "Notez que la chaîne de caractères I<rules> ne doit pas contenir de "
+#~ "virgule ; ceci ne devrait pas être un problème."
+
+#~ msgid ""
+#~ "Currently supported source code file types are I<.tar.gz>, I<.tar.bz2>, "
+#~ "I<.tar.Z>, I<.tgz>, I<.tar> 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 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 gérés pour le code source sont les archives I<.tar."
+#~ "gz>, I<.tar.bz2>, I<.tar.Z>, I<.tgz>, I<.tar> 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 soit non compressés, soit compressés avec "
+#~ "B<gzip> ou B<bzip2>. Le type de fichier est identifié par le nom du "
+#~ "fichier, qui doit donc utiliser un suffixe standard."
+
+#, fuzzy
+#~ msgid ""
+#~ "If this is set to I<yes>, then it is the same as the B<--diffstat> "
+#~ "command line parameter being used.  B<DEBDIFF_WDIFF_SOURCE_CONTROL> If "
+#~ "this is set to I<yes>, then it is the same as the B<--wdiff-source-"
+#~ "control> command line parameter being used."
+#~ msgstr ""
+#~ "Si elle est positionnée à I<yes>, équivaut à utiliser le paramètre en "
+#~ "ligne de commande B<--force-refresh>. Ceci n'affecte que la commande "
+#~ "cache. La valeur par défaut est I<no>. Veuillez consulter la commande "
+#~ "cache pour plus d'informations."
+
+#~ msgid ""
+#~ "# If the qa.debian.org redirector does not produce any results for\n"
+#~ "# your sourceforge-hosted project, you can use the following format\n"
+#~ "# to check for new versions.  Note that it does not seem to be\n"
+#~ "# possible to download the files via this method.\n"
+#~ "ftp://upload.sourceforge.net/pub/sourceforge/a/au/audacity/ \\e\n"
+#~ "  audacity-src-([\\ed\\e.]+)\\e.tar\\e.(gz|bz2)\n"
+#~ msgstr ""
+#~ "# Si le redirecteur qa.debian.org ne produit aucun résultat pour\n"
+#~ "# votre projet hébergé sur sourceforge, vous pouvez utiliser le\n"
+#~ "# format suivant pour vérifier la disponibilité de nouvelles\n"
+#~ "# versions. Notez qu'il ne semble pas être possible de télécharger\n"
+#~ "# les fichiers avec cette méthode.\n"
+#~ "ftp://upload.sourceforge.net/pub/sourceforge/a/au/audacity/ \\e\n"
+#~ "  audacity-src-([\\ed\\e.]+)\\e.tar\\e.(gz|bz2)\n"
+
+#~ msgid "Forcibly merge a set of bugs together."
+#~ msgstr "Forcer la fusion de plusieurs bogues."
+
+#~ msgid ""
+#~ "Update the changelog timestamp. If the distribution is set to \"UNRELEASED"
+#~ "\", change it to unstable (or another distribution as specified by B<--"
+#~ "distribution>)."
+#~ msgstr ""
+#~ "Met à jour l'étiquette de date. Si la distribution est « UNRELEASED », "
+#~ "elle est changée en unstable (ou une autre distribution indiquée par B<--"
+#~ "distribution>)."
+
+#~ msgid "Specify which files to commit. Commits all files if not used."
+#~ msgstr ""
+#~ "Indique quels fichiers commiter. Par défaut, tous les fichiers sont "
+#~ "commités."
+
+#~ msgid ""
+#~ "B<debuild> supports a number of hooks when running B<dpkg-buildpackage>.  "
+#~ "The available hooks are as follows:"
+#~ msgstr ""
+#~ "B<debuild> gère un grand nombre de crochets (« hooks ») en exécutant "
+#~ "B<dpkg-buildpackage>. Les crochets disponibles sont les suivants :"
+
+#~ msgid ""
+#~ "Should we run B<linda>? If this is set to I<yes>, then B<linda> will be "
+#~ "run."
+#~ msgstr "Si elle est positionnée à I<yes>, alors B<linda> sera exécuté."
+
+#~ msgid ""
+#~ "These are options which should be passed to the invocation of B<linda>.  "
+#~ "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<linda>. 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>."
+
+#~ msgid "B<--keyring>I<keyring>"
+#~ msgstr "B<--keyring>I<trousseau_de_clés>"
+
+#~ msgid "tagpending - Tag all bugs not marked pending as such"
+#~ msgstr ""
+#~ "tagpending - Placer l'étiquette « pending » sur tous les bogues non "
+#~ "marqués en tant que tel"
+
+#~ msgid ""
+#~ "B<tagpending> looks for and parses debian/changelog and debian/control to "
+#~ "find out what bugs the impending release would close, and sends mail "
+#~ "using B<mail(1)> to B<control@bugs.debian.org> tagging the bugs as "
+#~ "pending. It queries the BTS to look up the bugs marked as pending for "
+#~ "that package and excludes those from being re-tagged in the email."
+#~ msgstr ""
+#~ "B<tagpending> recherche et analyse les fichiers debian/changelog et "
+#~ "debian/control afin de trouver quels bogues seront fermés par la version "
+#~ "en cours, puis envoie un courrier à B<control@bugs.debian.org> avec "
+#~ "B<mail>(1) pour placer les étiquettes « pending » sur ces bogues. Il "
+#~ "interroge le BTS (le système de suivi des bogues Debian) pour obtenir les "
+#~ "bogues déjà marqués par une étiquette « pending » du paquet et les exclut "
+#~ "du courrier."
+
+#~ msgid "Don't print actions taken."
+#~ msgstr "N'affiche pas les actions effectuées."
+
+#~ msgid "List every bug checked."
+#~ msgstr "Lister tous les bogues vérifiés."
+
+#~ msgid ""
+#~ "Do not query the BTS for already tagged or not owned bugs, that is, force "
+#~ "all bugs to be tagged, even if they are already tagged or (worse still) "
+#~ "belong to another source package."
+#~ msgstr ""
+#~ "N'interroge pas le BTS pour obtenir la liste des bogues déjà marqués ou "
+#~ "sans propriétaire, mais force l'étiquette « pending » sur tous les "
+#~ "bogues, même ceux qui l'ont déjà ou (pire) appartiennent à un autre "
+#~ "paquet source."
+
+#~ msgid "For each bug tagged as pending, also tag it as confirmed."
+#~ msgstr ""
+#~ "Ajouter l'étiquette « confirmed » pour tous les bogues à marquer comme "
+#~ "« pending »."
+
+#~ msgid ""
+#~ "A final benefit to using a cache is that it will speed download times for "
+#~ "bugs in the cache even when you're online, as it can just compare the "
+#~ "item in the cache with what's on the server, and not re-download it every "
+#~ "time."
+#~ msgstr ""
+#~ "Un dernier avantage de l'utilisation d'un cache est que cela va accélérer "
+#~ "les temps de téléchargement des rapports de bogue, même lorsque vous êtes "
+#~ "en ligne, puisqu'il compare les éléments en cache avec les éléments "
+#~ "présents sur le serveur, et ne les télécharge pas à nouveau chaque fois."
+
+#~ msgid ""
+#~ "This script should give the user a choice of how to edit and mail the "
+#~ "diff.  It should also offer the option of sending to a specified bug "
+#~ "number, possibly offering a menu of such things.  Finally, it should "
+#~ "support the --help and --version options."
+#~ msgstr ""
+#~ "Ce script devrait donner à l'utilisateur le choix de la méthode pour "
+#~ "éditer et envoyer le diff par mail. Il devrait aussi proposer une option "
+#~ "pour spécifier un numéro de bogue, et si possible proposer un menu pour "
+#~ "de telles choses. Enfin, il devrait supporter les options --help et --"
+#~ "version."
diff --git a/scripts/Makefile b/scripts/Makefile
new file mode 100644 (file)
index 0000000..a14479e
--- /dev/null
@@ -0,0 +1,67 @@
+
+include ../Makefile.common
+DESTDIR =
+
+VERSION_FILE = ../version
+VERSION := $(shell cat $(VERSION_FILE))
+
+PL_FILES := $(wildcard *.pl)
+SH_FILES = $(wildcard *.sh)
+LIBS = libvfork.so.0
+CWRAPPERS = debpkg-wrapper
+SCRIPTS = $(patsubst %.pl,%,$(PL_FILES)) $(patsubst %.sh,%,$(SH_FILES))
+COMPL_FILES := $(wildcard *.bash_completion)
+COMPLETION = $(patsubst %.bash_completion,devscripts.%,$(COMPL_FILES))
+
+GEN_MAN1S += devscripts.1
+
+BINDIR = /usr/bin
+LIBDIR = /usr/lib/devscripts
+BIN_LIBDIR = /usr/lib/devscripts
+
+all: $(SCRIPTS) $(GEN_MAN1S) $(LIBS) $(CWRAPPERS) $(COMPLETION)
+
+%: %.sh
+
+%.tmp: %.sh $(VERSION_FILE)
+       sed -e "s/###VERSION###/$(VERSION)/" $<  > $@
+       bash -n $@
+%.tmp: %.pl $(VERSION_FILE)
+       sed -e "s/###VERSION###/$(VERSION)/" $<  > $@
+       perl -I.. -c $@
+%: %.tmp
+       cp $< $@
+       chmod +x $@
+
+%.1: %.pl
+       podchecker $<
+       pod2man --utf8 --center=" " --release="Debian Utilities" $< > $@
+%.1: %.dbk
+       xsltproc --nonet -o $@ \
+         /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/manpages/docbook.xsl $<
+
+devscripts.1: devscripts.1.in
+       cat $+ > $@
+       perl ../debian/genmanpage.pl >> $@
+
+devscripts.%: %.bash_completion
+       cp $< $@
+
+libvfork.o: libvfork.c
+       $(CC) -fPIC -D_REENTRANT $(CFLAGS) -c $<
+libvfork.so.0: libvfork.o
+       $(CC) -shared $< -lc -Wl,-soname -Wl,libvfork.so.0 -o $@
+
+clean:
+       rm -f $(SCRIPTS) $(patsubst %,%.tmp,$(SCRIPTS)) \
+               $(GEN_MAN1S) $(SCRIPT_LIBS) $(CWRAPPERS) \
+               libvfork.o libvfork.so.0 $(COMPLETION)
+
+install: all
+       cp $(SCRIPTS) $(DESTDIR)$(BINDIR)
+       cp $(LIBS) $(DESTDIR)$(LIBDIR)
+       cp $(COMPLETION) $(DESTDIR)/etc/bash_completion.d
+       # Special treatment for debpkg
+       mv $(DESTDIR)$(BINDIR)/debpkg $(DESTDIR)$(PERLMOD_DIR)
+       cp debpkg-wrapper $(DESTDIR)$(BINDIR)/debpkg
+
diff --git a/scripts/annotate-output.1 b/scripts/annotate-output.1
new file mode 100644 (file)
index 0000000..9cb6b72
--- /dev/null
@@ -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 (executable)
index 0000000..35aa1fc
--- /dev/null
@@ -0,0 +1,85 @@
+#! /bin/bash
+# this script was downloaded from:
+# http://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 <http://www.gnu.org/licenses/>.
+
+progname=$(basename $0)
+
+addtime ()
+{
+       while read line; do
+               echo "`date ${FMT}` $1: $line"
+       done
+}
+
+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
+
+addtime O < $OUT &
+addtime E < $ERR &
+
+echo "`date ${FMT}` I: Started $@"
+"$@" > $OUT 2> $ERR ; EXIT=$?
+rm -f $OUT $ERR
+wait
+
+echo "`date ${FMT}` I: Finished with exitcode $EXIT"
+
+exit $EXIT
diff --git a/scripts/archpath.1 b/scripts/archpath.1
new file mode 100644 (file)
index 0000000..d0bd4dd
--- /dev/null
@@ -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 -- 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 (executable)
index 0000000..54e8da3
--- /dev/null
@@ -0,0 +1,44 @@
+#! /bin/bash -e
+
+# 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 <http://www.gnu.org/licenses/>.
+
+# 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.pl b/scripts/bts.pl
new file mode 100755 (executable)
index 0000000..30ffa3b
--- /dev/null
@@ -0,0 +1,4091 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+bts - developers' command line interface to the BTS
+
+=cut
+
+use 5.006_000;
+use strict;
+use File::Basename;
+use File::Copy;
+use File::Path;
+use File::Spec;
+use File::Temp qw/tempfile/;
+use Net::SMTP;
+use Cwd;
+use IO::File;
+use IO::Handle;
+use lib '/usr/share/devscripts';
+use Devscripts::DB_File_Lock;
+use Devscripts::Debbugs;
+use Fcntl qw(O_RDWR O_RDONLY O_CREAT F_SETFD);
+use Getopt::Long;
+use Encode;
+
+use Scalar::Util qw(looks_like_number);
+
+# 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 $smtp_ssl_broken = undef;
+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_smtp_ssl() {
+    return ($smtp_ssl_broken ? 0 : 1) if defined $smtp_ssl_broken;
+    eval {
+       require Net::SMTP::SSL;
+    };
+
+    if ($@) {
+       if ($@ =~ m%^Can\'t locate Net/SMTP/SSL%) {
+           $smtp_ssl_broken="the libnet-smtp-ssl-perl package is not installed";
+       } else {
+           $smtp_ssl_broken="couldn't load Net::SMTP::SSL: $@";
+       }
+    }
+    else { $smtp_ssl_broken=''; }
+    return $smtp_ssl_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:/org/bugs.debian.org/etc/config
+# in the variable @gTags; we copy it verbatim here.
+our (@gTags, @valid_tags, %valid_tags);
+@gTags = ( "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", "etch", "etch-ignore",
+           "lenny", "lenny-ignore", "squeeze", "squeeze-ignore",
+           "wheezy", "wheezy-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
+
+my $cachedir=$ENV{'HOME'}."/.devscripts_cache/bts/";
+my $timestampdb=$cachedir."bts_timestamps.db";
+my $prunestamp=$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> [options] command [args] [#comment] [.|, command [args] [#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. 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 -o, --offline
+
+Make bts use cached bugs for the 'show' and 'bugs' commands, if a cache
+is available for the requested data. See the cache command, below for
+information on setting up a cache.
+
+=item --online, --no-offline
+
+Opposite of --offline; overrides any configuration file directive to work
+offline.
+
+=item -n, --no-action
+
+Do not send emails but print them to standard output.
+
+=item --cache, --no-cache
+
+Should we attempt to cache new versions of BTS pages when
+performing show/bugs commands?  Default is to cache.
+
+=item --cache-mode={min|mbox|full}
+
+When running a B<bts cache> command, should we only mirror the basic
+bug (min), or should we also mirror the mbox version (mbox), or should
+we mirror the whole thing, including the mbox and the boring
+attachments to the BTS bug pages and the acknowledgement emails (full)?
+Default is min.
+
+=item --cache-delay=seconds
+
+Time in seconds to delay between each download, to avoid hammering the BTS
+web server. Default is 5 seconds.
+
+=item --mbox
+
+Open a mail reader to read the mbox corresponding to a given bug number
+for show and bugs commands.
+
+=item --mailreader=READER
+
+Specify the command to read the mbox.  Must contain a "%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 'mutt -f %s'.  (Also, %% will be substituted by a
+single % if this is needed.)
+
+=item --cc-addr=CC_EMAIL_ADDRESS
+
+Send carbon copies to a list of users. CC_EMAIL_ADDRESS should be a 
+comma-separated list of emails.
+
+=item --use-default-cc
+
+Add the addresses specified in the configuation file option
+BTS_DEFAULT_CC to the list specified using --cc-addr.  This is the
+default.
+
+=item --no-use-default-cc
+
+Do not add addresses specified in BTS_DEFAULT_CC to the carbon copy
+list.
+
+=item --sendmail=SENDMAILCMD
+
+Specify the sendmail command.  The command will be split on white
+space and will not be passed to a shell.  Default is
+'/usr/sbin/sendmail'.  The -t option will be automatically added if
+the command is /usr/sbin/sendmail or /usr/sbin/exim*.  For other
+mailers, if they require a -t option, this must be included in the
+SENDMAILCMD, for example: --sendmail="/usr/sbin/mymailer -t"
+
+=item --mutt
+
+Use mutt for sending of mails. Default is not to use mutt, except for some
+commands.
+
+Note that one of $DEBEMAIL or $EMAIL must be set in the environment in order
+to use mutt to send emails.
+
+=item --no-mutt
+
+Don't use mutt for sending of mails.
+
+=item --smtp-host=SMTPHOST
+
+Specify an SMTP host.  If given, B<bts> will send mail by talking directly to
+this SMTP host rather than by invoking a 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.
+
+Note that one of $DEBEMAIL or $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
+--cc-addr or 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 reassign command may, when either interactive
+or force-interactive mode is enabled, lead to the automatic addition of a Cc
+to $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 --smtp-username=USERNAME, --smtp-password=PASSWORD
+
+Specify the credentials to use when connecting to the SMTP server
+specified by --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 --smtp-helo=HELO
+
+Specify the name to use in the 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 HELO which either 
+does not resolve or does not appear to belong to the host using it.
+
+=item --bts-server
+
+Use a debbugs server other than bugs.debian.org.
+
+=item -f, --force-refresh
+
+Download a bug report again, even if it does not appear to have
+changed since the last cache command.  Useful if a --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 --no-force-refresh
+
+Suppress any configuration file --force-refresh option.
+
+=item --only-new
+
+Download only new bugs when caching. Do not check for updates in
+bugs we already have.
+
+=item --include-resolved
+
+When caching bug reports, include those that are marked as resolved.  This
+is the default behaviour.
+
+=item --no-include-resolved
+
+Reverse the behaviour of the previous option.  That is, do not cache bugs
+that are marked as resolved.
+
+=item --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 --ack
+
+Do not suppress acknowledgement mails.  This is the default behaviour.
+
+=item -i, --interactive
+
+Before sending an e-mail to the control bot, display the content and
+allow it to be edited, or the sending cancelled.
+
+=item --force-interactive
+
+Similar to --interactive, with the exception that an editor is spawned 
+before prompting for confirmation of the message to be sent.
+
+=item --no-interactive
+
+Send control e-mails without confirmation.  This is the default behaviour.
+
+=item -q, --quiet
+
+When running 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 --no-conf, --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 $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=0;
+my $forceinteractive=0;
+my $ccemail="";
+my $toolname="";
+my $btsserver='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' => 'bugs.debian.org',
+                      );
+    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'} =~ /^(min|mbox|full)$/
+       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'} =~ /^(yes|no|force)$/
+       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_\-\+\.\/]*$/) {
+           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;
+
+    $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'} eq 'no' ? 0 : 1;
+    $forceinteractive = $config_vars{'BTS_INTERACTIVE'} eq 'force' ? 1 : 0;
+    $ccemail = $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 $mboxmode = 0;
+my $quiet=0;
+my $opt_ccemail = "";
+my $use_default_cc = 1;
+my $ccsecurity="";
+
+Getopt::Long::Configure('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_ccemail,
+          "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" => \$interactive,
+          "no-interactive" => sub { $interactive = 0; $forceinteractive = 0; },
+          "force-interactive" => sub { $interactive = 1; $forceinteractive = 1; },
+          "use-default-cc!" => \$use_default_cc,
+          "toolname=s" => \$toolname,
+          "bts-server=s" => \$btsserver,
+          "mutt" => \$opt_mutt,
+          )
+    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) {
+    $ccemail = "";
+}
+
+if ($opt_ccemail) {
+    $ccemail .= ", " if $ccemail;
+    $ccemail .= $opt_ccemail;
+}
+
+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_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_\-\+\.\/]*$/) {
+           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;
+       }
+    }
+}
+
+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 =~ /^(min|mbox|full)$/) {
+       $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/';
+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<http://www.debian.org/Bugs/server-control>
+
+=over 4
+
+=item show [options] [<bug number> | <package> | <maintainer> | : ] [opt=val ...]
+
+=item show [options] [src:<package> | from:<submitter>] [opt=val ...]
+
+=item show [options] [tag:<tag> | usertag:<tag> ] [opt=val ...]
+
+=item show [release-critical | release-critical/... | RC]
+
+This is a synonym for bts bugs.
+
+=cut
+
+sub bts_show {
+    goto &bts_bugs;
+}
+
+=item bugs [options] [<bug number> | <package> | <maintainer> | : ] [opt=val ..]
+
+=item bugs [options] [src:<package> | from:<submitter>] [opt=val ..]
+
+=item bugs [options] [tag:<tag> | usertag:<tag> ] [opt=val ..]
+
+=item bugs [release-critical | release-critical/... | RC]
+
+Display the page listing the requested bugs in a web browser using
+sensible-browser(1).
+
+Options may be specified after the "bugs" command in addition to or
+instead of options at the start of the command line: recognised
+options at this point are: -o/--offline/--online, --mbox, --mailreader
+and --[no-]cache.  These are described earlier in this manpage.  If
+either the -o or --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, bts bugs will display your bugs, assuming
+that either DEBEMAIL or EMAIL (examined in that order) is set to the
+appropriate email address.
+
+=item <bug number>
+
+Display bug number <bug number>.
+
+=item <package>
+
+Display the bugs for the package <package>.
+
+=item src:<package>
+
+Display the bugs for the source package <package>.
+
+=item <maintainer>
+
+Display the bugs for the maintainer email address <maintainer>.
+
+=item from:<submitter>
+
+Display the bugs for the submitter email address <submitter>.
+
+=item tag:<tag>
+
+Display the bugs which are tagged with <tag>.
+
+=item usertag:<tag>
+
+Display the bugs which are tagged with usertag <tag>.  See the BTS
+documentation for more information on usertags.  This will require the
+use of a users=<email> option.
+
+=item :
+
+Details of the bug tracking system itself, along with a bug-request
+page with more options than this script, can be found on
+http://bugs.debian.org/.  This page itself will be opened if the
+command 'bts bugs :' is used.
+
+=item release-critical, RC
+
+Display the front page of the release-critical pages on the BTS.  This
+is a synonym for http://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, --no-cache has not been used,
+and BTS_CACHE has not been set to "no"), then any page requested by
+"bts show" will automatically be cached, and be available offline
+thereafter.  Pages which are automatically cached in this way will be
+deleted on subsequent "bts show|bugs|cache" invocations if they have
+not been accessed in 30 days.  Warning: on a filesystem mounted with
+the "noatime" option, running "bts show|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
+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 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 "%s"; if
+it does, the URL to be viewed is substituted there. If a command part
+does not contain %s, the browser is to be launched as if the URL had
+been supplied as its first argument. The string %% 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 .profile across
+multiple systems. We need %s because some popular browsers have
+remote-invocation syntax that requires it. Unless %% reduces to %, it
+won't be possible to have a literal %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 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.  One of "open", "done", or "forwarded".
+
+=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
+
+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 status [<bug> | file:<file> | fields:<field,field,...> | verbose] ...
+
+Uses the SOAP interface to output status information for the given bugs
+(or as read from the listed files -- use '-' 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 clone <bug> <new ID> [<new ID> ...]
+
+The clone control command allows you to duplicate a 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 close <bug> <version>
+#
+# Close a 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 version of the package closed the 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 done <bug> <version>
+
+Mark a bug as Done. This forces interactive mode since done messages should
+include an explanation why the bug is being closed.  You should specify which
+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) {
+       $forceinteractive = 1;
+    }
+
+    # Include the submitter in the email, so we act like a mail to -done
+    $ccsubmitters{"$bug-submitter"} = 1;
+}
+
+=item reopen <bug> [<submitter>]
+
+Reopen a bug, with optional 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 archive <bug>
+
+Archive a bug that has previously been archived but is currently not.
+The bug must fulfil 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 unarchive <bug>
+
+Unarchive a 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 retitle <bug> <title>
+
+Change the title of the 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 summary <bug> <messagenum>
+
+Select a message number that should be used as
+the summary of a bug.
+
+=cut
+
+sub bts_summary {
+    my $bug=checkbug(shift) or die "bts summary: change summary of what bug?\n";
+    my $msg=shift || '';
+    if (! length $msg) {
+       die "bts summary: set summary of $bug to what message number?\n";
+    }
+    mailbts("summary $bug $msg", "summary $bug $msg");
+}
+
+=item submitter <bug> [<bug> ...] <submitter-email>
+
+Change the submitter address of a bug or a number of bugs, with `!' 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=pop;
+    if ($submitter !~ /\@/ and $submitter ne '!') {
+       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 reassign <bug> [<bug> ...] <package> [<version>]
+
+Reassign a bug or a number of bugs to a different package.
+The version field is optional; see the explanation at
+L<http://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) {
+       $ccpackages{$packagename} = 1;
+    }
+}
+
+=item found <bug> [<version>]
+
+Indicate that a bug was found to exist in a particular package version.
+
+=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 notfound <bug> <version>
+
+Remove the record that 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 fixed <bug> <version>
+
+Indicate that a bug was fixed in a particular package version, without
+affecting the 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 notfixed <bug> <version>
+
+Remove the record that a bug was fixed in the given version of the
+package to which it is assigned.
+
+This is equivalent to the sequence of commands "found <bug> <version>",
+"notfound <bug> <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 block <bug> by|with <bug> [<bug> ...]
+
+Note that a 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 unblock <bug> by|with <bug> [<bug> ...]
+
+Note that a 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 merge <bug> <bug> [<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 forcemerge <bug> <bug> [<bug> ...]
+
+Forcibly merge a set of bugs together. The first bug listed is the master bug, 
+and its settings (those which must be equal in a normal 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 unmerge <bug>
+
+Unmerge a 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 tag <bug> [+|-|=] tag [tag ..]
+
+=item tags <bug> [+|-|=] tag [tag ..]
+
+Set or unset a tag on a bug. The tag may either be the exact tag name
+or it may be abbreviated to any unique tag substring. (So using
+"fixed" will set the tag "fixed", not "fixed-upstream", for example,
+but "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 '=' flag is used, where the command
+
+  bts tags <bug> =
+
+will remove all tags from the specified bug.
+
+As a special case, the unofficial "gift" tag name is supported in
+addition to official tag names. "gift" is used as a shorthand for the
+gift usertag; see L<http://wiki.debian.org/qa.debian.org/GiftTag>.
+Adding/removing the gift tag will add/remove the gift usertag,
+belonging to the "debian-qa@lists.debian.org" user.
+
+=cut
+
+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 = '+';
+           }
+           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 affects <bug> [+|-|=] <package> [<package> ..]
+
+Indicates that a bug affects a package other than that against which it is filed, causing
+the bug to be listed by default in the package list of the other package.  This should 
+generally be used where the bug is severe enough to cause multiple reports from users to be 
+assigned to the wrong package. 
+
+=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 (! @_) {
+       die "bts affects: mark which package as affected?\n";
+    }
+
+    foreach my $package (@_) {
+       $command .= " $package";
+    }
+
+    mailbts("affects $bug", $command);
+}
+
+=item user <email>
+
+Specify a user email address before using the usertags command.
+
+=cut
+
+sub bts_user {
+    my $email=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 usertag <bug> [+|-|=] tag [tag ..]
+
+=item usertags <bug> [+|-|=] tag [tag ..]
+
+Set or unset a user tag on a bug. The 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 (usertag and usertags) are identical.
+At least one tag must be specified, unless the '=' flag is used, where the
+command
+
+  bts usertags <bug> =
+
+will remove all user tags from the specified 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 $base_command="usertags $bug";
+    my $commands = [];
+
+    my $curop;
+    foreach my $tag (@_) {
+       if ($tag =~ s/^([-+=])//) {
+           my $op = $1;
+           if ($op eq '=') {
+               $curop = '=';
+               $commands = [];
+           }
+           elsif (!$curop || $curop ne $op) {
+               $curop = $op;
+           }
+           next unless $tag;
+       }
+       if (!$curop) {
+           $curop = '+';
+       }
+       if (!@$commands || $curop ne $commands->[-1]{op}) {
+           push(@$commands, { op => $curop, tags => [] });
+       }
+       if ($tag !~ m/^[-[:alnum:]@.+]+$/i) {
+           die "bts usertag: \"$tag\" contains characters other than " .
+               "alpha-numerics, '\@', '.', '+', and '-'.\n";
+       }
+       push(@{$commands->[-1]{tags}}, $tag);
+    }
+
+    my $command = '';
+    foreach my $cmd (@$commands) {
+       if ($cmd->{op} ne '=' && !@{$cmd->{tags}}) {
+           die "bts usertags: set what tag?\n";
+       }
+       $command .= " $cmd->{op} " . join(' ', @{$cmd->{tags}});
+    }
+    if (!$command && $curop eq '=') {
+       $command = " $curop";
+    }
+
+    if ($command) {
+       mailbts("usertagging $bug", $base_command . $command);
+    }
+}
+
+=item claim <bug> [<claim>]
+
+Record that you have claimed a bug (e.g. for a bug squashing party).
+<claim> should be a unique token allowing the bugs you have claimed
+to be identified; an e-mail address is often used.
+
+If no claim is specified, the environment variable DEBEMAIL
+or 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=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 unclaim <bug> [<claim>]
+
+Remove the record that you have claimed a bug.
+
+If no claim is specified, the environment variable DEBEMAIL
+or 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=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 severity <bug> <severity>
+
+Change the severity of a bug. Available severities are: wishlist, minor, normal,
+important, serious, grave, 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 forwarded <bug> <address>
+
+Mark the bug as forwarded to the given 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 notforwarded <bug>
+
+Mark a 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 package [<package> ...]
+
+The following commands will only apply to bugs against the listed
+packages; 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 limit [<key>[:<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 C<value>s are
+listed, the limits for that C<key> are turned off again.  If no C<key>s are
+specified, all limits are reset.
+
+=over 8
+
+=item submitter
+
+E-mail address of the submitter.
+
+=item date
+
+Date the bug was submitted.
+
+=item subject
+
+Subject of the bug.
+
+=item msgid
+
+Message-id of the initial bug report.
+
+=item package
+
+Binary package name.
+
+=item source
+
+Source package name.
+
+=item tag
+
+Tags applied to the bug.
+
+=item severity
+
+Bug severity.
+
+=item owner
+
+Bug's owner.
+
+=item affects
+
+Bugs affecting this package.
+
+=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 limit the set of bugs affected by the subsequent control
+commands to those submitted by jrandomdeveloper@example.com and tagged
+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 wishlist or 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 owner <bug> <owner-email>
+
+Change the "owner" address of a bug, with `!' meaning
+`use the address on the current email as the new owner address'.
+
+The owner of a bug accepts responsibility for dealing with it. Note that 
+the "owner" of a bug does not automatically receive all of the email 
+corresponding to it; use "subscribe" to achieve that.
+
+=cut
+
+sub bts_owner {
+    my $bug=checkbug(shift) or die "bts owner: change owner of what bug?\n";
+    my $owner=shift or die "bts owner: change owner to what?\n";
+    opts_done(@_);
+    mailbts("owner $bug", "owner $bug $owner");
+}
+
+=item noowner <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 subscribe <bug> <email>
+
+Subscribe the given email address to the specified bug report.  If no email
+address is specified, the environment variable DEBEMAIL or EMAIL (in that
+order) is used.  If those are not set, or `!' 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=lc(shift);
+    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 unsubscribe <bug> <email>
+
+Unsubscribe the given email address from the specified bug report.  As with
+subscribe above, if no email address is specified, the environment variables
+DEBEMAIL or EMAIL (in that order) is used.  If those are not set, or `!' 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 subscribe command to, well, subscribe.
+
+=cut
+
+sub bts_unsubscribe {
+    my $bug=checkbug(shift) or die "bts unsubscribe: unsubscribe from what bug?\n";
+    my $email=lc(shift);
+    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 reportspam <bug> ...
+
+The reportspam command allows you to report a 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 spamreport <bug> ...
+
+spamreport is a synonym for reportspam.
+
+=cut
+
+sub bts_spamreport {
+    goto &bts_reportspam;
+}
+
+=item cache [options] [<maint email> | <pkg> | src:<pkg> | from:<submitter>]
+
+=item cache [options] [release-critical | release-critical/... | 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 DEBEMAIL environment variable (or the EMAIL environment
+variable if 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 ~/.devscripts_cache/bts/
+
+You can use the cached bugs with the -o switch. For example:
+
+  bts -o bugs
+  bts -o show 12345
+
+Also, bts will update the files in it in a piecemeal fashion as it
+downloads information from the BTS using the '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 cache command.  The first is
+the setting of --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: min (the
+minimum), mbox (download the minimum plus the mbox version of the bug
+report) or full (the whole works).  The second is --force-refresh or
+-f, which forces the download, even if the cached bug report is
+up-to-date.  The --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
+"cache" command as well as at the start of the command line.
+
+Finally, -q or --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 =~ /^(min|mbox|full)$/) {
+           ($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) {
+       if (! -d dirname($cachedir)) {
+           mkdir(dirname($cachedir))
+               or die "$progname: couldn't mkdir ".dirname($cachedir).": $!\n";
+       }
+       mkdir($cachedir)
+           or die "$progname: couldn't mkdir $cachedir: $!\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 cleancache <package> | src:<package> | <maintainer>
+
+=item cleancache from:<submitter> | tag:<tag> | usertag:<tag> | <number> | ALL
+
+Clean the cache for the specified package, maintainer, etc., as
+described above for the "bugs" command, or clean the entire cache if
+"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 DEBEMAIL or 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;
+}
+
+# Add any new commands here.
+
+=item 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 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.
+   --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 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/;
+       print "\t$1\n" if /^=item\s([^\-].*)/ and ! $insublist;
+       last if defined $1 and $1 eq 'help';
+    }
+}
+
+# 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;
+}
+
+# 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 =~ /([^,<>"\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);
+    my $fromaddress = $fromaddresses[0];
+    # Message-ID algorithm from git-send-email
+    my $msgid = sprintf("%s-%s", time(), int(rand(4200)))."-bts-$fromaddress";
+    my $date = `date -R`;
+    chomp $date;
+
+    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 $requestack==0;
+    $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';
+
+           if (have_smtp_ssl) {
+               $smtp = Net::SMTP::SSL->new($host, Port => $port,
+                   Hello => $smtphelo) or die "$progname: failed to open SMTPS connection to $smtphost\n($@)\n";
+           } else {
+               die "$progname: Unable to establish SMTPS connection: $smtp_ssl_broken\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) {
+           $smtppass = getpass() if not $smtppass;
+           $smtp->auth($smtpuser, $smtppass)
+               or die "$progname: failed to authenticate to $smtphost\n($@)\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) {
+       $ccs .= join("\@$packagesserver, ", sort (keys %ccpackages))
+           . "\@$packagesserver";
+    }
+    if (keys %ccsubmitters && $btsserver) {
+       $ccs .= join("\@$btsserver, ", sort (keys %ccsubmitters))
+           . "\@$btsserver";
+    }
+    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 ($forceinteractive) {
+       $ccemail .= ", " if length $ccemail;
+       $ccemail .= generate_packages_cc();
+    }
+    if ($ccsecurity) {
+       my $comma = "";
+       if ($ccemail) {
+           $comma = ", ";
+       }
+       $ccemail = "$ccemail$comma$ccsecurity";
+    }
+    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 $requestack==0;
+       $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 $forceinteractive;
+    my $setHeader = 0;
+    if ($interactive) {
+       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 $forceinteractive).
+               if (!$forceinteractive && !$setHeader) {
+                   $setHeader = 1;
+                   my $ccs = generate_packages_cc();
+                   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 ($forceinteractive) {
+       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 =?utf-8?B?xIxlcGFz?= (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, 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);
+           }
+           mkpath(dirname $bug2filename{$msg});
+           open OUT_CACHE, ">$bug2filename{$msg}"
+               or die "$progname: open cache $bug2filename{$msg}\n";
+           print OUT_CACHE $data;
+           close OUT_CACHE;
+       } else {
+           warn "$progname: failed to download $ref, 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.\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 {
+       die "$progname: failed to download mbox.\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="(http://$btsserver/cgi-bin/bugreport\.cgi.*bug=(\d+)[^\"]*)">(.+?)</a>%<a href="$2.html">$3</a> (<a href="$1">online</a>)%i;
+           s%<a href="(http://$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="(http://$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 $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+$/ ? $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 $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:/usertag=/;
+       $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([^\?]*)\?([^\"]*);bug=(\d+)">.*?\(([^,]*), .*?\)\]%) {
+       # this looks like an attachment; $4 should give the MIME-type
+       my $urlfilename = $1;
+       my $ref = $2;
+       my $bug = $3;
+       my $mimetype = $4;
+       $ref =~ s/&(?:amp;)?/;/g;  # normalise all hrefs
+
+       return undef unless $ref =~ /msg=(\d+);(filename=[^;]*;)?att=(\d+)/;
+       $msg = "$1-$3";
+       $urlfilename ||= "$2" if defined $2;
+       $urlfilename ||= "";
+
+       my $fileext = '';
+       if ($urlfilename =~ m%^/%) {
+           $filename = basename($urlfilename);
+       } elsif ($urlfilename =~ m%^filename=([^;]*?);%) {
+           $urlfilename = $1;
+           $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([^\?]*)\?([^"]*);?bug=(\d+)(.*?)".*?>%) {
+       my $urlfilename = $1;
+       my $ref = $2;
+       my $bug = $3;
+       $ref .= $4 if defined $4;
+       $ref =~ s/&(?:amp;)?/;/g;  # normalise all hrefs
+       $ref =~ s/;archive=(yes|no)\b//;
+       $ref =~ s/%3D/=/g;
+
+       if ($ref =~ /msg=(\d+);$/) {
+           $msg = $1;
+           $filename = "$bug/$1.html";
+       }
+       elsif ($ref =~ /msg=(\d+);mbox=yes;$/) {
+           $msg = "$1-mbox";
+           $filename = "$bug/$1.mbox";
+       }
+       elsif ($ref =~ /^mbox=yes;$/) {
+           $msg = 'rawmbox';
+           $filename = "$bug.raw.mbox";
+       }
+       elsif ($ref =~ /mboxstat(us)?=yes/) {
+           $msg = 'statusmbox';
+           $filename = "$bug.status.mbox";
+       }
+       elsif ($ref =~ /mboxmaint=yes/) {
+           $msg = 'mbox';
+           $filename = "$bug.mbox";
+       }
+       elsif ($ref eq '') {
+           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=\"(?:/cgi-bin/)?version\.cgi([^>]+><img[^>]* src=\"(?:/cgi-bin/)?version\.cgi)?\?([^\"]+)\">%i) {
+       my $refs = $2;
+       $refs = $1 if not defined $refs;
+
+       # Remove package= and make sure the package name is at the
+       # start of the filename
+       $refs =~ s/(.*?)package=(.*?)(;.*?|)$/$2;$1$3/;
+       # Package versions
+       $refs =~ s/;found=/.f./g;
+       $refs =~ s/;fixed=/.fx./g;
+       # Replace encoded "/" and "," characters with "."
+       $refs =~ s/%2[FC]/./g;
+       # Remove encoded spaces
+       $refs =~ s/\+//g;
+       # Is this a "collapsed" graph?
+       $refs =~ s/;collapse=1(.*)/$1.co/;
+       # Remove any other parameters
+       $refs =~ s/(^|;)(\w+)=\d+//g;
+       # and tidy up any remaining separators
+       $refs =~ s/;//g;
+
+       $msg = 'versions';
+       $filename = "$refs.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 (mkdir(dirname($cachedir))) {
+                   warn "$progname: couldn't mkdir ".dirname($cachedir).": $!\n";
+                   goto LIVE;
+               }
+           }
+           unless (mkdir($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 {
+    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!\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;
+    system("sensible-editor $filename");
+    open(OUT_MAIL, "<$filename")
+       or die "$progname: reading from temporary file: $!\n";
+    $message = "";
+    while(<OUT_MAIL>) {
+       $message .= $_;
+    }
+    close OUT_MAIL;
+    unlink($filename);
+    return $message;
+}
+
+=back
+
+=head1 ENVIRONMENT VARIABLES
+
+=over 4
+
+=item 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 DEBFULLNAME
+
+If DEBEMAIL is set, DEBFULLNAME is examined to determine the full name
+to use; if this is not set, B<bts> attempts to determine a name from
+your passwd entry.
+
+=item BROWSER
+
+If set, it specifies the browser to use for the 'show' and '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 BTS_OFFLINE
+
+If this is set to I<yes>, then it is the same as the --offline command
+line parameter being used.  Only has an effect on the show and bugs
+commands.  The default is I<no>.  See the description of the show
+command above for more information.
+
+=item BTS_CACHE
+
+If this is set to I<no>, then it is the same as the --no-cache command
+line parameter being used.  Only has an effect on the show and bug
+commands.  The default is I<yes>.  Again, see the show command above
+for more information.
+
+=item BTS_CACHE_MODE={min,mbox,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
+I<min>, and it has the same meaning as the --cache-mode command line
+parameter.  Only has an effect on the cache.  See the cache command for more
+information.
+
+=item BTS_FORCE_REFRESH
+
+If this is set to I<yes>, then it is the same as the --force-refresh
+command line parameter being used.  Only has an effect on the cache
+command.  The default is I<no>.  See the cache command for more
+information.
+
+=item BTS_MAIL_READER
+
+If this is set, specifies a mail reader to use instead of mutt.  Same as
+the --mailreader command line option.
+
+=item BTS_SENDMAIL_COMMAND
+
+If this is set, specifies a sendmail command to use instead of
+/usr/sbin/sendmail.  Same as the --sendmail command line option.
+
+=item BTS_ONLY_NEW
+
+Download only new bugs when caching. Do not check for updates in
+bugs we already have.  The default is I<no>.  Same as the --only-new
+command line option.
+
+=item BTS_SMTP_HOST
+
+If this is set, specifies an SMTP host to use for sending mail rather
+than using the sendmail command.  Same as the --smtp-host command line
+option.
+
+Note that this option takes priority over BTS_SENDMAIL_COMMAND if both are
+set, unless the --sendmail option is used.
+
+=item BTS_SMTP_AUTH_USERNAME, BTS_SMTP_AUTH_PASSWORD
+
+If these options are set, then it is the same as the --smtp-username and
+--smtp-password options being used.
+
+=item BTS_SMTP_HELO
+
+Same as the --smtp-helo command line option.
+
+=item BTS_INCLUDE_RESOLVED
+
+If this is set to I<no>, then it is the same as the --no-include-resolved
+command line parameter being used.  Only has an effect on the cache
+command.  The default is I<yes>.  See the cache command for more
+information.
+
+=item BTS_SUPPRESS_ACKS
+
+If this is set to I<yes>, then it is the same as the --no-ack command 
+line parameter being used.  The default is I<no>.
+
+=item BTS_INTERACTIVE
+
+If this is set to I<yes> or I<force>, then it is the same as the 
+--interactive or --force-interactive command line parameter being used.  
+The default is I<no>.
+
+=item 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 BTS_SERVER
+
+Specify the name of a debbugs server which should be used instead of
+bugs.debian.org.
+
+=back
+
+=head1 SEE ALSO
+
+Please see L<http://www.debian.org/Bugs/server-control> for
+more details on how to control the BTS using emails and
+L<http://www.debian.org/Bugs/> for more information about the BTS.
+
+reportbug(1), querybts(1)
+
+=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 (executable)
index 0000000..bdff6dc
--- /dev/null
@@ -0,0 +1,351 @@
+#!/usr/bin/perl
+#   Copyright (C) Patrick Schoenfeld
+#
+# 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.
+
+=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<-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 File::Find;
+use Getopt::Long;
+use Pod::Usage;
+use Data::Dumper;
+my $progname = basename($0);
+my $version = '1.0';
+my $dctrl = "/usr/bin/grep-dctrl";
+my $sources_path = "/var/lib/apt/lists/";
+my $release_pattern = '(.*_dists_(sid|unstable))_Release$';
+my %seen_origins;
+my @source_files;
+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;
+
+if (!(-x $dctrl)) {
+       die "$progname: Fatal error. grep-dctrl is not available.\nPlease install the 'dctrl-tools' package.\n";
+}
+
+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 ommitted)
+   -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)
+
+EOT
+version;
+}
+
+# Sub to test if a given section shall be included in the result
+sub test_for_valid_component {
+    my $filebase = shift;
+
+    if ($opt_mainonly and $filebase =~ /(contrib|non-free)/) {
+       return -1;
+    }
+    foreach my $component (@opt_exclude_components) {
+       if ($filebase =~ /$component/) {
+           return -1;
+       }
+    }
+
+    if (! -e "$sources_path/$filebase") {
+       print STDERR "Warning: Ignoring missing sources file $filebase. (Missing component in sources.list?)\n";
+       return -1;
+    }
+
+    print STDERR "DEBUG: Component ($_) may not be excluded.\n" if ($opt_debug);
+    return 0;
+}
+
+# Scan Release files and add appropriate Sources files
+sub readrelease {
+    my ($file, $base) = @_;
+    open(RELEASE, '<', "$sources_path/$file");
+    while (<RELEASE>) {
+       if (/^Origin:\s*(.+)\s*$/) {
+           my $origin = $1;
+           # skip undesired (non-specified or already seen) origins
+           if (($opt_origin && $origin !~ /^\s*\Q$opt_origin\E\s*$/)
+               || $seen_origins{$origin}) {
+               last;
+           }
+           $seen_origins{$origin} = 1;
+       }
+       elsif (/^(?:MD5|SHA)\w+:/) {
+           # from a list of checksums, grab names of Sources files
+           while (<RELEASE>) {
+               last unless /^ /;
+               if (/([^ ]+\/Sources)$/) {
+                   addsources($base, $1);
+               }
+           }
+           last;
+       }
+    }
+    close(RELEASE);
+}
+
+# Add a *_Sources file if test_for_valid_component likes it
+sub addsources {
+    my ($base, $filename) = @_;
+    # main/source/Sources
+    $filename =~ s/\//_/g;
+    # -> ftp.debian.org_..._main_source_Sources
+    $filename = "${base}_${filename}";
+    if (test_for_valid_component($filename) == 0) {
+       push(@source_files, $filename);
+       print STDERR "DEBUG: Added source file: $_\n" if ($opt_debug);
+    }
+}
+
+sub findreversebuilddeps {
+       my ($package, $source_file) = @_;
+       my %packages;
+       my $depending_package;
+       my $count=0;
+       my $maintainer_info='';
+
+       open(PACKAGES, "$dctrl -F Build-Depends,Build-Depends-Indep $package -s Package,Build-Depends,Build-Depends-Indep,Maintainer $source_file|");
+
+       while(<PACKAGES>) {
+               chomp;
+               print STDERR "$_\n" if ($opt_debug);
+               if (/Package: (.*)$/) {
+                       $depending_package = $1;
+                       $packages{$depending_package}->{'Build-Depends'} = 0;
+               }
+               elsif (/Maintainer: (.*)$/) {
+                       if ($depending_package) {
+                               $packages{$depending_package}->{'Maintainer'} = $1;
+                       }
+               }
+               elsif (/Build-Depends: (.*)$/ or /Build-Depends-Indep: (.*)$/) {
+                       if ($depending_package) {
+                               print STDERR "$1\n" if ($opt_debug);
+                               if ($1 =~ /^(.*\s)?\Q$package\E([\s,]|$)/) {
+                                       $packages{$depending_package}->{'Build-Depends'} = 1;
+                               }
+                       }
+
+               }
+       }
+
+       while($depending_package = each(%packages)) {
+               if ($packages{$depending_package}->{'Build-Depends'} != 1) {
+                       print STDERR "Ignoring package $depending_package because its not really build depending on $package.\n" if ($opt_debug);
+                       next;
+               }
+               if ($opt_maintainer) {
+                       $maintainer_info = "($packages{$depending_package}->{'Maintainer'})";
+               }
+
+               $count+=1;
+               print "$depending_package $maintainer_info \n";
+
+       }
+
+       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); }
+
+
+Getopt::Long::Configure('bundling');
+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,
+       "d|debug" => \$opt_debug,
+       "h|help" => sub { usage; },
+       "v|version" => sub { version; }
+);
+
+my $package = shift;
+
+if (!$package) {
+       die "$progname: missing argument. expecting packagename\n";
+}
+
+print STDERR "DEBUG: Package => $package\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;
+}
+
+if ($opt_distribution) {
+       print STDERR "DEBUG: Setting distribution to $opt_distribution\n" if ($opt_debug);
+       $release_pattern = '(.*_dists_' . $opt_distribution . ')_Release$';
+}
+
+# Find sources files
+find(sub { readrelease($_, $1) if /$release_pattern/ }, $sources_path);
+
+if (!@source_files) {
+       die "$progname: unable to find sources files.\nDid you forget to run apt-get update (or add --update to this command)?";
+}
+
+foreach my $source_file (@source_files) {
+       if ($source_file =~ /main/) {
+               print "Reverse Build-depends in main:\n";
+               print "------------------------------\n\n";
+               findreversebuilddeps($package, "$sources_path/$source_file");
+       }
+
+       if ($source_file =~ /contrib/) {
+               print "Reverse Build-depends in contrib:\n";
+               print "---------------------------------\n\n";
+               findreversebuilddeps($package, "$sources_path/$source_file");
+       }
+
+       if ($source_file =~ /non-free/) {
+               print "Reverse Build-depends in non-free:\n";
+               print "----------------------------------\n\n";
+               findreversebuilddeps($package, "$sources_path/$source_file");
+       }
+}
+
+=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 (file)
index 0000000..b725c1a
--- /dev/null
@@ -0,0 +1,50 @@
+have chdist &&
+_chdist ()
+{
+  local cur=$2 prev=$3
+  local options='--help -h --data-dir -d --arch -a'
+  local commands='create apt-get apt-cache apt-rdepends
+           src2bin bin2src
+          compare-packages compare-bin-packages
+          compare-versions compare-bin-versions
+          grep-dctrl-packages grep-dctrl-sources
+          list'
+  local archs='i386 amd64 powerpc m68k sparc alpha hppa arm mips mipsel ia64 armel s390 ppc64 sh armeb m32r'
+  local dists=$(ls $HOME/.chdist)
+
+  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-get|apt-cache|apt-rdepends|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
+
+}
+
+
+[ -n "${have:-}" ] && complete -F _chdist $filenames chdist
+
+
diff --git a/scripts/chdist.pl b/scripts/chdist.pl
new file mode 100755 (executable)
index 0000000..c04d94e
--- /dev/null
@@ -0,0 +1,678 @@
+#!/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 <http://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+chdist - script to easily play with several distributions
+
+=head1 SYNOPSIS
+
+B<chdist> [options] [command] [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 -h, --help
+
+Provide a usage message.
+
+=item -d, --data-dir DIR
+
+Choose data directory (default: $HOME/.chdist/).
+
+=item -a, --arch ARCH
+
+Choose architecture (default: `dpkg --print-architecture`)
+
+=item --version
+
+Display version information.
+
+=back
+
+=head1 COMMANDS
+
+=over 4
+
+=item create DIST : prepare a new tree named DIST
+
+=item apt-get DIST (update|source|...) : run apt-get inside DIST
+
+=item apt-cache DIST (show|showsrc|...) : run apt-cache inside DIST
+
+=item apt-rdepends DIST [...] : run apt-rdepends inside DIST
+
+=item src2bin DIST PKG : get binary packages for a source package in DIST
+
+=item bin2src DIST PKG : get source package for a binary package in DIST
+
+=item compare-packages DIST1 DIST2 [DIST3, ...] : list versions of packages in several DISTributions
+
+=item compare-bin-packages DIST1 DIST2 [DIST3, ...]
+
+=item compare-versions DIST1 DIST2 : same as compare-packages, but also run dpkg --compare-versions and display where the package is newer.
+
+=item compare-bin-versions DIST1 DIST2
+
+=item compare-src-bin-packages DIST : compare sources and binaries for DIST
+
+=item compare-src-bin-versions DIST : same as compare-src-bin-versions, but also run dpkg --compare-versions and display where the package is newer
+
+=item grep-dctrl-packages DIST [...] : run grep-dctrl on *_Packages inside DIST
+
+=item grep-dctrl-sources DIST [...] : run grep-dctrl on *_Sources inside DIST
+
+=item list : list available DISTs
+
+=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;
+use File::Basename;
+use Getopt::Long qw(:config require_order);
+use Cwd qw(abs_path cwd);
+use Dpkg::Version;
+
+my $progname = basename($0);
+
+sub usage {
+  return <<EOF;
+Usage: chdist [options] [command] [command parameters]
+
+Options:
+    -h, --help                       Show this help
+    -d, --data-dir DIR               Choose data directory (default: \$HOME/.chdist/)
+    -a, --arch ARCH                  Choose architecture (default: `dpkg --print-architecture`)
+    -v, --version                    Display version and copyright information
+
+Commands:
+  create DIST : prepare a new tree named DIST
+  apt-get DIST (update|source|...) : run apt-get inside DIST
+  apt-cache DIST (show|showsrc|...) : run apt-cache inside DIST
+  apt-rdepends DIST [...] : run apt-rdepends inside DIST
+  src2bin DIST PKG : get binary packages for a source package in DIST
+  bin2src DIST PKG : get source package for a binary package in DIST
+  compare-packages DIST1 DIST2 [DIST3, ...] : list versions of packages in
+      several DISTributions
+  compare-bin-packages DIST1 DIST2 [DIST3, ...]
+  compare-versions DIST1 DIST2 : same as compare-packages, but also run
+      dpkg --compare-versions and display where the package is newer
+  compare-bin-versions DIST1 DIST2
+  compare-src-bin-packages DIST : compare sources and binaries for DIST
+  compare-src-bin-versions DIST : same as compare-src-bin-versions, but also
+      run dpkg --compare-versions and display where the package is newer
+  grep-dctrl-packages DIST [...] : run grep-dctrl on *_Packages inside DIST
+  grep-dctrl-sources DIST [...] : run grep-dctrl on *_Sources inside DIST
+  list : list available DISTs
+EOF
+}
+
+# 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 = $ENV{'HOME'} . '/.chdist';
+
+GetOptions(
+  "help"       => \$help,
+  "data-dir=s" => \$datadir,
+  "arch=s"     => \$arch,
+  "version"    => \$version,
+);
+
+# Fix-up relative paths
+$datadir = cwd() . "/$datadir" unless $datadir =~ m!^/!;
+$datadir = abs_path($datadir);
+
+if ($help) {
+  print usage(0);
+  exit;
+}
+
+if ($version) {
+  print $versioninfo;
+  exit;
+}
+
+
+########################################################
+### Functions
+########################################################
+
+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);
+     die "E: Could not find $dist in $datadir. Run `$0 create $dist` first. Exiting.\n";
+  } else {
+     die "E: No dist provided. Exiting. \n";
+  }
+}
+
+sub type_check {
+   my ($type) = @_;
+   if ( ($type ne 'Sources') && ($type ne 'Packages') ) {
+      die "E: Unknown type $type. Exiting.\n";
+   }
+}
+
+sub aptopts {
+  # Build apt options
+  my ($dist) = @_;
+  my $opts = "";
+  if ($arch) {
+     print "W: Forcing arch $arch for this command only.\n";
+     $opts .= " -o Apt::Architecture=$arch";
+  }
+  return $opts;
+}
+
+sub aptconfig {
+  # Build APT_CONFIG override
+  my ($dist) = @_;
+  return "APT_CONFIG=$datadir/$dist/etc/apt/apt.conf";
+}
+
+###
+
+sub aptcache {
+  # Run apt-cache cmd
+  my ($dist, @args) = @_;
+  dist_check($dist);
+  my $args = aptopts($dist) . " @args";
+  my $aptconfig = aptconfig($dist);
+  system("$aptconfig /usr/bin/apt-cache $args");
+}
+
+sub aptget {
+  # Run apt-get cmd
+  my ($dist, @args) = @_;
+  dist_check($dist);
+  my $args = aptopts($dist) . " @args";
+  my $aptconfig = aptconfig($dist);
+  system("$aptconfig /usr/bin/apt-get $args");
+}
+
+sub aptrdepends {
+  # Run apt-rdepends cmd
+  my ($dist, @args) = @_;
+  dist_check($dist);
+  my $args = aptopts($dist) . " @args";
+  my $aptconfig = aptconfig($dist);
+  system("$aptconfig /usr/bin/apt-rdepends $args");
+}
+
+sub bin2src {
+  my ($dist, $pkg) = @_;
+  dist_check($dist);
+  if (!$pkg) {
+     die "E: no package name provided. Exiting.\n";
+  }
+  my $args = aptopts($dist) . " show $pkg";
+  my $aptconfig = aptconfig($dist);
+  my $source = `$aptconfig /usr/bin/apt-cache $args|grep '^Source:'`;
+  exit($?) if($? != 0);
+  $source =~ s/Source: (.*)/$1/;
+  print $pkg if($source eq '');
+  print $source if($source ne '');
+}
+
+sub src2bin {
+  my ($dist, $pkg) = @_;
+  dist_check($dist);
+  if (!$pkg) {
+     die "E: no package name provided. Exiting.\n";
+  }
+  my $args = aptopts($dist) . " showsrc $pkg";
+  my $bins = `/usr/bin/apt-cache $args|sed -n '/^Package: $pkg/{N;p}' | sed -n 's/^Binary: \\(.*\\)/\\1/p'`;
+  exit($?) if ($? != 0);
+  my @bins = split /, /, $bins;
+  print join "\n", @bins;
+}
+
+
+sub recurs_mkdir {
+  my ($dir) = @_;
+  my @temp = split /\//, $dir;
+  my $createdir = "";
+  foreach my $piece (@temp) {
+     $createdir .= "/$piece";
+     if (! -d $createdir) {
+        mkdir($createdir);
+     }
+  }
+}
+
+sub dist_create {
+  my ($dist, $method, $version, @sections) = @_;
+  my $dir  = $datadir . '/' . $dist;
+  if ( ! $dist ) {
+     die "E: you must provide a dist name.\n";
+  }
+  if (-d $dir) {
+    die "E: $dir already exists, exiting.\n";
+  }
+  if (! -d $datadir) {
+    mkdir($datadir);
+  }
+  mkdir($dir);
+  foreach my $d (('/etc/apt', '/var/lib/apt/lists/partial', '/var/lib/dpkg', '/var/cache/apt/archives/partial')) {
+     recurs_mkdir("$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://ftp.debian.org/debian/ unstable main contrib non-free
+#deb-src http://ftp.debian.org/debian/ unstable main contrib non-free
+
+#deb http://archive.ubuntu.com/ubuntu dapper main restricted
+#deb http://archive.ubuntu.com/ubuntu dapper universe multiverse
+#deb-src http://archive.ubuntu.com/ubuntu dapper main restricted
+#deb-src http://archive.ubuntu.com/ubuntu dapper universe 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";
+}
+
+Dir "$dir";
+Dir::State::status "$dir/var/lib/dpkg/status";
+EOF
+  close FH;
+  print "Now edit $dir/etc/apt/sources.list\n";
+  print "Then run chdist apt-get $dist update\n";
+  print "And enjoy.\n";
+}
+
+
+
+sub get_distfiles {
+  # Retrieve files to be read
+  # Takes a dist and a type
+  my ($dist, $type) = @_;
+
+  # Let the above function check the type
+  #type_check($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 is 'Sources' by default
+  $type ||= 'Sources';
+  type_check($type);
+
+  $do_compare = 0 if $do_compare eq 'false';
+
+  # Get the list of dists from the referrence
+  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} ) {
+              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|\+|\\\+|;
+     }
+     # Do compare
+     if ($do_compare) {
+        if ($#dists != 1) {
+           die "E: Can only compare versions if there are two distros.\n";
+        }
+        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) = @_;
+
+   $do_compare = 0 if $do_compare eq 'false';
+
+   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 ( $packages{Sources_Bin}{$binary} ) {
+               # TODO: replace if new version is newer (use dpkg --compare-version?)
+               warn "There is already a version for binary $binary. Not replacing.\n";
+            } else {
+               $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;
+     # Escaped versions
+     my @esc_vers = @versions;
+     foreach my $vers (@esc_vers) {
+        $vers =~ s|\+|\\\+|;
+     }
+
+     # Do compare
+     if ($do_compare) {
+        if ($#comp_types != 1) {
+           die "E: Can only compare versions if there are two types.\n";
+        }
+        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|^$esc_vers[0]| ) {
+               $details = " local_changes_in_$comp_types[1]";
+            }
+          } else {
+             $status = "newer_in_$comp_types[0]";
+             if ( $versions[0] =~ m|^$esc_vers[1]| ) {
+                $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");
+  # FIXME avoid shell invoc, potential quoting problems here
+  system("cat $f | grep-dctrl @argv");
+}
+
+sub list {
+  opendir(DIR, $datadir) or die "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") || die("Could not open $file : $!\n");
+
+   # 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 $command = shift @ARGV;
+if ($command eq 'create') {
+  dist_create(@ARGV);
+}
+elsif ($command eq 'apt-get') {
+  aptget(@ARGV);
+}
+elsif ($command eq 'apt-cache') {
+  aptcache(@ARGV);
+}
+elsif ($command eq 'apt-rdepends') {
+  aptrdepends(@ARGV);
+}
+elsif ($command eq 'bin2src') {
+  bin2src(@ARGV);
+}
+elsif ($command eq 'src2bin') {
+  src2bin(@ARGV);
+}
+elsif ($command eq 'compare-packages') {
+  dist_compare(@ARGV, 0, 'Sources');
+}
+elsif ($command eq 'compare-bin-packages') {
+  dist_compare(@ARGV, 0, 'Packages');
+}
+elsif ($command eq 'compare-versions') {
+  dist_compare(@ARGV, 1, 'Sources');
+}
+elsif ($command eq 'compare-bin-versions') {
+  dist_compare(@ARGV, 1, 'Packages');
+}
+elsif ($command eq 'grep-dctrl-packages') {
+  grep_file(@ARGV, 'Packages');
+}
+elsif ($command eq 'grep-dctrl-sources') {
+  grep_file(@ARGV, 'Sources');
+}
+elsif ($command eq 'compare-src-bin-packages') {
+  compare_src_bin(@ARGV, 0);
+}
+elsif ($command eq 'compare-src-bin-versions') {
+  compare_src_bin(@ARGV, 1);
+}
+elsif ($command eq 'list') {
+  list;
+}
+else {
+  die "Command unknown. Try $0 -h\n";
+}
diff --git a/scripts/checkbashisms.1 b/scripts/checkbashisms.1
new file mode 100644 (file)
index 0000000..f9f05bf
--- /dev/null
@@ -0,0 +1,65 @@
+.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|\-\-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 "echo \-n" 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 \-n).
+.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 \-\-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 "$BASH_ENV" may be preceded by checking
+whether "$BASH" is set.
+.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.
+.SH "SEE ALSO"
+.BR lintian (1).
+.SH AUTHOR
+\fBcheckbashisms\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>.
diff --git a/scripts/checkbashisms.pl b/scripts/checkbashisms.pl
new file mode 100755 (executable)
index 0000000..5c3252c
--- /dev/null
@@ -0,0 +1,623 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use Getopt::Long;
+
+sub init_hashes;
+
+(my $progname = $0) =~ s|.*/||;
+
+my $usage = <<"EOF";
+Usage: $progname [-n] [-f] [-x] script ...
+   or: $progname --help
+   or: $progname --version
+This script performs basic checks for the presence of bashisms
+in /bin/sh scripts.
+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);
+my ($opt_help, $opt_version);
+
+##
+## handle command-line options
+##
+$opt_help = 1 if int(@ARGV) == 0;
+
+GetOptions("help|h" => \$opt_help,
+          "version|v" => \$opt_version,
+          "newline|n" => \$opt_echo,
+          "force|f" => \$opt_force,
+          "extra|x" => \$opt_extra,
+          "posix|p" => \$opt_posix,
+           )
+    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 $status = 0;
+my $makefile = 0;
+my (%bashisms, %string_bashisms, %singlequote_bashisms);
+
+my $LEADIN = qr'(?:(?:^|[`&;(|{])\s*|(?:if|then|do|while|shell)\s+)';
+init_hashes;
+
+foreach my $filename (@ARGV) {
+    my $check_lines_count = -1;
+
+    if (!$opt_force) {
+       $check_lines_count = script_is_evil_and_wrong($filename);
+    }
+
+    if ($check_lines_count == 0 or $check_lines_count == 1) {
+       warn "script $filename does not appear to be a /bin/sh script; skipping\n";
+       next;
+    }
+
+    if ($check_lines_count != -1) {
+       warn "script $filename appears to be a shell wrapper; only checking the first "
+            . "$check_lines_count lines\n";
+    }
+
+    unless (open C, '<', $filename) {
+       warn "cannot open script $filename for reading: $!\n";
+       $status |= 2;
+       next;
+    }
+
+    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 = "";
+
+    while (<C>) {
+       next unless ($check_lines_count == -1 or $. <= $check_lines_count);
+
+       if ($. == 1) { # This should be an interpreter line
+           if (m,^\#!\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$,) {
+                   warn "script $filename is already a bash script; skipping\n";
+                   $status |= 2;
+                   last;  # end this file
+               }
+               elsif ($interpreter !~ m,/(sh|posh)$,) {
+### ksh/zsh?
+                   warn "script $filename does not appear to be a /bin/sh script; skipping\n";
+                   $status |= 2;
+                   last;
+               }
+           } else {
+               warn "script $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 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
+                   $templine =~ s/(^|[^\\\"](?:\\\\)*)\'[^\']*\'/$1/g;
+                   $templine =~ s/(^|[^\\\'](?:\\\\)*)\"(?:\\.|[^\\\"])+\"/$1/g;
+
+                   # 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;
+                       $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)/
+               and m/$LEADIN(\.\s+[^\s;\`:]+\s+([^\s;]+))/) {
+               if ($2 =~ /^(\&|\||\d?>|<)/) {
+                   # everything is ok
+                   ;
+               } else {
+                   $found = 1;
+                   $match = $1;
+                   $explanation = "sourced script with arguments";
+                   output_explanation($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;
+
+           while (my ($re,$expl) = each %singlequote_bashisms) {
+               if ($line =~ m/($re)/) {
+                   $found = 1;
+                   $match = $1;
+                   $explanation = $expl;
+                   output_explanation($filename, $orig_line, $explanation);
+               }
+           }
+
+           my $re='(?<![\$\\\])\$\'[^\']+\'';
+           if ($line =~ m/(.*)($re)/){
+               my $count = () = $1 =~ /(^|[^\\])\'/g;
+               if( $count % 2 == 0 ) {
+                   output_explanation($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.
+           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 preceeded 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)/){
+               my $count = () = $1 =~ /(^|[^\\])\"/g;
+               if( $count % 2 == 0 ) {
+                   output_explanation($filename, $orig_line, q<$"foo" should be eval_gettext "foo">);
+               }
+           }   
+
+           while (my ($re,$expl) = each %string_bashisms) {
+               if ($line =~ m/($re)/) {
+                   $found = 1;
+                   $match = $1;
+                   $explanation = $expl;
+                   output_explanation($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;
+           while (my ($re,$expl) = each %bashisms) {
+               if ($line =~ m/($re)/) {
+                   $found = 1;
+                   $match = $1;
+                   $explanation = $expl;
+                   output_explanation($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*(?:[\\]?(\w+)|[\'\"](.*?)[\'\"])/) {
+               $cat_indented = ($1 && $1 eq '-')? 1 : 0;
+               $cat_string = $2;
+               $cat_string = $3 if not defined $cat_string;
+            }
+       }
+    }
+
+    warn "error: $filename:  Unterminated heredoc found, EOF reached. Wanted: <$cat_string>\n"
+       if ($cat_string ne '');
+    warn "error: $filename: Unterminated quoted string found, EOF reached. Wanted: <$quote_string>\n"
+       if ($quote_string ne '');
+    warn "error: $filename: EOF reached while on line continuation.\n"
+       if ($buffered_line ne '');
+
+    close C;
+}
+
+exit $status;
+
+sub output_explanation {
+    my ($filename, $line, $explanation) = @_;
+
+    warn "possible bashism in $filename line $. ($explanation):\n$line\n";
+    $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 \w+(\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+\}' =>          q<brace expansion, should be $(seq a b)>,
+       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>,
+       qr'(?:^|\s+)\s*\(?\w*[^\(\w\s]+\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 substituion>,
+       $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+-[^p]\s' =>  q<'command' with option other than -p>,
+    );
+
+    %string_bashisms = (
+       qr'\$\[[^][]+\]' =>              q<'$[' should be '$(('>,
+       qr'\$\{\w+\:\d+(?::\d+)?\}' =>   q<${foo:3[:1]}>,
+       qr'\$\{!\w+[\@*]\}' =>           q<${!prefix[*|@]>,
+       qr'\$\{!\w+\}' =>                q<${!name}>,
+       qr'\$\{\w+(/.+?){1,2}\}' =>      q<${parm/?/pat[/str]}>,
+       qr'\$\{\#?\w+\[[0-9\*\@]+\]\}' => 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'<<<'                       => 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["\'][^"\']+?%[qb].+?["\']' => q<printf %q|%b>,
+    );
+
+    %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 (file)
index 0000000..bf6b2b3
--- /dev/null
@@ -0,0 +1,250 @@
+.\"                                      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 cowbuilder 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= arch
+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= dist
+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 sid, or lenny) or distribution names (such as unstable, or
+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.
+
+.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 cowbuilder 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 cowbuilder root in the expected location.
+
+.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
+DEBBUILDOPTS in the build host's pbuilderrc.
+
+.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 BUILDD_USER'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 arch and dist in a single cowpoke invocation.
+
+.TP
+.B BUILDD_HOST
+The network address or fqdn of the build machine where cowbuilder 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 config for BUILDD_HOST), 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.  Arch and dist
+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.
+.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.
+
+.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 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:
+.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.  su \-c isn't really suitable
+here due to its quoting requirements being different from all the rest.
+
+.TP
+.B DEBOOTSTRAP
+The utility to use when creating a new build root.  Alternatives are
+.BR debootstrap " or " cdebootstrap .
+
+
+.SS Arch and dist specific options
+These are variables of the form: $arch_$dist_VAR which apply only for a
+particular target arch/dist build.
+
+.TP
+.RB 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, 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 \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
+.RB 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
+
+
+.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 addtional
+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 cowbuilder instance
+for use with \fBcowpoke\fP.  Simply create them in the flavour you require with
+`cowbuilder \-\-create` according to the cowbuilder 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 cowbuilder does
+not require \fBcowpoke\fP installed locally.
+
+The build machine should have the lintian and devscripts 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 'host' alias specified by \fBUPLOAD_QUEUE\fP.
+
+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 cowbuilder 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 cowbuilder
+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 cowbuilder during the update (or creation) of the build root.
+
+
+.SH NOTES
+Since cowbuilder 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.  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 \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 <ron@debian.org>.
+
diff --git a/scripts/cowpoke.sh b/scripts/cowpoke.sh
new file mode 100755 (executable)
index 0000000..b5fe70f
--- /dev/null
@@ -0,0 +1,368 @@
+#! /bin/bash
+# Simple shell script for driving a remote cowbuilder via ssh
+#
+# Copyright(C) 2007, 2008, 2009, 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"
+    _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
+               if [ "$1" = "display" ]; then
+                   if [ -z "$(eval echo "\$${arch}_${dist}_${var}")" ]; then
+                       echo "   ${arch}_${dist}_${var} = $PBUILDER_BASE/$arch/$dist/$(eval echo "\$_$var")"
+                   else
+                       echo "   ${arch}_${dist}_${var} = $(eval echo "\$${arch}_${dist}_${var}")"
+                   fi
+               else
+                   if [ -z "$(eval echo "\$${arch}_${dist}_${var}")" ]; then
+                       echo "${arch}_${dist}_${var}=\"$PBUILDER_BASE/$arch/$dist/$(eval echo "\$_$var")\""
+                   else
+                       echo "${arch}_${dist}_${var}=\"$(eval echo "\$${arch}_${dist}_${var}")\""
+                   fi
+               fi
+           done
+       done
+    done
+}
+
+PROGNAME="$(basename $0)"
+version ()
+{
+    echo \
+"This is $PROGNAME, from the Debian devscripts package, version ###VERSION###
+This code is copyright 2007-9 by Ron <ron@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."
+    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.
+
+  The current default configuration is:
+
+   BUILDD_HOST = $BUILDD_HOST
+   BUILDD_USER = $BUILDD_USER
+   BUILDD_ARCH = $BUILDD_ARCH
+   BUILDD_DIST = $BUILDD_DIST
+
+  The expected remote paths are:
+
+   INCOMING_DIR  = $INCOMING_DIR
+   PBUILDER_BASE = ${PBUILDER_BASE:-/}
+
+$(get_archdist_vars display)
+
+  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"
+           ;;
+
+       --dpkg-opts=*)
+           DEBBUILDOPTS="--debbuildopts \"${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.
+
+       $(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"
+           RESULT_DIR="\$(eval echo "\\\$\${arch}_\${dist}_RESULT_DIR")"
+           BASE_PATH="\$(eval echo "\\\$\${arch}_\${dist}_BASE_PATH")"
+
+           # 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[*]}
+           COMPARE="dpkg --compare-versions"
+
+           for(( i=1; i < count; ++i )) do
+               j=i
+               #echo "was \$i: \${P[i]}"
+               while ((\$j)) && \$COMPARE "\${P[j-1]%_*.changes}" gt "\${P[i]%_*.changes}"; 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 \$dist       \\
+                                              --basepath "\$BASE_PATH"             \\
+                                              --aptcache "$PBUILDER_BASE/aptcache" \\
+                                              --debootstrap "$DEBOOTSTRAP"         \\
+                                              --debootstrapopts --arch="\$arch"    \\
+                   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 --basepath "\$BASE_PATH"    \\
+                                          --aptcache "$PBUILDER_BASE/aptcache" \\
+                                          --autocleanaptcache                  \\
+               2>&1 | tee "\$UPDATELOG"
+           fi
+           $BUILDD_ROOTCMD cowbuilder --build --basepath "\$BASE_PATH"      \\
+                                      --aptcache "$PBUILDER_BASE/aptcache"  \\
+                                      --buildplace "$PBUILDER_BASE/build"   \\
+                                      --buildresult "\$RESULT_DIR"          \\
+                                      $DEBBUILDOPTS                         \\
+                                      "$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"
+
+
+dcmd scp $DSC "$REMOTE_SCRIPT" "$BUILDD_USER$BUILDD_HOST:$INCOMING_DIR"
+ssh -t "$BUILDD_USER$BUILDD_HOST" "\"$INCOMING_DIR/$REMOTE_SCRIPT\" && rm -f \"$INCOMING_DIR/$REMOTE_SCRIPT\""
+
+echo
+echo "Build completed."
+
+if [ -n "$SIGN_KEYID" ]; then
+    for arch in $BUILDD_ARCH; do
+      CHANGES="$arch.changes"
+      for dist in $BUILDD_DIST; do
+
+       RESULT_DIR="$(eval echo "\$${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"
+
+                   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
+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 (file)
index 0000000..37f0b55
--- /dev/null
@@ -0,0 +1,68 @@
+.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 .deb
+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<module>
+The name of the CVS module.
+.TP
+.BR \-P<package>
+The name of the package.
+.TP
+.B \-V<version>
+The version number of the package.
+.TP
+.B \-T<tag>
+The CVS tag to use for exporting sources.
+.TP
+.B \-R<root\ directory>
+Root of the original sources archive.
+.TP
+.B \-W<work directory>
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x<prefix>
+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)
+and
+.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 (file)
index 0000000..70bcc13
--- /dev/null
@@ -0,0 +1,72 @@
+.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<module>
+The name of the CVS module.
+.TP
+.BR \-P<package>
+The name of the package.
+.TP
+.B \-V<version>
+The version number of the package.
+.TP
+.B \-T<tag>
+The CVS tag to use for exporting sources.
+.TP
+.B \-R<root\ directory>
+Root of the original sources archive.
+.TP
+.B \-W<work directory>
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x<prefix>
+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)
+and
+.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 (executable)
index 0000000..65c284a
--- /dev/null
@@ -0,0 +1,360 @@
+#! /bin/bash -e
+
+# 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 <http://www.gnu.org/licenses/>.
+
+PROGNAME=`basename $0 .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 2>&1; 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" 0 1 2 3 7 10 13 15
+
+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 (anaomalous since we ahve 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 | sed -n 's/^Source: //p'`" \
+               "source package"
+       setq "version" \
+           "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+               "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 | sed -n 's/^Source: //p'`" \
+          "source package"
+        setq "version" \
+          "`dpkg-parsechangelog -l$TEMPFILE | sed -n 's/^Version: //p'`" \
+          "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 " theres is no debian/changelog, and there was no"
+       echo >&2 " package name or cvs module given on the comand 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 | sed -n 's/^Version: //p'`" \
+               "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 | sed -n 's/^Version: //p'`" \
+          "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 | sed -n 's/^Version: //p'`" \
+          "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
+
+setq arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`" "build architecture"
+
+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 (file)
index 0000000..3debec0
--- /dev/null
@@ -0,0 +1,73 @@
+.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<module>
+The name of the CVS module.
+.TP
+.BR \-P<package>
+The name of the package.
+.TP
+.B \-V<version>
+The version number of the package.
+.TP
+.B \-T<tag>
+The CVS tag to use for exporting sources.
+.TP
+.B \-R<root\ directory>
+Root of the original sources archive.
+.TP
+.B \-W<work directory>
+The full path name for the cvs-buildpackage working directory.
+.TP
+.B \-x<prefix>
+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 debrelease (1)
+and
+.BR cvs-debuild (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 (executable)
index 0000000..97e7f72
--- /dev/null
@@ -0,0 +1,375 @@
+#! /bin/bash -e
+
+# 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 <http://www.gnu.org/licenses/>.
+
+PROGNAME=`basename $0 .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 2>&1; 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" 0 1 2 3 7 10 13 15
+
+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 (anaomalous since we ahve 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 | sed -n 's/^Source: //p'`" \
+               "source package"
+       setq "version" \
+           "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+               "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 | sed -n 's/^Source: //p'`" \
+          "source package"
+        setq "version" \
+          "`dpkg-parsechangelog -l$TEMPFILE | sed -n 's/^Version: //p'`" \
+          "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 " theres is no debian/changelog, and there was no"
+       echo >&2 " package name or cvs module given on the comand 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 | sed -n 's/^Version: //p'`" \
+               "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 | sed -n 's/^Version: //p'`" \
+          "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 | sed -n 's/^Version: //p'`" \
+          "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
+
+setq arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`" "build architecture"
+
+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 (file)
index 0000000..d4fbf74
--- /dev/null
@@ -0,0 +1,60 @@
+.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, \-\-noconf
+.TP
+.BI \-\-rootcmd= "gain-root-command, " \-r gain-root-command
+.TP
+.B \-\-preserve\-env
+.TP
+.BI \-\-preserve\-envvar= "var, " \-e var
+.TP
+.BI \-\-set\-envvar= var = "value, " \-e var = value
+.TP
+.B \-\-lintian, \-\-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)
+and
+.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 (executable)
index 0000000..79eee88
--- /dev/null
@@ -0,0 +1,219 @@
+#! /usr/bin/perl -w
+
+# 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 <http://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 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 (file)
index 0000000..bd0d8cd
--- /dev/null
@@ -0,0 +1,103 @@
+.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]
+[\fI...\fR]
+.SH DESCRIPTION
+\fBdcmd\fR replaces any reference to a .dsc or .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 changes files) or a source package (for dsc files).
+
+If \fIcommand\fR is omitted (that is the first argument is an existing .dsc
+or .changes 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 .dsc or .changes file. If a requested file
+is not found, an error message will be printed.
+.TP 14
+.B \-\-dsc
+Select the .dsc file.
+.TP
+.B \-\-schanges
+Select .changes files for the 'source' architecture.
+.TP
+.B \-\-bchanges
+Select .changes files for binary architectures.
+.TP
+.B \-\-changes
+Select .changes files. Implies \-\-schanges and \-\-bchanges.
+.TP
+.B \-\-archdeb
+Select architecture-dependent binary packages (.deb files).
+.TP
+.B \-\-indepdeb
+Select architecture-independent binary packages (.deb files).
+.TP
+.B \-\-deb
+Select binary packages (.deb files). Implies \-\-archdeb and \-\-indepdeb.
+.TP
+.B \-\-archudeb
+Select architecture-dependent udeb binary packages.
+.TP
+.B \-\-indepudeb
+Select architecture-independent udeb binary packages.
+.TP
+.B \-\-udeb
+Select udeb binary packages. Implies \-\-archudeb and \-\-indepudeb.
+.TP
+.B \-\-tar, \-\-orig
+Select the tar file.
+.TP
+.B \-\-diff
+Select the Debian diff 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. \-\-dsc)
+and negative filtering options (e.g. \-\-no\-changes) in the same
+\fBdcmd\fR invocation.
+.TP
+.B \-\-no\-fail\-on\-missing, \-r
+If any of the requested files were not found, do not output an error.
+.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-source (1),
+.BR dpkg-genchanges (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 (executable)
index 0000000..63d56c6
--- /dev/null
@@ -0,0 +1,262 @@
+#!/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=`basename $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()
+{
+    [ $(basename "$1" $2)$2 = $(basename "$1") ]
+}
+
+# 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-Z-]+/)?[a-zA-Z1-]+|-) ([a-zA-Z]+|-) )?(.*)$"
+
+maybe_expand()
+{
+    local dir
+    local sedre
+    if [ -e "$1" ] && (endswith "$1" .changes || endswith "$1" .dsc); then
+       dir=$(dirname "$1")
+       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;
+FILTERED=0; FAIL_MISSING=1
+
+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;;
+       --) 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;;
+           esac;;
+       *) break;;
+    esac
+
+    case "$TYPE" in
+       "") ;;
+       dsc) [ "$FILTERED" = "1" ] && DSC=1 || DSC=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) [ "$FILTERED" = "1" ] && DIFF=1 || DIFF=0;;
+       *) echo "$PROGNAME: Unknown option '$1'" >&2; exit 1;;
+    esac
+    shift
+done
+
+args=""
+for arg in "$@"; do
+    temparg="$(maybe_expand "$arg")"
+    if [ -z "$temparg" ]; then
+       # 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
+       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" .tar.gz || \
+                endswith "$THISARG" .tar.bz2; 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" .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
+       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 [ "$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 diff not found" >&2
+           fi
+
+           [ "$MISSING" = "0" ] || exit 1
+       fi
+
+       args="$args $newarg"
+       [ "$INCLUDEARG" = "0" ] || args="$args $arg"
+    fi
+done
+
+if [ -e "$1" ] && (endswith "$1" .changes || endswith "$1" .dsc); then
+    set -- $args
+    for arg in $args; do
+       echo $arg
+    done
+    exit 0
+fi
+
+exec $args
diff --git a/scripts/dcontrol.pl b/scripts/dcontrol.pl
new file mode 100755 (executable)
index 0000000..e18909e
--- /dev/null
@@ -0,0 +1,292 @@
+#!/usr/bin/perl -w
+# vim:sw=4:sta:
+
+#   dcontrol - Query Debian control files across releases and architectures
+#   Copyright (C) 2009 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
+
+use strict;
+use File::Basename;
+use Getopt::Long;
+
+BEGIN {
+    # Load the URI::Escape and LWP::UserAgent modules safely
+    my $progname = basename($0,'.pl');
+    eval { require URI::Escape; };
+    if ($@) {
+       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;
+
+    eval { require LWP::UserAgent; };
+    if ($@) {
+       my $progname = basename $0;
+       if ($@ =~ /^Can\'t locate LWP/) {
+           die "$progname: you must have the libwww-perl package installed\nto use this script\n";
+       }
+       die "$progname: problem loading the LWP::UserAgent module:\n  $@\nHave you installed the libwww-perl package?\n";
+    }
+    import LWP::UserAgent;
+}
+
+# global variables
+
+my $progname = basename($0,'.pl');  # the '.pl' is for when we're debugging
+my $modified_conf_msg;
+my $dcontrol_url;
+my $opt;
+
+my $ua = LWP::UserAgent->new(agent => "$progname ###VERSION###");
+
+# functions
+
+sub usage {
+    print <<"EOT";
+Usage: $progname [-sd] package[modifiers] [...]
+
+Query package and source control files for all Debian distributions.
+
+Options:
+    -s --show-suite  Add headers for distribution the control file is from
+    -d --debug       Print URL queried
+
+Modifiers:
+    =version         Exact version match
+    \@architecture    Query this architecture
+    /[archive:][suite][/component]
+                     Restrict to archive (debian, debian-backports,
+                    debian-security, debian-volatile), suite (always
+                    codenames, with the exception of experimental), and/or
+                    component (main, updates/main, ...). Use // if the suite
+                    name contains slashes.
+
+By default, all versions, suites, and architectures are queried.
+Use \@source for source packages. \@binary returns no source packages.
+Refer to $dcontrol_url for currently supported values.
+
+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 2009 by Christoph Berg <myon\@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 apt_get {
+    my ($arg) = @_;
+    unless ($arg =~ /^([\w.+-]+)/) {
+       die "$arg does not start with a valid package name\n";
+    }
+    my $url = "$dcontrol_url?package=" . uri_escape($1);
+    if ($arg =~ /=([\w~:.+-]+)/) {
+       $url .= "&version=" . uri_escape($1);
+    }
+    if ($arg =~ /@([\w.-]+)/) {
+       $url .= "&architecture=$1";
+    }
+    if ($arg =~ m!/([\w-]*):([\w/-]*)//([\w/-]*)!) {
+       $url .= "&archive=$1&suite=$2&component=$3";
+    } elsif ($arg =~ m!/([\w/-]*)//([\w/-]*)!) {
+       $url .= "&suite=$1&component=$2";
+    } elsif ($arg =~ m!/([\w-]*):([\w-]*)/([\w/-]*)!) {
+       $url .= "&archive=$1&suite=$2&component=$3";
+    } elsif ($arg =~ m!/([\w-]*):([\w-]*)!) {
+       $url .= "&archive=$1&suite=$2";
+    } elsif ($arg =~ m!/([\w-]*)/([\w/-]*)!) {
+       $url .= "&suite=$1&component=$2";
+    } elsif ($arg =~ m!/([\w\/-]+)!) {
+       $url .= "&suite=$1";
+    }
+    if ($opt->{'show-suite'}) {
+       $url .= "&annotate=yes";
+    }
+    print "$url\n" if $opt->{debug};
+    my $response = $ua->get ($url);
+    if ($response->is_success) {
+       print $response->content . "\n";
+    } else {
+       die $response->status_line;
+    }
+}
+
+# main program
+
+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 = (
+                      'DCONTROL_URL' => 'http://qa.debian.org/cgi-bin/dcontrol',
+                      );
+    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;
+
+    $dcontrol_url = $config_vars{'DCONTROL_URL'};
+}
+
+# handle options
+Getopt::Long::Configure('bundling');
+GetOptions(
+    "d|debug"      =>  \$opt->{'debug'},
+    "s|show-suite" =>  \$opt->{'show-suite'},
+    "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 (! @ARGV) {
+    usage();
+    exit 1;
+}
+
+# handle arguments
+while (my $arg = shift @ARGV) {
+    apt_get ($arg);
+}
+
+=pod
+
+=head1 NAME
+
+dcontrol -- Query package and source control files for all Debian distributions
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<dcontrol> [I<options>] I<package>[I<modifiers>] [I<...>]
+
+=back
+
+=head1 DESCRIPTION
+
+B<dcontrol> queries a remote database of Debian binary and source package
+control files. It can be thought of as an B<apt-cache> webservice that also
+operates for distributions and architectures different from the local machine.
+
+=head1 MODIFIERS
+
+Like B<apt-cache>, packages can be suffixed by modifiers:
+
+=over 4
+
+=item B<=>I<version>
+
+Exact version match
+
+=item B<@>I<architecture>
+
+Query this only architecture. Use B<@source> for source packages,
+B<@binary> excludes source packages.
+
+=item B</>[I<archive>B<:>][I<suite>][B</>I<component>]
+
+Restrict to I<archive> (debian, debian-backports, debian-security,
+debian-volatile), I<suite> (always codenames, with the exception of
+experimental), and/or I<component> (main, updates/main, ...). Use two slashes
+(B<//>) to separate suite and component if the suite name contains slashes.
+(Component can be left empty.)
+
+=back
+
+By default, all versions, suites, and architectures are queried. Refer to
+B<http://qa.debian.org/cgi-bin/dcontrol> for currently supported values.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-s>, B<--show-suites>
+
+Add headers showing which distribution the control file is from.
+
+=item B<-d>, B<--debug>
+
+Print URL queried.
+
+=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 DCONTROL_URL
+
+URL to query. Default is B<http://qa.debian.org/cgi-bin/dcontrol>.
+
+=back
+
+=head1 AUTHOR
+
+This program is Copyright (C) 2009 by Christoph Berg <myon@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-cache>(1).
diff --git a/scripts/dd-list.1 b/scripts/dd-list.1
new file mode 100644 (file)
index 0000000..3f78758
--- /dev/null
@@ -0,0 +1,95 @@
+.\" 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 <http://www.gnu.org/licenses/>.
+.\"
+.TH DD\-LIST 1 2005-06-28 "Debian"
+.\" --------------------------------------------------------------------
+.SH NAME
+dd\-list \- nicely list .deb packages and their maintainers
+.\" --------------------------------------------------------------------
+.SH SYNOPSIS
+.BR dd\-list " [" \-hiuV "] [" \-\-help "] [" \-\-stdin "]"
+.BR "" "[" \-\-dctrl "] [" \-\-version "] [" \-\-uploaders "] [" package "...]"
+.\" --------------------------------------------------------------------
+.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 \-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 (executable)
index 0000000..4991dd5
--- /dev/null
@@ -0,0 +1,193 @@
+#!/usr/bin/perl -w
+#
+# dd-list: Generate a list of maintainers of packages.
+#
+# Written by Joey Hess <joeyh@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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use Getopt::Long;
+
+my $version='###VERSION###';
+
+sub get_developers_given_package {
+       my ($package_name,$print_binary) = @_;
+       
+       my $developer;
+       my $print_name;
+       my $uploaders;
+       my @uploaders;
+       open (F, "apt-cache showsrc '$package_name' |");
+       while (<F>) {
+               chomp;
+               if (/^Maintainer: (.*)/) {
+                       $developer=$1;
+               }
+               elsif (/^Uploaders: (.*)/) {
+                       $uploaders=$1;
+                       @uploaders = split /\s*,\s*/, $uploaders;
+                       
+               }
+               elsif (/^Package: (.*)/) {
+                       $print_name = $print_binary ? $package_name : $1 ;
+               }
+       }
+       close F;
+       return ($developer, \@uploaders, $print_name);
+}
+
+sub parse_developer {
+       my $developer=shift;
+
+       my ($name, $domain) = $developer=~/^(.*)\s+<.*@(.*)>\s*$/i;
+       if (defined $domain && $domain !~ /^(lists(\.alioth)?\.debian\.org|teams\.debian\.net)$/) {
+               return join " ", reverse split " ", $name;
+       }
+       elsif (defined $name) {
+               return $name;
+       }
+       else {
+               return $developer;
+       }
+}
+
+sub sort_developers {
+       sort { uc(parse_developer($a)) cmp uc(parse_developer($b)) } @_;
+}
+
+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.
+
+    -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 $show_uploaders=1;
+my $print_binary=0;
+if (! GetOptions(
+       "help" => sub { help(); exit },
+       "stdin|i" => \$use_stdin,
+       "dctrl|d" => \$use_dctrl,
+       "uploaders|u!" => \$show_uploaders,
+       "print-binary|b" => \$print_binary,
+       "version" => sub { print "dd-list version $version\n" })) {
+       exit(1);
+}
+
+my %dict;
+my $errors=0;
+
+if ($use_dctrl) {
+       local $/="\n\n";
+       while (<>) {
+               my ($package, $maintainer, $uploaders, @uploaders);
+
+               if (/^Package:\s+(.*)$/m) {
+                       $package=$1;
+               }
+               if (/^Source:\s+(.*)$/m && ! $print_binary ) {
+                       $package=$1;
+               }
+               if (/^Maintainer:\s+(.*)$/m) {
+                       $maintainer=$1;
+               }
+               if (/^Uploaders:\s+(.*)$/m) {
+                       $uploaders=$1;
+                       @uploaders = split /\s*,\s*/, $uploaders;
+               }
+
+               if (defined $maintainer && defined $package) {
+                       push @{$dict{$maintainer}}, $package;
+                       if ($show_uploaders && defined $uploaders) {
+                               foreach my $uploader (@uploaders) {
+                                       push @{$dict{$uploader}}, "$package (U)";
+                               }
+                       }
+               }
+               else {
+                       print STDERR "E: parse error in stanza $.\n";
+                       $errors=1;
+               }
+       }
+}
+else {
+       my @package_names;
+       if ($use_stdin) {
+               while (<>) {
+                       chomp;
+                       s/^\s+//;
+                       s/\s+$//;
+                       push @package_names, split ' ', $_;
+               }
+       }
+       else {
+               @package_names=@ARGV;
+       }
+
+       foreach my $package_name (@package_names) {
+               my ($developer, $uploaders, $print_name)=get_developers_given_package($package_name,$print_binary);
+               if (defined $developer) {
+                       push @{$dict{$developer}}, $print_name;
+                       if ($show_uploaders && @$uploaders) {
+                               foreach my $uploader (@$uploaders) {
+                                       push @{$dict{$uploader}}, "$print_name (U)";
+                               }
+                       }
+               }
+               else {
+                       print STDERR "E: Unknown package: $package_name\n";
+                       $errors=1;
+               }
+       }
+}
+       
+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";
+}
+
+exit($errors);
diff --git a/scripts/deb-reversion.dbk b/scripts/deb-reversion.dbk
new file mode 100644 (file)
index 0000000..1d5c1d5
--- /dev/null
@@ -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">log message</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>
+      &dhcommand; unpacks the specified .deb file, changes the version
+      number in the relevant locations, appends a Debian
+      <filename>changelog</filename> entry with the specified
+      contents, and creates a new .deb 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 .deb file, root privileges are required in order
+      to have the correct permissions and ownerships in the resulting
+      .deb 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 .deb's
+            control 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 .deb 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 .deb file and
+            modifying the changelog, and before packing up the new .deb
+            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>fakeroot</refentrytitle>
+       <manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>dpkg-deb</refentrytitle>
+       <manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>DISCLAIMER</title>
+    <para>
+      &dhpackage; is a tool intended to help porters (e.g. amd64) 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 transfered
+      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 (executable)
index 0000000..1b1d381
--- /dev/null
@@ -0,0 +1,221 @@
+#!/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
+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) eval OLD_VERSION="$opt";;
+    SET_NEW_VERSION) eval NEW_VERSION="$opt";;
+    SET_STRING) eval VERSTR="$opt";;
+    SET_HOOK) eval 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;;
+    --) :;;
+    *)
+      eval opt=$opt
+      if [ -f "$opt" ]; then
+        if [ -n "$DEB" ]; then
+          err "multiple .deb files specified: ${DEB##*/} and $opt"
+          exit 1
+        else
+          case "$opt" in
+            /*.deb) DEB="$opt";;
+             *.deb) 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 /tmp/deb-reversion.XXXXXX)
+  trap "rm -rf $TMPDIR" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+  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 --info $1 | sed -ne 's,^[[:space:]]Version: ,,p'
+}
+
+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
+  for i in changelog{,.Debian}.gz; do
+    [ -f usr/share/doc/${PACKAGE}/$i ] \
+      && LOGFILE=usr/share/doc/${PACKAGE}/$i
+  done
+  [ -z "$LOGFILE" ] && return 1
+  mkdir -p debian
+  zcat $LOGFILE > debian/changelog
+  shift
+  dch $DCH_OPTIONS -v $VERSION -- $@
+  call_hook
+  gzip -9 -c debian/changelog >| $LOGFILE
+  sed -i -e "s,^Version: .*,Version: $VERSION," DEBIAN/control
+  rm -rf debian
+}
+
+repack_file()
+{
+  cd ..
+  dpkg-deb -b package >/dev/null
+  dpkg-name package.deb | sed -e "s,.*['\`]\(.*\).,\1,"
+}
+
+[ -z "${OLD_VERSION:-}" ] && OLD_VERSION="$(get_version $DEB)"
+[ -z "${NEW_VERSION:-}" ] && NEW_VERSION="$(bump_version $OLD_VERSION)"
+
+if [ $CALCULATE -eq 1 ]; then
+  eval echo $NEW_VERSION
+  exit 0
+fi
+
+if [ $(id -u) -ne 0 ]; then
+  err need root rights.
+  exit 5
+fi
+
+make_temp_dir
+cd "$TMPDIR"
+
+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/debc.1 b/scripts/debc.1
new file mode 100644 (file)
index 0000000..ba0c6dd
--- /dev/null
@@ -0,0 +1,122 @@
+.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 .deb and .udeb 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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 \fIDIR\fR
+Look for the \fI.changes\fR, \fI.deb\fR and \fI.udeb\fR files 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\-\-check-dirname-level\fR \fIN\fR
+See the above section "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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\-\-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 "Directory name checking" 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 dpkg-deb (1),
+.BR debdiff (1)
+and
+.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/debchange.1 b/scripts/debchange.1
new file mode 100644 (file)
index 0000000..cb81bad
--- /dev/null
@@ -0,0 +1,445 @@
+.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 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 changelog or NEWS
+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
+http://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
+\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. The alternate \fIchangelog\fR heuristic assumes the package has
+been released unless its changelog contains \fIUNRELEASED\fR in the
+distribution field. If this heuristic is enabled then the distribution will
+default to \fIUNRELEASED\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.
+.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\-\-[no]multimaint\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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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.
+.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 CHANGELOG 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.  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.
+.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.
+.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
+\fIUNRELEASED\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, \fIunstable\fR will be used.
+.TP
+.BR \-\-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)
+.TP
+.BR \-\-no\-force\-save\-on\-release
+Do not do so. Note that a dummy changelog entry made 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 changelog 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 changelog file.
+.TP
+.BR \-\-empty
+When used in combination with \fB\-\-create\fR, suppress the automatic
+addition of an "initial release" 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 ".1" to a non-NMU version number (unless the package
+is Debian native, in which case "+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 Maintainer nor the Uploaders
+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 "+b1" 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 QA upload changelog comment.
+.TP
+.BR \-\-security ", " \-s
+Increment the Debian release number for a Debian Security Team non-maintainer
+upload, and add a Security Team upload changelog comment.
+.TP
+.B \-\-team
+Increment the Debian release number for a team upload, and add a team upload
+changelog comment.
+.TP
+.B \-\-bpo
+Increment the Debian release number for an upload to lenny-backports,
+and add a backport upload changelog comment.
+.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
+.BR \-\-allow\-lower\-version
+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\fR-\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\fR-1 (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,[nnnnn,...]"
+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 \-\-[no]query
+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\-\-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 "low" 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 CHANGELOG
+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\-\-[no]multimaint\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\-\-[no]multimaint\-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 \-\-[no]mainttrailer ", " \-t
+If 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. \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 "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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|changelog\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 "Directory name checking" 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 `date \-R` and affected by the environment variable TZ.
+.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.
+.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 debclean (1),
+.BR dupload (1),
+.BR dput (1),
+.BR debc (1)
+and
+.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.pl b/scripts/debchange.pl
new file mode 100755 (executable)
index 0000000..b9d6d57
--- /dev/null
@@ -0,0 +1,1536 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use 5.008;  # We're using PerlIO layers
+use strict;
+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;
+use File::Copy;
+use File::Basename;
+use Cwd;
+use lib '/usr/share/devscripts';
+use Devscripts::Debbugs;
+
+# 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 $lpdc_broken;
+
+sub have_lpdc {
+    return ($lpdc_broken ? 0 : 1) if defined $lpdc_broken;
+    eval {
+       require Parse::DebControl;
+    };
+
+    if ($@) {
+       if ($@ =~ m%^Can\'t locate Parse/DebControl%) {
+           $lpdc_broken="the libparse-debcontrol-perl package is not installed";
+       } else {
+           $lpdc_broken="couldn't load Parse::DebControl: $@";
+       }
+    }
+    else { $lpdc_broken=''; }
+    return $lpdc_broken ? 0 : 1;
+}
+
+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
+         update the changelog's stamp and open up 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).
+  --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 made 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
+  -s, --security
+         Increment the Debian release number for a Debian Security Team upload
+  --team
+         Increment the Debian release number for a team upload
+  --bpo
+         Increment the Debian release number for a Backports.org upload
+        to "squeeze-backports"
+  -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
+         Allow a version to be less than the current one (e.g., when
+         backporting) if it matches a 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)
+  -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
+  -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: log)
+  --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, -s, --team, --bpo, -l
+  (or their long equivalents) may be used.
+  With no options, one of -i or -a is chosen by looking for a .upload
+  file in the parent directory and checking its contents.
+
+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, 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 = '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 = 'yes';
+my $opt_force_save_on_release = 1;
+
+# 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' => 'log',
+                      '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',
+                      );
+    $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'} =~ /^(log|changelog)$/
+       or $config_vars{'DEBCHANGE_RELEASE_HEURISTIC'}='log';
+    $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'};
+    $opt_force_save_on_release =
+       $config_vars{'DEBCHANGE_FORCE_SAVE_ON_RELEASE'} eq 'yes' ? 1 : 0;
+}
+
+# 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_s, $opt_team, $opt_bpo, $opt_l, $opt_c, $opt_m, $opt_create, $opt_package, @closes);
+my ($opt_news);
+my ($opt_level, $opt_regex, $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" => \$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,
+          "s|security" => \$opt_s,
+          "team" => \$opt_team,
+          "bpo" => \$opt_bpo,
+          "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,
+          "t|mainttrailer!" => \$opt_t,
+          "check-dirname-level=s" => \$opt_level,
+          "check-dirname-regex=s" => \$opt_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,
+          )
+    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 (defined $opt_level) {
+    if ($opt_level =~ /^[012]$/) { $check_dirname_level = $opt_level; }
+    else {
+       fatal "Unrecognised --check-dirname-level value (allowed are 0,1,2)";
+    }
+}
+
+if (defined $opt_regex) { $check_dirname_regex = $opt_regex; }
+
+# Only allow at most one non-help option
+fatal "Only one of -a, -i, -e, -r, -v, -d, -n/--nmu, --bin-nmu, -q/--qa, -s/--security, --team, --bpo, -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_s?1:0) + ($opt_team?1:0) + ($opt_bpo?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)$/;
+}
+
+# Check the distro name given.
+if (defined $opt_D) {
+    # See if we're Debian, Ubuntu or someone else, if we can
+    my $distributor;
+    if (system('command -v lsb_release >/dev/null 2>&1') >> 8 == 0) {
+       $distributor = `lsb_release -is 2>/dev/null`;
+       chomp $distributor;
+    }
+    $distributor ||= 'Debian';
+
+    if ($distributor eq 'Debian') {
+       unless ($opt_D =~ /^(unstable|((old)?stable|testing)(-security)?|experimental|UNRELEASED|lenny-volatile|lenny-backports(-sloppy)?|squeeze-backports|((oldstable|testing)-)?proposed-updates)$/) {
+           warn "$progname warning: Recognised distributions are: unstable, testing, stable,\noldstable, experimental, UNRELEASED, lenny-volatile, lenny-backports{-sloppy,}, squeeze-backports,\n{oldstable-,testing-,}proposed-updates and {testing,stable,oldstable}-security.\nUsing your request anyway.\n";
+           $warnings++ if not $opt_force_dist;
+       }
+    } elsif ($distributor eq 'Ubuntu') {
+       unless ($opt_D =~ /^((dapper|hardy|jaunty|karmic|lucid|maverick|natty)(-updates|-security|-proposed|-backports)?|UNRELEASED)$/) {
+           warn "$progname warning: Recognised distributions are:\n{dapper,hardy,jaunty,karmic,lucid,maverick,natty}{,-updates,-security,-proposed,-backports} and UNRELEASED.\nUsing your request anyway.\n";
+           $warnings++ if not $opt_force_dist;
+       }
+    } else {
+       # Unknown distributor, 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_s || $opt_team || $opt_bpo || $opt_l || $opt_allow_lower) {
+       warn "$progname warning: ignoring -a/-i/-e/-r/-b/--allow-lower-version/-n/--bin-nmu/-q/--qa/-s/--team/--bpo/-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';
+my $bpo_dist = '';
+my %bpo_dists = ( 50, 'lenny', 60, 'squeeze' );
+my $latest_bpo_dist = '60';
+my $CHANGES = '';
+# Changelog urgency, possibly propogated to NEWS files
+my $CL_URGENCY = '';
+
+if (! $opt_create || ($opt_create && $opt_news)) {
+    if (! $opt_create) {
+       open PARSED, qq[dpkg-parsechangelog -l"$changelog_path" | ]
+           or fatal "Cannot execute dpkg-parsechangelog: $!";
+    } elsif ($opt_create && $opt_news) {
+       open PARSED, qq[dpkg-parsechangelog | ]
+           or fatal "Cannot execute dpkg-parsechangelog: $!";
+    } else {
+       fatal "This can't happen: what am I parsing?";
+    }
+
+    my $last;
+    while (<PARSED>) {
+       chomp;
+       if (/^(\S+):\s(.+?)\s*$/) { $changelog{$1}=$2; $last=$1; }
+       elsif (/^(\S+):\s$/) { $changelog{$1}=''; $last=$1; }
+       elsif (/^\s\.$/) { $changelog{$last}.="\n"; }
+       elsif (/^\s(.+)$/) { $changelog{$last}.="$1\n"; }
+       else {
+           fatal "Don't understand dpkg-parsechangelog output: $_";
+       }
+    }
+
+    close PARSED
+       or fatal "Problem executing dpkg-parsechangelog: $!";
+    if ($?) { fatal "dpkg-parsechangelog failed!"; }
+
+    # 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'};
+    ($MAINTAINER,$EMAIL) = ($changelog{'Maintainer'} =~ /^([^<]+) <(.*)>/);
+    fatal "No distribution in changelog!"
+       unless exists $changelog{'Distribution'};
+    $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;
+       open PARSED, qq[dpkg-parsechangelog -l"$real_changelog_path" | ]
+           or fatal "Cannot execute dpkg-parsechangelog: $!";
+       while (<PARSED>) {
+           chomp;
+           if (m%^Version:\s+(\S+)$%) {
+               $VERSION = $1;
+               $VERSION =~ s/~$//;
+               $found_version = 1;
+               last if $found_urgency;
+           } elsif (m%^Urgency:\s+(\S+)(\s|$)%) {
+               $CL_URGENCY = $1;
+               $found_urgency = 1;
+               last if $found_version;
+           } elsif (m%^$%) {
+               last;
+           }
+       }
+       close PARSED
+           or fatal "Problem executing dpkg-parsechangelog: $!";
+       if ($?) { fatal "dpkg-parsechangelog failed!"; }
+    }
+
+    # 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');
+
+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;
+    }
+}
+
+# Now use the gleaned values to detemine our MAINTAINER and EMAIL values
+if (! $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 (exists $env{'DEBEMAIL'}) { $EMAIL = $env{'DEBEMAIL'}; }
+    elsif (exists $env{'EMAIL'}) { $EMAIL = $env{'EMAIL'}; }
+    else {
+       my $addr;
+       if (open MAILNAME, '/etc/mailname') {
+           chomp($addr = <MAILNAME>);
+           close MAILNAME;
+       }
+       if (!$addr) {
+           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)
+
+#####
+
+if ($opt_auto_nmu eq 'yes' and ! $opt_v and ! $opt_l and ! $opt_s and 
+    ! $opt_team and ! $opt_qa and ! $opt_bpo and ! $opt_bn and ! $opt_n and ! $opt_c and
+    ! (exists $ENV{'CHANGELOG'} and length $ENV{'CHANGELOG'}) and
+    ! $opt_create and ! $opt_a_passed and ! $opt_r and ! $opt_e and
+    ! ($opt_release_heuristic eq 'changelog' and
+       $changelog{'Distribution'} eq 'UNRELEASED' and ! $opt_i_passed)) {
+
+    if (-f 'debian/control') {
+       if (have_lpdc()) {
+           my $parser = new Parse::DebControl;
+           my $deb822 = $parser->parse_file('debian/control', {stripComments => 'true'});
+           my $uploader = decode_utf8($deb822->[0]->{'Uploaders'}) || '';
+           my $maintainer = decode_utf8($deb822->[0]->{'Maintainer'});
+           my @uploaders = split(/,\s+/, $uploader);
+
+           my $packager = "$MAINTAINER <$EMAIL>";
+
+           if (! grep { $_ eq $packager } ($maintainer, @uploaders) and
+               $packager ne $changelog{'Maintainer'} and ! $opt_team) {
+               $opt_n=1;
+               $opt_a=0;
+           }
+       } else {
+           warn "$progname: skipping automatic NMU detection: $lpdc_broken\n";
+       }
+    } 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_cmd = ($opt_tz ? "TZ=$opt_tz " : "") . "date -R";
+chomp(my $DATE=`$date_cmd`);
+
+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_s && ! $opt_team && ! $opt_bpo &&
+    ! $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.";
+               $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_s || $opt_team || $opt_bpo || $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 (system("dpkg --compare-versions $VERSION le $NEW_VERSION" .
+                 " 2>/dev/null 1>&2")) {
+           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 (
+               ($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_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_bpo_dist+1";
+           } 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
+               $end++;
+
+               # Attempt to set the distribution for a backport correctly
+               # based on the version of the previous backport
+               if ($opt_bpo) {
+                   my $previous_dist = $start;
+                   $previous_dist =~ s/^.*~bpo([0-9]+)\+$/$1/;
+                   if (defined $previous_dist and defined
+                       $bpo_dists{$previous_dist}) {
+                       $bpo_dist = $bpo_dists{$previous_dist} . '-backports';
+                   } else {
+                       # Fallback to using the previous distribution
+                       $bpo_dist = $changelog{'Distribution'};
+                   }
+               }
+
+               if(! ($opt_s or $opt_n)) {
+                   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_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) {
+       $bpo_dist ||= $bpo_dists{$latest_bpo_dist} . '-backports';
+    }
+    my $distribution = $opt_D || $bpo_dist || (($opt_release_heuristic eq 'changelog') ? "UNRELEASED" : $DISTRIBUTION);
+
+    my $urgency = $opt_u;
+    if ($opt_news) {
+       $urgency ||= $CL_URGENCY;
+    }
+    $urgency ||= 'low';
+
+    if (($opt_v or $opt_i or $opt_l or $opt_d) and
+       $opt_release_heuristic eq "changelog" and
+       $changelog{'Distribution'} eq "UNRELEASED" and
+       $distribution eq "UNRELEASED") {
+
+       $merge = 1;
+    } else {
+       print O "$PACKAGE ($NEW_VERSION) $distribution; urgency=$urgency\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) {
+           print O "  * Non-maintainer upload by the 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 $bpo_dist.\n";
+           $line = 1;
+       }
+       if (@closes_text or $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 (/^  \[ $MAINTAINER \]$/ && $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 $bpo_dists{$1}) {
+                   $dist_indicator = "$bpo_dists{$1}-backports";
+               }
+           }
+       }
+       elsif (/  \* (?:Upload to|Rebuild for) (\S+).*$/) {
+           ($dist_indicator = $1) =~ s/[!:.,;]$//;
+           chomp $dist_indicator;
+       }
+       elsif (/^ --\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;
+               } 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) {
+           # ...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 ||= 'low';
+    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: $!";
+
+    system("sensible-editor +$line $changelog_path.dch") == 0 or
+       fatal "Error editing $changelog_path";
+
+    if (! @closes_text) { # so must have a changelog added by hand
+       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 ($new_version, $new_sversion, $new_uversion);
+    open PARSED, "dpkg-parsechangelog |"
+       or fatal "Cannot execute dpkg-parsechangelog: $!";
+    while (<PARSED>) {
+       if (/^Version:\s(.+?)\s*$/) { $new_version=$1; }
+    }
+
+    close PARSED
+       or fatal "Problem executing dpkg-parsechangelog: $!";
+    if ($?) { fatal "dpkg-parsechangelog failed!" }
+
+    fatal "No version number in debian/changelog!"
+       unless defined $new_version;
+
+    # Is this a native Debian package, i.e., does it have a - in the
+    # version number?
+    $new_version =~ s/^\d+://;  # remove epoch
+    ($new_uversion=$new_version) =~ s/-[^-]*$//;  # remove revision
+
+    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: $!";
+       }
+       # 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\.(gz|bz2|lzma|xz)$/ } @origs;
+       if ($num_origs == 0) {
+           warn "$progname warning: no orig tarball found for the new version.\n";
+       }
+    }
+}
+
+exit 0;
+
+
+# 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 http://rt.perl.org/rt3/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";
+       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 (executable)
index 0000000..f8a2328
--- /dev/null
@@ -0,0 +1,977 @@
+#!/usr/bin/perl -w
+#
+# debcheckout: checkout the development repository of a Debian package
+# Copyright (C) 2007-2009  Stefano Zacchiroli <zack@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/>.
+#
+
+# 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 vim
+package exposes such information with a field like S<Vcs-Git:
+git://git.debian.org/git/pkg-vim/vim.git>, you can see it by grepping through
+C<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
+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, bzr, cvs,
+darcs, git, hg, 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<http://alioth.debian.org>) URL rewriting is attempted before
+checking out, to ensure that the repository can be committed to. For example,
+for subversion repositories hosted on alioth this means that
+S<svn+ssh://svn.debian.org/...> will be used instead of
+S<svn://svn.debian.org/...>.
+
+=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<-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 "svn");
+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>, B<--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 mutliple
+files.
+
+=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<git branch --track>, see 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 "*" 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: REGEXP
+TEXT REGEXP 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 $1, $2, ... and so on.
+
+This setting can be used to enable authenticated mode for most repositories
+out there.  Note that the Debian repositories on S<alioth.debian.org>
+(S<$vcs.debian.org>) are implicitly defined.
+
+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.
+
+=back
+
+=head1 SEE ALSO
+
+apt-cache(8), Section 6.2.5 of the Debian Developer's Reference (for
+more information about Vcs-* fields): S<http://www.debian.org/doc/developers-reference/best-pkging-practices.html#bpp-vcs>
+
+=head1 AUTHOR
+
+debcheckout and this manpage have been written by Stefano Zacchiroli
+<zack@debian.org>
+
+=cut
+
+use feature 'switch';
+use strict;
+use warnings;
+use Getopt::Long;
+use Pod::Usage;
+use File::Basename;
+use File::Copy qw/copy/;
+use File::Temp qw/tempdir/;
+use Cwd;
+use lib '/usr/share/devscripts';
+use Devscripts::Versort;
+
+my @files = ();          # files to checkout
+
+# <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' => '',
+    );
+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.
+sub find_repo($$) {
+    my ($pkg, $desired_ver) = @_;
+    my @repo = (0, "");
+    my $found = 0;
+    my $version = "";
+    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;
+       } elsif ($line =~ /^$/) {
+           push (@repos, [$version, $type, $url])
+               if ($version and $type and $url and
+                   ($desired_ver eq "" or $desired_ver eq $version));
+           $version = "";
+           $type = "";
+           $url = "";
+       }
+    }
+    close(APT);
+    die "unknown package '$pkg'\n" unless $found;
+
+    if (@repos) {
+       @repos = Devscripts::Versort::versort(@repos);
+       @repo = ($repos[0][1], $repos[0][2])
+    }
+    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 Alioth'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;
+
+    given ($repo_type) {
+       when ("bzr") {
+           $url =~ s|^[\w+]+://(bzr\.debian\.org)/(.*)|bzr+ssh://$user$1/bzr/$2|;
+           $url =~ s[^\w+://(?:(bazaar|code)\.)?(launchpad\.net/.*)][bzr+ssh://${user}bazaar.$2];
+       }
+       when ("darcs")  {
+           if ($url =~ m|(~)|) {
+               $user_url =~ s|^\w+://(darcs\.debian\.org)/(~)(.*?)/.*|$3|;
+               die "the local user '$user_local' doesn't own the personal repository '$url'\n"
+                   if $user_local ne $user_url and !$dont_act;
+               $url =~ s|^\w+://(darcs\.debian\.org)/(~)(.*?)/(.*)|$user$1:~/public_darcs/$4|;
+           } else {
+               $url =~ s|^\w+://(darcs\.debian\.org)/(.*)|$user$1:/$2|;
+           }
+       }
+       when ("git") {
+           if ($url =~ m%(/users/|~)%) {
+               $user_url =~ s|^\w+://(git\.debian\.org)/git/users/(.*?)/.*|$2|;
+               $user_url =~ s|^\w+://(git\.debian\.org)/~(.*?)/.*|$2|;
+
+               die "the local user '$user_local' doesn't own the personal repository '$url'\n"
+                   if $user_local ne $user_url and !$dont_act;
+               $url =~ s|^\w+://(git\.debian\.org)/git/users/.*?/(.*)|git+ssh://$user$1/~/public_git/$2|;
+               $url =~ s|^\w+://(git\.debian\.org)/~.*?/(.*)|git+ssh://$user$1/~/public_git/$2|;
+           } else {
+               $url =~ s|^\w+://(git\.debian\.org)/(?:git/)?(.*)|git+ssh://$user$1/git/$2|;
+           }
+       }
+       # "hg ssh://" needs an extra slash so paths are not based in the user's $HOME
+       when ("hg") {
+           $url =~ s|^\w+://(hg\.debian\.org/)|ssh://$user$1/|;
+       }
+       when ("svn") {
+           $url =~ s|^\w+://(svn\.debian\.org)/(.*)|svn+ssh://$user$1/svn/$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. alioth)\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) = @_;
+
+    given ($repo_type) {
+       when ('bzr') {
+           # bzr.d.o explicitly doesn't run a smart server.  Need to use nosmart
+           $repo_url =~ s|^http://(bzr\.debian\.org)/(.*)|nosmart+http://$1/$2|;
+       }
+    }
+    return $repo_url;
+}
+
+# Checkout a given repository in a given destination directory.
+sub checkout_repo($$$) {
+    my ($repo_type, $repo_url, $destdir) = @_;
+    my @cmd;
+
+    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") { @cmd = ("git", "clone", $repo_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 = $? >> 8;
+    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 (($? >> 8) != 0) {
+                   chdir $oldcwd;
+                   return ($? >> 8);
+               } 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;
+}
+
+# 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) = @_;
+
+    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)(\+ssh)?:/) {
+       $repo_type = $1;
+    } elsif ($repo_url =~ /^https?:\/\/(svn|git|hg|bzr|darcs)\.debian\.org/) {
+       $repo_type = $1;
+    }
+    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 $print_mode = 0;          # print only mode
+    my $details_mode = 0;        # details only mode
+    my $repo_type = "svn";  # default repo typo, overridden by '-t'
+    my $repo_url = "";   # repository URL
+    my $user = "";       # login name (authenticated mode only)
+    my $browse_url = "";    # online browsable repository URL
+    my $git_track = "";     # list of remote GIT branches to --track
+    GetOptions(
+       "auth|a" => \$auth,
+       "help|h" => sub { pod2usage({-exitval => 0, -verbose => 1}); },
+       "print|p" => \$print_mode,
+       "details|d" => \$details_mode,
+       "type|t=s" => \$repo_type,
+       "user|u=s" => \$user,
+       "file|f=s" => sub { push(@files, $_[1]); },
+       "git-track=s" => \$git_track,
+       ) 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);
+
+    # -u|--user implies -a|--auth
+    $auth = 1 if length $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 = "";
+    } else {  # package name passed on the command line
+       ($repo_type, $repo_url) = 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:
+ `http://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);
+    $repo_url = set_auth($repo_type, $repo_url, $user, $dont_act)
+       if $auth and not @files;
+    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);
+    }   # 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 = $? >> 8;
+           print STDERR "TopGit population failed\n" if $rc != 0;
+       }
+       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";
+           }
+       }
+    }
+    exit($rc);
+}
+
+main();
+
diff --git a/scripts/debclean.1 b/scripts/debclean.1
new file mode 100644 (file)
index 0000000..858560c
--- /dev/null
@@ -0,0 +1,113 @@
+.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 debian/rules 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
+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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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 "Directory name checking" 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)
+and
+.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 (executable)
index 0000000..fa82018
--- /dev/null
@@ -0,0 +1,205 @@
+#! /bin/bash
+
+PROGNAME=`basename $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 | egrep '^(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`"
+for i in `find . -type d -name "debian"`; 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 | sed -n 's/^Source: //p'`"
+    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 (executable)
index 0000000..799aeb2
--- /dev/null
@@ -0,0 +1,849 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+debcommit - commit changes to a package
+
+=head1 SYNOPSIS
+
+B<debcommit> [B<--release>] [B<--release-use-changelog>] [B<--message=>I<text>] [B<--noact>] [B<--diff>] [B<--confirm>] [B<--edit>] [B<--changelog=>I<path>] [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 --release, if there are uncommited
+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 I<files to commit>
+
+Specify which files to commit (debian/changelog is added to the list
+automatically.)
+
+=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-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.
+
+=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 --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 --sign-tags 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 --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 --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 --fixes
+options to "bzr commit" will be generated to associate the revision and the bugs.
+
+=back
+
+=cut
+
+use warnings;
+use strict;
+use Getopt::Long;
+use Cwd;
+use Dpkg::Changelog;
+use File::Basename;
+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
+   --no-strip-message  Do not strip a leading '* ' (default)
+   --sign-tags         Enable signing of tags (git only)
+   --no-sign-tags      Do not sign tags (default)
+   -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 $signtags=0;
+my $changelog;
+my $keyid;
+my $version;
+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_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_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;
+    $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
+
+Getopt::Long::Configure("bundling");
+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-tags!" => \$signtags,
+                "R|release-use-changelog!" => \$release_use_changelog,
+                "h|help" => sub { usage(); exit 0; },
+                "v|version" => sub { version(); exit 0; },
+                )) {
+    die "Usage: debcommit [--release] [--release-use-changelog] [--message=text] [--noact] [--diff] [--confirm] [--edit] [--changelog=path] [--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;
+}
+
+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) {
+    eval {
+       require Dpkg::Changelog::Parse;
+    };
+    if (not $@) {
+       # dpkg >= 1.15.5.2
+       my $log = Dpkg::Changelog::Parse::changelog_parse(file => $changelog);
+       if ($log->{Distribution} =~ /UNRELEASED/) {
+           die "debcommit: $changelog says it's UNRELEASED\nTry running dch --release first\n";
+       }
+       $version = $log->{Version};
+    }
+    else {
+       open (C, "<$changelog" ) || die "debcommit: cannot read $changelog: $!";
+       my $top=<C>;
+       if ($top=~/UNRELEASED/) {
+           die "debcommit: $changelog says it's UNRELEASED\nTry running dch --release first\n";
+       }
+       close C;
+
+       $version=`dpkg-parsechangelog -l\Q$changelog\E | grep '^Version:' | cut -f 2 -d ' '`;
+       chomp $version;
+    }
+
+    $message="releasing version $version" if ! defined $message;
+}
+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($version) if $release;
+}
+
+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 (-d ".git") {
+       return "git";
+    }
+    if (-d ".hg") {
+       return "hg";
+    }
+    if (-d "_darcs") {
+       return "darcs";
+    }
+
+    # Test for this file to avoid interactive prompting from svk.
+    if (-d "$ENV{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";
+       }
+    }
+
+    # .git may be in a parent directory, rather than the current
+    # directory, if multiple packages are kept in one git repository.
+    my $dir=getcwd();
+    while ($dir=~s/[^\/]*\/?$// && length $dir) {
+       if (-d "$dir/.git") {
+           return "git";
+       }
+    }
+
+    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;
+
+    my $debian_closes = [];
+    eval {
+       require Dpkg::Changelog::Entry::Debian;
+    };
+    if (not $@) {
+       # dpkg >= 1.15.5.2
+       push(@$debian_closes,
+            Dpkg::Changelog::Entry::Debian::find_closes($message));
+    } else {
+       $debian_closes = Dpkg::Changelog::find_closes($message);
+    }
+    my $launchpad_closes = [];
+    eval {
+       require Dpkg::Vendor::Ubuntu;
+    };
+    if (not $@) {
+       # dpkg >= 1.15.0
+       $launchpad_closes = Dpkg::Vendor::Ubuntu::find_launchpad_closes($message);
+    } elsif (exists &Dpkg::Changelog::find_launchpad_closes) {
+       # Ubuntu dpkg << 1.15.0
+       $launchpad_closes = Dpkg::Changelog::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");
+       }
+       $action_rc = $diffmode
+           ? action($prog, "diff", @files_to_commit)
+           : action($prog, "commit", "-m", $message, @files_to_commit);
+    }
+    elsif ($prog eq 'git') {
+       if (! @files_to_commit && $all) {
+           # check to see if the WC is clean. git-commit would exit
+           # nonzero, so don't run it.
+           my $status=`LANG=C git status`;
+           if ($status=~/nothing to commit \(working directory clean\)/) {
+                   print $status;
+                   return;
+           }
+       }
+       if ($diffmode) {
+           $action_rc = action($prog, "diff", @files_to_commit);
+       } else {
+           if ($all) {
+               @files_to_commit=("-a")
+           }
+           $action_rc = action($prog, "commit", "-m", $message, @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 @fixes_arg = bzr_find_fixes($message);
+           $action_rc = action($prog, "commit", "-m", $message,
+               @fixes_arg, @files_to_commit);
+       }
+    }
+    elsif ($prog eq 'darcs') {
+       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 $tag=shift;
+    
+    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", "tagging version $tag")) {
+           if (! action($prog, "mkdir", $tagpath,
+                        "-m", "create tag directory") ||
+               ! action($prog, "copy", $svnpath, "$tagpath/$tag",
+                        "-m", "tagging version $tag")) {
+               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=~s/^[0-9]+://; # strip epoch
+       $tag=~tr/~/./; # mangle for git
+       if ($tag=~/-/) {
+           # not a native package, so tag as a debian release
+           $tag="debian/$tag";
+       }
+
+       if ($signtags) {
+               if (defined $keyid) {
+                       if (! action($prog, "tag", "-u", $keyid, "-m",
+                                    "tagging version $tag", $tag)) {
+                               die "debcommit: failed tagging with $tag\n";
+                       }
+               }
+               else {
+                       if (! action($prog, "tag", "-s", "-m",
+                                    "tagging version $tag", $tag)) {
+                               die "debcommit: failed tagging with $tag\n";
+                       }
+               }
+       }
+       elsif (! action($prog, "tag", $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", "tagging version $tag", $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', '-w', '--no-color');
+               } else {
+                   @diffcmd = ('git', '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";
+    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
+
+svnpath(1).
+
+=cut
diff --git a/scripts/debdiff.1 b/scripts/debdiff.1
new file mode 100644 (file)
index 0000000..b6d65b0
--- /dev/null
@@ -0,0 +1,227 @@
+.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.
+.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.
+.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,FILE,..."
+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 \fBwdfiff\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 that match \fIPATTERN\fR.  Multiple uses of this option
+are permitted.
+.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
+\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
+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.
+.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 dpkg-deb (1),
+.BR wdiff (1),
+.BR interdiff (1),
+.BR diffstat (1)
+and
+.BR devscripts.conf (5).
+.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.pl b/scripts/debdiff.pl
new file mode 100755 (executable)
index 0000000..6da8162
--- /dev/null
@@ -0,0 +1,1084 @@
+#! /usr/bin/perl -w
+
+# 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 Cwd;
+use Dpkg::IPC;
+use File::Basename;
+use File::Copy qw/ cp move /;
+use File::Path qw/ rmtree /;
+use File::Temp qw/ tempdir tempfile /;
+use lib '/usr/share/devscripts';
+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---";
+
+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
+                            (multiple permitted)
+   --move-regex FROM TO,  The prefix FROM in first packages has
+                            been renamed TO in the new 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 that 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
+
+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 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 $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 $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',
+                      );
+    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';
+
+    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;
+
+    $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;
+
+}
+
+# Are they a pair of debs, changes or dsc files, or a list of debs?
+my $type = '';
+my @excludes = ();
+my @move = ();
+my %renamed = ();
+
+
+# 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] =~ /^(--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] =~ /^--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;
+    }
+}
+
+my $guessed_version = 0;
+
+# 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 "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, "../".$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
+# %deb1 and %deb2, 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\.(gz|bz2|lzma|xz)$/) {
+                   $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) {
+       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
+
+       spawn(exec => ['interdiff', '-z', @diff_opts, $diffs[1], $diffs[2]],
+             to_file => $filename,
+             wait_child => 1);
+       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;
+       }
+    } else {
+       # Any other situation
+       if ($origs[1] eq $origs[2] and
+           defined $diffs[1] and defined $diffs[2] and
+           scalar(@excludes) == 0 and !$wdiff_source_control) {
+           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');
+           push (@opts, '--skip-patches') if $dscformats[$i] eq '3.0 (quilt)';
+           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 = $_;
+                   my $found = 0;
+                   my $comp = "";
+
+                   if ($_ =~ /tar.gz$/) {
+                       $filename =~ s%(.*)\.tar\.gz$%$1%;
+                       $tarballs++;
+                       $found = 1;
+                       $comp = "gzip";
+                   }
+                   if ($_ =~ /tar.bz$/ || $_ =~ /tar.bz2$/) {
+                       $filename =~ s%(.*)\.tar\.bz2?$%$1%;
+                       $tarballs++;
+                       $found = 1;
+                       $comp = "bzip2";
+                   }
+
+                   if ($found) {
+                       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);
+       }
+
+       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') {
+           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;
+               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 = '';
+       eval {
+           spawn(exec => ['wdiff', @opts, "$dir1/$cf", "$dir2/$cf"],
+               to_string => \$wdiff,
+               wait_child => 1);
+       };
+       if ($@ and $@ !~ /gave error exit status 1/) {
+           print "$@\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 $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 (file)
index 0000000..534f689
--- /dev/null
@@ -0,0 +1,131 @@
+.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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 \fIDIR\fR
+Look for the \fI.changes\fR and \fI.deb\fR files 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\-\-upgrade\fR
+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 "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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\-\-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 "Directory name checking" 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)
+and
+.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.pl b/scripts/debi.pl
new file mode 100755 (executable)
index 0000000..cb1b903
--- /dev/null
@@ -0,0 +1,412 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use 5.008;
+use strict;
+use Getopt::Long;
+use File::Basename;
+use filetest 'access';
+use Cwd;
+use Dpkg::Control;
+use Dpkg::Changelog::Parse;
+
+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
+    --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 = '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%;
+    if (! -d $config_vars{'DEBRELEASE_DEBS_DIR'}) {
+       $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);
+GetOptions("help" => \$opt_help,
+          "version" => \$opt_version,
+          "a=s" => \$opt_a,
+          "t=s" => \$opt_t,
+          "debs-dir=s" => \$opt_debsdir,
+          "multi" => \$opt_multi,
+          "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,
+          )
+    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 ($opt_debsdir) {
+    $opt_debsdir =~ s%/+%/%;
+    $opt_debsdir =~ s%(.)/$%$1%;
+    if (! -d $opt_debsdir) {
+       $debsdir_warning = "--debs-dir directory $opt_debsdir does not exist!";
+    }
+    $debsdir = $opt_debsdir;
+}
+
+if ($debsdir_warning) {
+    die "$progname: $debsdir_warning\n";
+}
+
+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 $chdir = 0;
+
+if (! defined $changes) {
+    # 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 ".svn" 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";
+    }
+}
+
+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;
+       $deb =~ /^([a-z0-9+\.-]+)_/ or warn "unrecognised .deb name: $deb\n";
+       # don't want other archs' .debs:
+       next unless $deb =~ /[_+]($arch|all)[\.+]/;
+       my $pkg = $deb;
+       $pkg =~ s/_.*$//;
+
+       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) {
+       system('debpkg', @upgrade, '--unpack', @debs) == 0
+           or die "$progname: debpkg --unpack failed \n";
+       system($install_tool, '-f', 'install') == 0
+           or die "$progname: " . $install_tool . ' -f install failed\n';
+    } else {
+       system('debpkg', @upgrade, '-i', @debs) == 0
+           or die "$progname: debpkg -i failed\n";
+    }
+} else {
+    # $progname eq 'debc'
+    foreach my $deb (@debs) {
+       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/debpkg-wrapper.c b/scripts/debpkg-wrapper.c
new file mode 100644 (file)
index 0000000..4a4d48f
--- /dev/null
@@ -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 (file)
index 0000000..77df022
--- /dev/null
@@ -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 (executable)
index 0000000..9fcee6b
--- /dev/null
@@ -0,0 +1,94 @@
+#! /usr/bin/perl -w
+
+# 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 <http://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 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 $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/debrelease.1 b/scripts/debrelease.1
new file mode 100644 (file)
index 0000000..521c52d
--- /dev/null
@@ -0,0 +1,139 @@
+.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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 changes mode: This signifies that \fBdebrelease\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the changes file, allowing for the
+changes files produced by \fBdpkg-cross\fR.
+.TP
+\fB\-\-debs\-dir\fR \fIDIR\fR
+Look for the \fI.changes\fR and \fI.deb\fR files 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\-\-check-dirname-level\fR \fIN\fR
+See the above section "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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 "Directory name checking" 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 dupload (1),
+.BR dput (1)
+and
+.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 (executable)
index 0000000..c7b9d84
--- /dev/null
@@ -0,0 +1,338 @@
+#! /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 <http://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=`basename $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 | egrep "^(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 debdir
+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 | sed -n 's/^Source: //p'`" \
+    "source package"
+mustsetvar version "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+    "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
+else
+    mustsetvar arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -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/debrsign.1 b/scripts/debrsign.1
new file mode 100644 (file)
index 0000000..b41e5a3
--- /dev/null
@@ -0,0 +1,73 @@
+.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 [options] [\fIuser@\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
+changes 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 changes mode: This signifies that \fBdebrsign\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the changes file, allowing for the
+changes files produced by \fBdpkg-cross\fR.
+.TP
+\fB\-\-path \fIremote-path\fR
+Specify a path to the GPG or PGP 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)
+and
+.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 (executable)
index 0000000..5133dae
--- /dev/null
@@ -0,0 +1,265 @@
+#! /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.
+#
+# Usage: debrsign [options] [user@]remotehost [changes or dsc file]
+# You may also provide the following options, which will be passed
+# on to signchanges:
+#  -m<maintainer>  Sign using key of <maintainer>
+#  -k<key>     The PGP/GPG key ID to use; overrides -m
+#  -p<type>    <type> is either pgp or gpg to specify which to use
+#  -spgp,-sgpg The program takes arguments like pgp or gpg respectively
+#  -S          Source-only .changes file
+#  -a<arch>    Debian architecture
+#  -t<type>    GNU machine type
+#  --multi     Search for multiarch .changes files
+#  --help, --version
+
+# 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 <http://www.gnu.org/licenses/>.
+
+# Abort if anything goes wrong
+set -e
+
+PROGNAME=`basename $0`
+
+usage () {
+    echo \
+"Usage: debrsign [options] [username@]remotehost [changes or dsc]
+  Options:
+    -sgpg, -spgp    Sign takes options like GPG, PGP respectively
+    -pgpg, -ppgp    Sign using GPG, PGP respectively
+    -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/PGP 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 | egrep '^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/'`
+               ;;
+           *)  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 | sed -n 's/^Source: //p'`" \
+           "source package"
+       mustsetvar version "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+           "source version"
+
+       if [ "x$sourceonly" = x ]
+       then
+           mustsetvar arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`" "build architecture"
+       else
+           arch=source
+       fi
+
+       sversion=`echo "$version" | perl -pe 's/^\d+://'`
+       pv="${package}_${sversion}"
+       pva="${package}_${sversion}${arch:+_${arch}}"
+       dsc="../$pv.dsc"
+       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
+
+changesbase=`basename "$changes"`
+dscbase=`basename "$dsc"`
+
+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 "$dscbase" "$changes"
+    then
+       if [ ! -f "$dsc" -o ! -r "$dsc" ]
+       then
+           echo "Can't find or can't read dsc file $dsc!" >&2
+           exit 1
+       fi
+
+       # Now do the real work
+       withecho scp "$changes" "$dsc" "$remotehost:\$HOME"
+       withecho ssh -t "$remotehost" "debsign $signargs $changesbase"
+       withecho scp "$remotehost:\$HOME/$changesbase" "$changes"
+       withecho scp "$remotehost:\$HOME/$dscbase" "$dsc"
+       withecho ssh "$remotehost" "rm -f $changesbase $dscbase"
+    else
+       withecho scp "$changes" "$remotehost:\$HOME"
+       withecho ssh -t "$remotehost" "debsign $signargs $changesbase"
+       withecho scp "$remotehost:\$HOME/$changesbase" "$changes"
+       withecho ssh "$remotehost" "rm -f $changesbase"
+    fi
+
+    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 (file)
index 0000000..39c5c21
--- /dev/null
@@ -0,0 +1,155 @@
+.TH DEBSIGN 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+debsign \- sign a Debian changes and dsc file pair using GPG/PGP
+.SH SYNOPSIS
+\fBdebsign\fR [options] [\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 either an unsigned \fI.dsc\fR
+file or an unsigned \fI.changes\fR file (along with 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 using the GNU Privacy Guard or PGP.  It is
+careful to calculate the size and checksums of the newly signed
+\fI.dsc\fR file and replace the original values in the \fI.changes\fR
+file.
+.PP
+If a \fI.changes\fR, \fI.dsc\fR or \fI.commands\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
+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 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).
+.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 \fI.changes\fR and \fI.dsc\fR files live on the specified remote
+host.  In this case, a \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:\fIchanges\fR syntax is
+permitted as an alternative.  Wildcards (\fB*\fR etc.) are allowed.
+.TP
+.B \-p\fIprogname\fR
+\fIprogname\fR is one of \fBpgp\fR or \fBgpg\fR, and specifies which
+signing program is to be called.  The default is \fBgpg\fR if
+\fI~/.gnupg/secring.gpg\fR exists and \fBpgp\fR otherwise.
+.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\-spgp\fR, \fB\-sgpg\fR
+Whether the signing program is to be called with command line
+arguments like those of \fBpgp\fR or \fBgpg\fR.
+.TP
+\fB\-S\fR
+Look for a source-only \fI.changes\fR file instead of a binary-build
+changes 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 changes mode: This signifies that \fBdebsign\fR should
+use the most recent file with the name pattern
+\fIpackage_version_*+*.changes\fR as the changes file, allowing for the
+changes 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 \fI.changes\fR and \fI.dsc\fR files 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_SIGNLIKE
+This must be \fIgpg\fR or \fIpgp\fR and is equivalent to using either
+\fB\-sgpg\fR or \fB\-spgp\fR respectively.
+.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 DEBRELEASE_DEBS_DIR
+This specifies the directory in which to look for the \fI.changes\fR
+and \fI.dsc\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.
+.SH "SEE ALSO"
+.BR debrsign (1),
+.BR dpkg-buildpackage (1),
+.BR dpkg-architecture (1),
+.BR debuild (1),
+.BR md5sum (1),
+.BR sha1sum (1),
+.BR sha256sum (1),
+.BR gpg (1),
+.BR pgp (1),
+.BR scp (1)
+and
+.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.sh b/scripts/debsign.sh
new file mode 100755 (executable)
index 0000000..52bf7e5
--- /dev/null
@@ -0,0 +1,751 @@
+#! /bin/sh
+
+# This program is designed to PGP sign a .dsc and .changes file pair
+# in the form needed for a legal Debian upload.  It is based in part
+# on dpkg-buildpackage.  It takes one argument: the name of the
+# .changes file.  It also takes some options:
+#  -e<maintainer>  Sign using key of <maintainer> (takes precedence over -m)
+#  -m<maintainer>  Sign using key of <maintainer>
+#  -k<key>     The PGP/GPG key ID to use; overrides -m
+#  -p<type>    <type> is either pgp or gpg to specify which to use
+#  -spgp,-sgpg The program takes arguments like pgp or gpg respectively
+#  -S          Source-only .changes file
+#  -a<arch>    Debian architecture
+#  -t<type>    GNU machine type
+#  --multi     Search for multiarch .changes files
+#  -r [username@]remotehost  The changes (and dsc) files live on remotehost
+#  --no-conf, --noconf  Don't read configuration files
+#  --help, --version
+
+# 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 <http://www.gnu.org/licenses/>.
+
+# Abort if anything goes wrong
+set -e
+
+PRECIOUS_FILES=0
+PROGNAME=`basename $0`
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+# Temporary directories
+signingdir=""
+remotefilesdir=""
+
+trap "cleanup_tmpdir" EXIT HUP INT QUIT KILL SEGV PIPE TERM
+
+# --- 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, dsc or commands file]
+  Options:
+    -r [username@]remotehost
+                    The machine on which the changes/dsc files live.
+                    A changes file with full pathname (or relative
+                    to the remote home directory) must be given in
+                    such a case
+    -k<keyid>       The key to use for signing
+    -p<sign-command>  The command to use for signing
+    -sgpg           The sign-command is called like GPG
+    -spgp           The sign-command is called like PGP
+    -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 .changes / .dsc files 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 a commands or dsc or changes file is specified, it and any .dsc files in
+  the changes file 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"
+}
+
+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 savestty=$(stty -g 2>/dev/null) || true
+    mksigningdir
+    UNSIGNED_FILE="$signingdir/$(basename "$1")"
+    ASCII_SIGNED_FILE="${UNSIGNED_FILE}.asc"
+    (cat "$1" ; echo "") > "$UNSIGNED_FILE"
+
+    if [ $signinterface = gpg ]
+    then
+       gpgversion=`gpg --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 "$2" --clearsign \
+                   --list-options no-show-policy-urls \
+                   --armor --textmode --output "$ASCII_SIGNED_FILE"\
+                   "$UNSIGNED_FILE" || \
+               { SAVESTAT=$?
+                 echo "$PROGNAME: gpg error occurred!  Aborting...." >&2
+                 stty $savestty 2>/dev/null || true
+                 exit $SAVESTAT
+               }
+       else
+               $signcommand --local-user "$2" --clearsign \
+                   --no-show-policy-url \
+                   --armor --textmode --output "$ASCII_SIGNED_FILE" \
+                   "$UNSIGNED_FILE" || \
+               { SAVESTAT=$?
+                 echo "$PROGNAME: gpg error occurred!  Aborting...." >&2
+                 stty $savestty 2>/dev/null || true
+                 exit $SAVESTAT
+               }
+       fi
+    else
+       $signcommand -u "$2" +clearsig=on -fast \
+           < "$UNSIGNED_FILE" > "$ASCII_SIGNED_FILE"
+    fi
+    stty $savestty 2>/dev/null || true
+    echo
+    PRECIOUS_FILES=$(($PRECIOUS_FILES + 1))
+    movefile "$ASCII_SIGNED_FILE" "$1"
+}
+
+withecho () {
+    echo " $@"
+    "$@"
+}
+
+# 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 description for message (dsc or changes)
+check_already_signed () {
+    [ "`head -n 1 \"$1\"`" = "-----BEGIN PGP SIGNED MESSAGE-----" ] || \
+       return 1
+
+    local resign
+    if [ "$opt_re_sign" = "true" ]; then
+       resign="true"
+    elif [ "$opt_re_sign" = "false" ]; then
+       resign="false"
+    else
+       printf "The .$2 file is already signed.\nWould you like to use the current signature? [Yn]"
+       read response
+       case $response in
+       [Nn]*) resign="true" ;;
+       *)     resign="false" ;;
+       esac
+    fi
+
+    [ "$resign" = "true" ] || \
+       return 0
+
+    UNSIGNED_FILE="$(temp_filename "$1" "unsigned")"
+
+    sed -e '1,/^$/d; /^$/,$d' "$1" > "$UNSIGNED_FILE"
+    movefile "$UNSIGNED_FILE" "$1"
+    return 1
+}
+
+# --- main script
+
+# Unset GREP_OPTIONS for sanity
+unset GREP_OPTIONS
+
+# Boilerplate: set config variables
+DEFAULT_DEBSIGN_PROGRAM=
+DEFAULT_DEBSIGN_SIGNLIKE=
+DEFAULT_DEBSIGN_MAINT=
+DEFAULT_DEBSIGN_KEYID=
+DEFAULT_DEBRELEASE_DEBS_DIR=..
+VARS="DEBSIGN_PROGRAM DEBSIGN_SIGNLIKE DEBSIGN_MAINT DEBSIGN_KEYID"
+VARS="$VARS 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 | egrep '^(DEBSIGN|DEBRELEASE|DEVSCRIPTS)_')
+
+    # check sanity
+    case "$DEBSIGN_SIGNLIKE" in
+       gpg|pgp) ;;
+       *) DEBSIGN_SIGNLIKE= ;;
+    esac
+
+    # 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; s%\(.\)/$%\1%;'`"
+    if ! [ -d "$DEBRELEASE_DEBS_DIR" ]; then
+       debsdir_warning="config file specified DEBRELEASE_DEBS_DIR directory $DEBRELEASE_DEBS_DIR does not exist!"
+    fi
+
+    # 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"
+
+signcommand=''
+if [ -n "$DEBSIGN_PROGRAM" ]; then
+    signcommand="$DEBSIGN_PROGRAM"
+else
+    if [ \( -n "$GNUPGHOME" -a -e "$GNUPGHOME" \) -o -e $HOME/.gnupg ] && \
+       command -v gpg > /dev/null 2>&1; then
+       signcommand=gpg
+    elif command -v pgp > /dev/null 2>&1; then
+       signcommand=pgp
+    fi
+fi
+
+if [ -n "$DEBSIGN_SIGNLIKE" ]; then
+    forcesigninterface="$DEBSIGN_SIGNLIKE"
+fi
+
+while [ $# != 0 ]
+do
+    value="`echo x\"$1\" | sed -e 's/^x-.//'`"
+    case "$1" in
+       -spgp)  forcesigninterface=pgp ;;
+       -sgpg)  forcesigninterface=gpg ;;
+       -p*)    signcommand="$value" ;;
+       -m*)    maint="$value" ;;
+       -e*)    maint="$value" ;;     # Order matters: -m before -e!
+       -k*)    signkey="$value" ;;
+       -S)     sourceonly="true" ;;
+       -a*)    targetarch="$value" ;;
+       -t*)    targetgnusystem="$value" ;;
+       --multi) multiarch="true" ;;
+       --re-sign)    opt_re_sign="true" ;;
+       --no-re-sign) opt_re_sign="false" ;;
+       -r*)    if [ -n "$value" ]; then remotehost=$value;
+               elif [ $# -lt 1 ]; then
+                   echo "$PROGNAME: -r option missing argument!" >&2
+                   usage >&2; exit 1;
+               else shift; remotehost=$1;
+               fi
+               # Allow for the [user@]host:filename format
+               hostpart="`echo $remotehost | sed -e 's/:.*//'`"
+               filepart="`echo $remotehost | sed -e 's/[^:]*:\?//'`"
+               if [ -n "$filepart" ]; then
+                   remotehost="$hostpart"
+                   set -- "$@" "$filepart"
+               fi
+               ;;
+       --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%;'`"
+           ;;
+       --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 ;;
+       -*)     echo "$PROGNAME: Unrecognised option: $1" >&2
+               usage >&2; exit 1 ;;
+       *)      break ;;
+    esac
+    shift
+done
+
+debsdir=${opt_debsdir:-$debsdir}
+# 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
+
+if [ -z "$signcommand" ]; then
+    echo "Could not find a signing program (pgp or gpg)!" >&2
+    exit 1
+fi
+
+if test -n "$forcesigninterface" ; then
+    signinterface=$forcesigninterface
+else
+    signinterface=$signcommand
+fi
+
+if [ "$signinterface" != gpg -a "$signinterface" != pgp ]; then
+    echo "Unknown signing interface $signinterface; please specify -spgp or -sgpg" >&2
+    exit 1
+fi
+
+dosigning() {
+    # Do we have to download the changes file?
+    if [ -n "$remotehost" ]
+    then
+       mkremotefilesdir
+       cd "$remotefilesdir"
+
+       remotechanges=$changes
+       remotedsc=$dsc
+       remotecommands=$commands
+       remotedir="`perl -e 'chomp($_="'"$dsc"'"); m%/% && s%/[^/]*$%% && print'`"
+       changes=`basename "$changes"`
+       dsc=`basename "$dsc"`
+       commands=`basename "$commands"`
+
+       if [ -n "$changes" ]
+       then
+           if [ ! -f "$changes" ]
+           then
+               withecho scp "$remotehost:$remotechanges" .
+           fi
+       elif [ -n "$dsc" ]
+       then withecho scp "$remotehost:$remotedsc" "$dsc"
+       else withecho scp "$remotehost:$remotecommands" "$commands"
+       fi
+
+       if [ -n "$changes" ] && echo "$changes" | egrep -q '[][*?]'
+       then
+           for changes in $changes
+           do
+               printf "\n"
+               dsc=`echo "${remotedir+$remotedir/}$changes" | \
+                   perl -pe 's/\.changes$/.dsc/; s/(.*)_(.*)_(.*)\.dsc/\1_\2.dsc/'`
+               dosigning;
+           done
+           exit 0;
+       fi
+    fi
+
+    if [ -n "$changes" ]
+    then
+       if [ ! -f "$changes" -o ! -r "$changes" ]
+       then
+           echo "$PROGNAME: Can't find or can't read changes file $changes!" >&2
+           exit 1
+       fi
+
+       check_already_signed "$changes" "changes" && {
+          echo "Leaving current signature unchanged." >&2
+          return
+       }
+       if [ -n "$maint" ]
+       then maintainer="$maint"
+       # Try the "Changed-By:" field first
+       else maintainer=`sed -n 's/^Changed-By: //p' $changes`
+       fi
+       if [ -z "$maintainer" ]
+       then maintainer=`sed -n 's/^Maintainer: //p' $changes`
+       fi
+
+       signas="${signkey:-$maintainer}"
+
+       # Is there a dsc file listed in the changes file?
+       if grep -q `basename "$dsc"` "$changes"
+       then
+           if [ -n "$remotehost" ]
+           then
+               withecho scp "$remotehost:$remotedsc" "$dsc"
+           fi
+
+           if [ ! -f "$dsc" -o ! -r "$dsc" ]
+           then
+               echo "$PROGNAME: Can't find or can't read dsc file $dsc!" >&2
+               exit 1
+           fi
+           check_already_signed "$dsc" "dsc" || withecho signfile "$dsc" "$signas"
+           dsc_md5=`md5sum $dsc | cut -d' ' -f1`
+           dsc_sha1=`sha1sum $dsc | cut -d' ' -f1`
+           dsc_sha256=`sha256sum $dsc | cut -d' ' -f1`
+
+           temp_changes="$(temp_filename "$changes" "temp")"
+           cp "$changes" "$temp_changes"
+           if perl -i -pe 'BEGIN {
+               '" \$dsc_file=\"$dsc\"; \$dsc_md5=\"$dsc_md5\"; "'
+               '" \$dsc_sha1=\"$dsc_sha1\"; \$dsc_sha256=\"$dsc_sha256\"; "'
+               $dsc_size=(-s $dsc_file); ($dsc_base=$dsc_file) =~ s|.*/||;
+               $infiles=0; $insha1=0; $insha256=0; $format="";
+               }
+               if(/^Format:\s+(.*)/) {
+                   $format=$1;
+                   die "Unrecognised .changes format: $format\n"
+                       unless $format =~ /^\d+(\.\d+)*$/;
+                   ($major, $minor) = split(/\./, $format);
+                   $major+=0;$minor+=0;
+                   die "Unsupported .changes format: $format\n"
+                       if($major!=1 or $minor > 8 or $minor < 7);
+               }
+               /^Files:/i && ($infiles=1,$insha1=0,$insha256=0);
+               if(/^Checksums-Sha1:/i) {$insha1=1;$infiles=0;$insha256=0;}
+               elsif(/^Checksums-Sha256:/i) {
+                   $insha256=1;$infiles=0;$insha1=0;
+               } elsif(/^Checksums-.*?:/i) {
+                   die "Unknown checksum format: $_\n";
+               }
+               /^\s*$/ && ($infiles=0,$insha1=0,$insha256=0);
+               if ($infiles &&
+                   /^ (\S+) (\d+) (\S+) (\S+) \Q$dsc_base\E\s*$/) {
+                   $_ = " $dsc_md5 $dsc_size $3 $4 $dsc_base\n";
+                   $infiles=0;
+               }
+               if ($insha1 &&
+                   /^ (\S+) (\d+) \Q$dsc_base\E\s*$/) {
+                   $_ = " $dsc_sha1 $dsc_size $dsc_base\n";
+                   $insha1=0;
+               }
+               if ($insha256 &&
+                   /^ (\S+) (\d+) \Q$dsc_base\E\s*$/) {
+                   $_ = " $dsc_sha256 $dsc_size $dsc_base\n";
+                   $insha256=0;
+               }' "$temp_changes"
+           then
+               movefile "$temp_changes" "$changes"
+           else
+               rm "$temp_changes"
+               echo "$PROGNAME: Error processing .changes file (see above)" >&2
+               exit 1
+           fi
+
+           withecho signfile "$changes" "$signas"
+
+           if [ -n "$remotehost" ]
+           then
+               withecho scp "$changes" "$dsc" "$remotehost:$remotedir"
+               PRECIOUS_FILES=$(($PRECIOUS_FILES - 2))
+           fi
+
+           echo "Successfully signed dsc and changes files"
+       else
+           withecho signfile "$changes" "$signas"
+
+           if [ -n "$remotehost" ]
+           then
+               withecho scp "$changes" "$remotehost:$remotedir"
+               PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+           fi
+
+           echo "Successfully signed changes file"
+       fi
+    elif [ -n "$commands" ] # sign .commands file
+    then
+       if [ ! -f "$commands" -o ! -r "$commands" ]
+       then
+           echo "$PROGNAME: Can't find or can't read commands file $commands!" >&2
+           exit 1
+       fi
+
+       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" "$signas"
+
+       if [ -n "$remotehost" ]
+       then
+           withecho scp "$commands" "$remotehost:$remotecommands"
+           PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+       fi
+
+       echo "Successfully signed commands file"
+    else # only a dsc file to sign; much easier
+       if [ ! -f "$dsc" -o ! -r "$dsc" ]
+       then
+           echo "$PROGNAME: Can't find or can't read dsc file $dsc!" >&2
+           exit 1
+       fi
+
+       check_already_signed "$dsc" dsc && {
+           echo "Leaving current signature unchanged." >&2
+           return
+       }
+       if [ -n "$maint" ]
+       then maintainer="$maint"
+       # Try the new "Changed-By:" field first
+       else maintainer=`sed -n 's/^Changed-By: //p' $dsc`
+       fi
+       if [ -z "$maint" ]
+       then maintainer=`sed -n 's/^Maintainer: //p' $dsc`
+        fi
+
+       signas="${signkey:-$maintainer}"
+
+       withecho signfile "$dsc" "$signas"
+
+       if [ -n "$remotehost" ]
+       then
+           withecho scp "$dsc" "$remotehost:$remotedsc"
+           PRECIOUS_FILES=$(($PRECIOUS_FILES - 1))
+       fi
+
+       echo "Successfully signed dsc file"
+    fi
+}
+
+# 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
+       if [ -n "$remotehost" ]; then
+           echo "$PROGNAME: Need to specify a .changes, .dsc or .commands file location with -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 | sed -n 's/^Source: //p'`" \
+           "source package"
+       mustsetvar version "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+           "source version"
+
+       if [ "x$sourceonly" = x ]
+       then
+           mustsetvar arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`" "build architecture"
+       else
+           arch=source
+       fi
+
+       sversion=`echo "$version" | perl -pe 's/^\d+://'`
+       pv="${package}_${sversion}"
+       pva="${package}_${sversion}_${arch}"
+       dsc="$debsdir/$pv.dsc"
+       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)
+           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
+       dosigning;
+       ;;
+
+    *) while [ $# -gt 0 ]; do
+           case "$1" in
+               *.dsc)
+                   changes=
+                   dsc=$1
+                   commands=
+                   ;;
+               *.changes)
+                   changes=$1
+                   dsc=`echo $changes | \
+                       perl -pe 's/\.changes$/.dsc/; s/(.*)_(.*)_(.*)\.dsc/\1_\2.dsc/'`
+                   commands=
+                   ;;
+               *.commands)
+                   changes=
+                   dsc=
+                   commands=$1
+                   ;;
+               *)
+                   echo "$PROGNAME: Only a .changes, .dsc or .commands file is allowed as argument!" >&2
+                   exit 1 ;;
+           esac
+           dosigning
+           shift
+       done
+       ;;
+esac
+
+exit 0
diff --git a/scripts/debsnap.1 b/scripts/debsnap.1
new file mode 100644 (file)
index 0000000..c7b249f
--- /dev/null
@@ -0,0 +1,113 @@
+.\" 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
+\fIhttp://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 '.' (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 \-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 "yes" 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 \fIhttp://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 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 (executable)
index 0000000..eb4ee46
--- /dev/null
@@ -0,0 +1,253 @@
+#!/usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use File::Basename;
+use Cwd qw/cwd abs_path/;
+use File::Path qw/make_path/;
+use Dpkg::Version;
+
+my $progname = basename($0);
+
+eval {
+    require LWP::Simple;
+    require LWP::UserAgent;
+    no warnings;
+    $LWP::Simple::ua = LWP::UserAgent->new(agent => 'LWP::UserAgent/Devscripts/###VERSION###');
+};
+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: $@";
+    }
+}
+
+eval {
+    require JSON;
+};
+if ($@) {
+    if ($@ =~ m/Can\'t locate JSON/) {
+       die "$progname: Unable to run: the libjson-perl package is not installed";
+    } else {
+       die "$progname: Unable to run: Couldn't load JSON: $@";
+    }
+}
+
+my $modified_conf_msg = '';
+my %config_vars = ();
+
+my %opt;
+my $package = '';
+my $pkgversion = '';
+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
+
+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->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' => 'http://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 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};
+}
+
+###
+# 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') || exit 1;
+
+usage(0) if $opt{help};
+usage(1) unless @ARGV;
+$package = shift;
+if (@ARGV) {
+    my $version = shift;
+    $pkgversion = Dpkg::Version->new($version, check => 1);
+    fatal "Invalid version '$version'" unless $pkgversion;
+}
+
+$package eq '' && usage(1);
+
+$opt{destdir} ||= "source-$package";
+
+my $baseurl = "$opt{baseurl}/mr/package/$package/";
+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});
+
+my $json_text = fetch_json_page($baseurl);
+unless ($json_text && @{$json_text->{result}}) {
+    fatal "Unable to retrieve information for $package from $baseurl.";
+}
+# Keep track of what's been downloaded so we don't download the same
+# orig.tar.gz multiple times
+my %fetched;
+# iterate over each available version in the JSON structure:
+foreach my $version (@{$json_text->{result}}) {
+    if ($pkgversion) {
+       next if ($version->{version} <=> $pkgversion);
+    }
+
+    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++;
+    }
+
+    foreach my $hash (keys %{$src_json->{fileinfo}}) {
+       my $fileinfo = $src_json->{fileinfo}{$hash};
+       my $file_name;
+       # fileinfo may match multiple files (e.g., orig tarball for iceweasel 3.0.12)
+       foreach my $info (@$fileinfo) {
+           if ($info->{name} =~ m/^${package}/) {
+               $file_name = $info->{name};
+               last;
+           }
+       }
+       unless ($file_name) {
+           warn "$progname: No files with hash $hash matched '${package}'\n";
+           $warnings++;
+           next;
+       }
+       my $file_url = "$opt{baseurl}/file/$hash";
+       $file_name = basename($file_name);
+       if (!$fetched{$file_name}) {
+           verbose "Getting file $file_name: $file_url";
+           LWP::Simple::getstore($file_url, "$opt{destdir}/$file_name");
+       }
+       $fetched{$file_name} = 1;
+    }
+}
+
+if ($warnings) {
+    exit 2;
+}
+exit 0;
diff --git a/scripts/debuild.1 b/scripts/debuild.1
new file mode 100644 (file)
index 0000000..40d41c2
--- /dev/null
@@ -0,0 +1,426 @@
+.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 \fI.changes\fR and/or \fI.dsc\fR files as
+appropriate (using \fBdebsign\fR(1) to do this instead of
+\fBdpkg-buildpackage\fR(1) itself; all relevant key-signing options
+are passed on).  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
+DEBUILD_DPKG_BUILDPACKAGE_OPTS, 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
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL and DEVSCRIPTS_CHECK_DIRNAME_REGEX, and
+their corresponding command-line options \fB\-\-check-dirname-level\fR
+and \fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 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 TERM, HOME, LOGNAME, GNUPGHOME,
+PGPPATH, GPG_AGENT_INFO, FAKEROOTKEY, DEB_*, the
+(C, CPP, CXX, LD and F)FLAGS variables and their _APPEND counterparts
+and the locale variables LANG and LC_*.  TERM is set to `dumb' if it
+is unset, and PATH 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 PATH will be set to the sane value described above.  The
+\fBonly\fR way to prevent PATH 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
+PATH, using the \fB\-\-prepend\-path\fR option. This is useful when
+one wishes to use tools such as ccache or distcc 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 if any of the hooks from
+clean-hook to final-clean (inclusive) are used, \fBdebuild\fR
+will emulate some sections of the \fBdpkg-buildpackage\fR process
+rather than running them directly, as \fBdpkg-buildpackage\fR
+does not support hooks.  The available hooks are as follows:
+.TP
+dpkg-buildpackage-hook
+Run before dpkg-buildpackage begins by calling dpkg-checkbuilddeps.
+.TP
+clean-hook
+Run before dpkg-buildpackage runs debian/rules clean to clean the
+source tree.  (Run even if the tree is not being cleaned because \-nc
+is used.)
+.TP
+dpkg-source-hook
+Run after cleaning the tree and before running dpkg-source.  (Run even
+if dpkg-source is not being called because \-b or \-B is used.)
+.TP
+dpkg-build-hook
+Run after dpkg-source and before calling debian/rules build.  (Run
+even if this is a source-only build, so debian/rules build is not
+being called.)
+.TP
+dpkg-binary-hook
+Run between debian/rules build and debian/rules binary(\-arch).  Run
+ONLY if a binary package is being built.
+.TP
+dpkg-genchanges-hook
+Run after the binary package is built and before calling
+dpkg-genchanges.
+.TP
+final-clean-hook
+Run after dpkg-genchanges and before the final debian/rules clean.
+(Run even if we are not cleaning the tree post-build, which is the
+default.)
+.TP
+lintian-hook
+Run (once) before calling lintian.  (Run even if we are
+not calling lintian.)
+.TP
+signing-hook
+Run after calling lintian before any signing takes place.
+(Run even if we are not signing anything.)
+.TP
+post-dpkg-buildpackage-hook
+Run after everything has finished.
+.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: %%
+will be replaced by a single % sign, %p will be replaced by the
+package name, %v by the package version number, %s by the source
+version number, %u by the upstream version number.  Neither %s nor %u
+will contain an epoch.  %a will be 1 if the immediately following
+action is to be performed and 0 if not (for example, in the
+dpkg-source hook, %a will become 1 if dpkg-source is to be run and 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
+dpkg-source hook if dpkg-source 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.
+.PP
+Finally, only dpkg-buildpackage-hook and the hooks from lintian-hook
+onwards can be used if \fBdpkg-cross\fR is installed.  (This is
+because internally, \fBdebuild\fR reimplements
+\fBdpkg\-buildpackage\fR, but it does not attempt to reimplement the
+\fBdpkg\-cross\fR replacement of this script.)
+.SH "OPTIONS"
+For details, see above.
+.TP
+.B \-\-no-conf, \-\-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, " \-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, " \-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, " \-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 .orig.tar.gz file or .orig
+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 .orig.tar.gz file or .orig 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 "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" 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 \-\-username
+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 config 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 `\-' 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
+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 "Directory name checking" 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 "\-b" to "\-S" 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 DEBUILD_DPKG_BUILDPACKAGE_OPTS 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
+DEBUILD_DPKG_BUILDPACKAGE_OPTS 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 dpkg-buildpackage (1),
+.BR dpkg-checkbuilddeps (1),
+.BR debsign (1),
+.BR fakeroot (1),
+.BR lintian (1),
+.BR chmod (1),
+.BR dpkg-statoverride (8),
+.BR su (1),
+.BR sudo (1),
+.BR super (1)
+and
+.BR devscripts.conf (5).
+.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.pl b/scripts/debuild.pl
new file mode 100755 (executable)
index 0000000..7c2a786
--- /dev/null
@@ -0,0 +1,1416 @@
+#! /usr/bin/perl -w
+
+# 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 <http://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 5.008;
+use File::Basename;
+use filetest 'access';
+use Cwd;
+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 system_withecho(@);
+sub run_hook ($$);
+sub fileomitted (\@$);
+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
+        --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=1;
+my $check_dirname_level = 1;
+my $check_dirname_regex = 'PACKAGE(-.+)?';
+my $logging=0;
+my $tgz_check=1;
+my $prepend_path='';
+my $username='';
+my $emulate_dpkgbp = 0;
+my @hooks = (qw(dpkg-buildpackage clean dpkg-source build binary final-clean
+               lintian signing post-dpkg-buildpackage));
+my %hook;
+$hook{@hooks} = ('') x @hooks;
+
+
+# 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' => 'fakeroot',
+                      'DEBUILD_TGZ_CHECK' => 'yes',
+                      '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_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/-/_/;
+       $hook{$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 $envvar (@othervars) {
+       $envvar =~ /^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;
+    /^-a(.*)/ and $_ ne '-ap' and $checkbuilddep=0, next;
+    $_ eq '-S' and $checkbuilddep=0, next;
+}
+
+# Check @ARGV for debuild options.
+my @preserve_vars = qw(TERM HOME LOGNAME PGPPATH GNUPGHOME GPG_AGENT_INFO
+                    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";
+           }
+           $hook{$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";
+           }
+
+           $hook{$argkey} = $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 (('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(SIGN)?)_[A-Z_]+$/
+           or $var =~ /^(C(PP|XX)?|LD|F)FLAGS(_APPEND)?$/;
+    }
+}
+
+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;
+open PARSED, q[dpkg-parsechangelog | grep '^\(Source\|Version\):' |]
+    or fatal "cannot execute dpkg-parsechangelog | grep: $!";
+while (<PARSED>) {
+    chomp;
+    if (/^(\S+):\s(.+?)\s*$/) { $changelog{$1}=$2; }
+    else {
+       fatal "don't understand dpkg-parsechangelog output: $_";
+    }
+}
+
+close PARSED
+    or fatal "problem executing dpkg-parsechangelog | grep: $!";
+if ($?) { fatal "dpkg-parsechangelog | grep failed!" }
+
+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 ) { $( = $) }
+
+# Now let's look at our options, if any.  The first task is to decide
+# which version of debuild we wish to run.  The rule is as follows: we
+# want to run the first version (calling debian/rules explicitly) if
+# there is at most one initial -r... argument, and all of the others
+# are one of binary, binary-arch, binary-indep or clean.  We run the
+# second version otherwise.  Note that the -r option is the only one
+# stripped from the argument list.
+
+my $command_version='rules';
+
+if (@ARGV == 0) { $command_version='dpkg'; }
+else {
+    foreach (@ARGV) {
+       if ( ! /^(binary|binary-indep|binary-arch|clean)$/) {
+           $command_version='dpkg';
+           last;
+       }
+    }
+}
+
+if ($command_version eq 'dpkg') {
+    # We're going to emulate dpkg-buildpackage and possibly lintian.
+    # This will allow us to run hooks.
+    # However, if dpkg-cross is installed (as evidenced by the presence
+    # of /usr/bin/dpkg-cross), then we call the "real" dpkg-buildpackage,
+    # which is actually dpkg-cross's version.  We lose the facility for
+    # hooks in this case, but we're not going to emulate dpkg-cross as well!
+
+    my $dpkg_cross = (-x '/usr/bin/dpkg-cross' ? 1 : 0);
+    if ($dpkg_cross) {
+       # check hooks
+       my @skip_hooks = ();
+       for my $hookname (qw(clean dpkg-source build binary dpkg-genchanges
+                            final-clean)) {
+           if ($hook{$hookname}) { push @skip_hooks, $hookname; }
+       }
+       if (@skip_hooks) {
+           warn "$progname: dpkg-cross appears to be present on your system, and you have\nset up some hooks which will not be run (" .
+               join(", ", @skip_hooks) . ");\ndo you wish to continue? (y/n) ";
+           my $ans = <STDIN>;
+           exit 1 unless $ans =~ /^y/i;
+       }
+    } else {
+       # check hooks
+       my @skip_hooks = ();
+       for my $hookname (qw(clean dpkg-source build binary dpkg-genchanges
+                            final-clean)) {
+           if ($hook{$hookname}) { push @skip_hooks, $hookname; }
+       }
+       if (@skip_hooks) {      
+           $emulate_dpkgbp = 1;
+           warn "$progname: emulating dpkg-buildpackage as the following hooks were defined:\n"
+               . "  " . join(", ", @skip_hooks) . "\n\n";
+       }
+    }
+
+    # Our first task is to parse the command line options.
+
+    # And before we get too excited, does lintian even exist?
+    if ($run_lintian) {
+       system("command -v lintian >/dev/null 2>&1") == 0
+           and $lintian_exists=1;
+    }
+
+    # dpkg-buildpackage variables explicitly initialised in dpkg-buildpackage
+    my $signsource=1;
+    my $signchanges=1;
+    my $cleansource=0;
+    my $binarytarget='binary';
+    my $sourcestyle='';
+    my $since='';
+    my $maint='';
+    my $desc='';
+    my $parallel='';
+    my $noclean=0;
+    my $usepause=0;
+    my $warnable_error=0;  # OK, dpkg-buildpackage defines this but doesn't
+                           # use it.  We'll keep it around just in case it
+                           # does one day...
+    my @passopts=();
+
+    # extra dpkg-buildpackage variables not initialised there
+    my $diffignore='';
+    my @tarignore=();
+    my $sourceonly='';
+    my $binaryonly='';
+    my $targetarch='';
+    my $targetgnusystem='';
+    my $changedby='';
+    my $compression='';
+    my $comp_level='';
+
+    # and one for us
+    my @debsign_opts = ();
+    # and one for dpkg-cross if needed
+    my @dpkg_opts = qw(-us -uc);
+
+    # 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
+       /^-s(pgp|gpg)$/ and push(@debsign_opts, $_), next;  # Key selection
+       $_ eq '-us' and $signsource=0, next;
+       $_ eq '-uc' and $signchanges=0, next;
+       $_ eq '-ap' and $usepause=1, next;
+       /^-a(.*)/ and $targetarch=$1, push(@dpkg_opts, $_), next;
+           # Explained below; no implied -d here, as already done
+       /^-s[iad]$/ and $sourcestyle=$_, push(@dpkg_opts, $_), next;
+       /^-i/ and $diffignore=$_, push(@dpkg_opts, $_), next;
+       /^-I/ and push(@tarignore, $_), push(@dpkg_opts, $_), next;
+       /^-Z/ and $compression=$_, push(@dpkg_opts, $_), next;
+       /^-z/ and $comp_level=$_, push(@dpkg_opts, $_), next;
+       $_ eq '-tc' and $cleansource=1, push(@dpkg_opts, $_), next;
+       /^-t(.*)/ and $targetgnusystem=$1, push(@dpkg_opts, $_), next; # Ditto  
+       $_ eq '-nc' and $noclean=1, $binaryonly ||= '-b', push(@dpkg_opts, $_),
+           next;
+       $_ eq '-b' and $binaryonly=$_, $binarytarget='binary',
+           push(@dpkg_opts, $_), next;
+       $_ eq '-B' and $binaryonly=$_, $binarytarget='binary-arch',
+           push(@dpkg_opts, $_), next;
+       $_ eq '-S' and $sourceonly=$_, push(@dpkg_opts, $_), next;
+           # Explained below, no implied -d
+       /^-v(.*)/ and $since=$1, push(@dpkg_opts, $_), next;
+       /^-m(.*)/ and $maint=$1, push(@debsign_opts, $_), push(@dpkg_opts, $_),
+           next;
+       /^-e(.*)/ and $changedby=$1, push(@debsign_opts, $_),
+           push(@dpkg_opts, $_), next;
+       /^-C(.*)/ and $desc=$1, push(@dpkg_opts, $_), next;
+       /^-j(\d*)$/ and $parallel=($1 || '-1'), push(@dpkg_opts, $_), next;
+       $_ eq '-W' and $warnable_error=1, push(@passopts, $_),
+           push(@dpkg_opts, $_), next;
+       $_ eq '-E' and $warnable_error=0, push(@passopts, $_),
+           push(@dpkg_opts, $_), next;
+       # dpkg-cross specific option
+       if (/^-M/ and $dpkg_cross) { push(@dpkg_opts, $_), next; }
+       if ($emulate_dpkgbp) {
+           fatal "unknown dpkg-buildpackage option in configuration file: $_";
+       } else {
+           warn "$progname: unknown dpkg-buildpackage option in configuration file: $_\n";
+           push (@dpkg_opts, $_);
+           next;
+       }
+    }
+
+    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 '-d' and $checkbuilddep=0, next;
+       $_ eq '-D' and $checkbuilddep=1, next;
+       /^-s(pgp|gpg)$/ and push(@debsign_opts, $_), next;  # Key selection
+       $_ eq '-us' and $signsource=0, next;
+       $_ eq '-uc' and $signchanges=0, next;
+       $_ eq '-ap' and $usepause=1, next;
+       /^-a(.*)/ and $targetarch=$1, $checkbuilddep=0, push(@dpkg_opts, $_),
+           next;
+       /^-s[iad]$/ and $sourcestyle=$_, push(@dpkg_opts, $_), next;
+       /^-i/ and $diffignore=$_, push(@dpkg_opts, $_), next;
+       /^-I/ and push(@tarignore, $_), push(@dpkg_opts, $_), next;
+       /^-Z/ and $compression=$_, push(@dpkg_opts, $_), next;
+       /^-z/ and $comp_level=$_, push(@dpkg_opts, $_), next;
+       $_ eq '-tc' and $cleansource=1, push(@dpkg_opts, $_), next;
+       /^-t(.*)/ and $targetgnusystem=$1, $checkbuilddep=0, next;
+       $_ eq '-nc' and $noclean=1, $binaryonly ||= '-b', push(@dpkg_opts, $_),
+           next;
+       $_ eq '-b' and $binaryonly=$_, $binarytarget='binary',
+           push(@dpkg_opts, $_), next;
+       $_ eq '-B' and $binaryonly=$_, $binarytarget='binary-arch',
+           push(@dpkg_opts, $_), next;
+       $_ eq '-S' and $sourceonly=$_, $checkbuilddep=0, push(@dpkg_opts, $_),
+           next;
+       /^-v(.*)/ and $since=$1, push(@dpkg_opts, $_), next;
+       /^-m(.*)/ and $maint=$1, push(@debsign_opts, $_), push(@dpkg_opts, $_),
+           next;
+       /^-e(.*)/ and $changedby=$1, push(@debsign_opts, $_),
+           push(@dpkg_opts, $_), next;
+       /^-C(.*)/ and $desc=$1, push(@dpkg_opts, $_), next;
+       /^-j(\d*)$/ and $parallel=($1 || '-1'), push(@dpkg_opts, $_), next;
+       $_ eq '-W' and $warnable_error=1, push(@passopts, $_),
+           push(@dpkg_opts, $_), next;
+       $_ eq '-E' and $warnable_error=0, push(@passopts, $_),
+           push(@dpkg_opts, $_), next;
+       # dpkg-cross specific option
+       if (/^-M/ and $dpkg_cross) { push(@dpkg_opts, $_), next; }
+
+       # these non-dpkg-buildpackage options make us stop
+       if ($_ eq '-L' or $_ eq '--lintian' or /^--lintian-opts$/) {
+           unshift @ARGV, $_;
+           last;
+       }
+       if ($emulate_dpkgbp) {
+           fatal "unknown dpkg-buildpackage/debuild option: $_";
+       } else {
+           warn "$progname: unknown dpkg-buildpackage/debuild option: $_\n";
+           push (@dpkg_opts, $_);
+           next;
+       }
+    }
+
+    if ($sourceonly and $binaryonly) {
+       fatal "cannot combine dpkg-buildpackage options $sourceonly and $binaryonly";
+    }
+
+    # Pick up lintian options if necessary
+    if ($run_lintian && @ARGV) {
+       # Check that option is sensible
+    LIN_OPTS:
+       while (@ARGV) {
+           my $whichlin = shift;
+           if ($whichlin eq '-L' or $whichlin eq '--lintian') {
+               push @warnings,
+                   "the $whichlin option is deprecated for indicating the start\nof lintian options, please use --lintian-opts instead\n  (I substituted -L with --lintian-opts this time)";
+               $whichlin = '--lintian-opts';
+           }
+           if ($whichlin eq '--lintian-opts') {
+               if (! $run_lintian) {
+                   push @warnings,
+                       "$whichlin option given but not running lintian!";
+               }
+               while ($_=shift) {
+                   if (/^--lintian-opts$/) {
+                       unshift @ARGV, $_;
+                       next LIN_OPTS;
+                   }
+                   push @lintian_opts, $_;
+               }
+           }
+       }
+    }
+
+    if ($< != 0) {
+       $root_command ||= 'fakeroot';
+       # Only fakeroot is a default, so that's the only one we'll
+       # check for
+       if ($root_command eq 'fakeroot') {
+           system('fakeroot true 2>/dev/null');
+           if ($? >> 8 != 0) {
+               fatal "problem running fakeroot: either install the fakeroot package,\nuse a -r option to select another root command program to use or\nrun me as root!";
+           }
+       }
+    }
+
+    if ($signchanges==1 and $signsource==0) {
+       push @warnings,
+           "I will sign the .dsc file anyway as a signed .changes file was requested\n";
+       $signsource=1;  # may not be strictly necessary, but for clarity!
+    }
+
+    # 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
+    foreach (split /\n/, `dpkg-architecture -a${targetarch} -t${targetgnusystem} -f`) {
+       /^(.*)=(.*)$/ 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';
+    } else {
+       $arch=`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`;
+       chomp $arch;
+       fatal "couldn't determine host architecture!?" if ! $arch;
+    }
+
+    $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;
+    }
+
+    # 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: $!";
+
+    run_hook('dpkg-buildpackage', 1);
+
+    if ($dpkg_cross) {
+       unshift @dpkg_opts, ($checkbuilddep ? "-D" : "-d");
+       unshift @dpkg_opts, "-r$root_command" if $root_command;
+       system_withecho('dpkg-buildpackage', @dpkg_opts);
+
+       chdir '..' or fatal "can't chdir: $!";
+       # We're using dpkg-cross, we could now have foo_1.2_i386+sparc.changes
+       # so can't just set $changes = "${pkg}_${sversion}_${arch}.changes"
+       my @changes = glob("${pkg}_${sversion}_*.changes");
+       if (@changes == 0) {
+           fatal "couldn't find a .changes file!";
+       } elsif (@changes == 1) {
+           $changes = $changes[0];
+       } else {
+           # put newest first
+           @changes = sort { -M $a <=> -M $b } @changes;
+           $changes = $changes[0];
+       }
+    } elsif ($emulate_dpkgbp == 0) {
+       unshift @dpkg_opts, ($checkbuilddep ? "-D" : "-d");
+       unshift @dpkg_opts, "-r$root_command" if $root_command;
+       system_withecho('dpkg-buildpackage', @dpkg_opts);
+
+       chdir '..' or fatal "can't chdir: $!";
+    } else {
+       # Not using dpkg-cross, so we emulate dpkg-buildpackage ourselves
+       # We emulate the version found in dpkg-buildpackage-snapshot in
+       # the source package with the addition of -j and *FLAGS(_APPEND)
+       # support
+
+       my $build_opts = parsebuildopts();
+
+       # From dpkg-buildpackage 1.14.15
+       if ($parallel) {
+           $parallel = $build_opts->{parallel}
+               if (defined $build_opts->{parallel});
+           $ENV{MAKEFLAGS} ||= '';
+
+           if ($parallel eq '-1') {
+               $ENV{MAKEFLAGS} .= " -j";
+           } else {
+               $ENV{MAKEFLAGS} .= " -j$parallel";
+           }
+
+           $build_opts->{parallel} = $parallel;
+           setbuildopts($build_opts);
+       }
+
+       # From dpkg-buildpackage 1.14.18
+       # (with messages tweaked as we don't support localization)
+       my $default_flags = defined $build_opts->{noopt} ? "-g -O0" : "-g -O2";
+       my %flags = (   CPPFLAGS => '',
+                       CFLAGS   => $default_flags,
+                       CXXFLAGS => $default_flags,
+                       FFLAGS   => $default_flags,
+                       LDFLAGS  => '',
+                   );
+
+       foreach my $flag (keys %flags) {
+           if ($ENV{$flag}) {
+               print "$progname: using $flag from environment: $ENV{$flag}\n";
+           } else {
+               $ENV{$flag} = $flags{$flag};
+               print "$progname: set $flag to defailt value: $ENV{$flag}\n";
+           }
+           if ($ENV{"${flag}_APPEND"}) {
+               $ENV{$flag} .= " ".$ENV{"${flag}_APPEND"};
+           }
+       }
+
+       # First dpkg-buildpackage action: run dpkg-checkbuilddeps
+       if ($checkbuilddep) {
+           if ($binarytarget eq 'binary-arch') {
+               system('dpkg-checkbuilddeps -B');
+           } else {
+               system('dpkg-checkbuilddeps');
+           }
+           if ($?>>8) {
+               fatal <<"EOT";
+You do not appear to have all build dependencies properly met, aborting.
+(Use -d flag to override.)
+You can use mk-build-deps to generate a dummy package which Depends on all the
+required packages, or you can install them manually using dpkg or apt using
+the error messages just above this message.
+EOT
+           }
+       }
+
+       run_hook('clean', ! $noclean);
+
+       # Next dpkg-buildpackage action: clean
+       unless ($noclean) {
+           if ($< == 0) {
+               system_withecho('debian/rules', 'clean');
+           } else {
+               system_withecho($root_command, 'debian/rules', 'clean');
+           }
+       }
+
+       run_hook('dpkg-source', ! $binaryonly);
+
+       # Next dpkg-buildpackage action: dpkg-source
+       if (! $binaryonly) {
+           my $dirn = basename(cwd());
+           my @cmd = (qw(dpkg-source));
+           push @cmd, @passopts;
+           push @cmd, $diffignore if $diffignore;
+           push @cmd, $compression if $compression;
+           push @cmd, $comp_level if $comp_level;
+           push @cmd, @tarignore;
+           push @cmd, "-b", $dirn;
+           chdir '..' or fatal "can't chdir ..: $!";
+           system_withecho(@cmd);
+           chdir $dirn or fatal "can't chdir $dirn: $!";
+       }
+
+       run_hook('build', ! $sourceonly);
+
+       # Next dpkg-buildpackage action: build and binary targets
+       if (! $sourceonly) {
+           system_withecho('debian/rules', 'build');
+       
+           run_hook('binary', 1);
+
+           if ($< == 0) {
+               system_withecho('debian/rules', $binarytarget);
+           } else {
+               system_withecho($root_command, 'debian/rules', $binarytarget);
+           }
+       } elsif ($hook{'binary'}) {
+           push @warnings, "$progname: not running binary hook '$hook{'binary'}' as -S option used\n";
+       }
+
+       # We defer the signing the .dsc file until after dpkg-genchanges has
+       # been run
+
+       run_hook('dpkg-genchanges', 1);
+
+       # Because of our messing around with STDOUT and wanting to pass
+       # arguments safely to dpkg-genchanges means that we're gonna have to
+       # do it manually :(
+       my @cmd = ('dpkg-genchanges');
+       foreach ($binaryonly, $sourceonly, $sourcestyle) {
+           push @cmd, $_ if $_;
+       }
+       push @cmd, "-m$maint" if $maint;
+       push @cmd, "-e$changedby" if $changedby;
+       push @cmd, "-v$since" if $since;
+       push @cmd, "-C$desc" if $desc;
+       print STDERR " ", join(" ", @cmd), "\n";
+       
+       open GENCHANGES, "-|", @cmd or fatal "can't exec dpkg-genchanges: $!";
+       my @changefilecontents;
+       @changefilecontents = <GENCHANGES>;
+       close GENCHANGES
+           or warn "$progname: dpkg-genchanges failed!\n", exit ($?>>8);
+       open CHANGES, "> ../$changes"
+           or fatal "can't open ../$changes for writing: $!";
+       print CHANGES @changefilecontents;
+       close CHANGES
+           or fatal "problem writing to ../$changes: $!";
+
+       run_hook('final-clean', $cleansource);
+
+       # Final dpkg-buildpackage action: clean target again
+       if ($cleansource) {
+           if ($< == 0) {
+               system_withecho('debian/rules', 'clean');
+           } else {
+               system_withecho($root_command, 'debian/rules', 'clean');
+           }
+       }
+
+
+       # identify the files listed in $changes; this will be used for the
+       # emulation of the dpkg-buildpackage fileomitted() function
+
+       my @files;
+       my $infiles=0;
+       foreach (@changefilecontents) {
+           /^Files:/ and $infiles=1, next;
+           next unless $infiles;
+           last if /^[^ ]/; # no need to go further
+           # so we're looking at a filename with lots of info before it
+           / (\S+)$/ and push @files, $1;
+       }
+
+       my $srcmsg;
+
+       if (fileomitted @files, '\.deb') {
+           # source only upload
+           if (fileomitted @files, '\.diff\.gz') {
+               $srcmsg='source only upload: Debian-native package';
+           } elsif (fileomitted @files, '\.orig\.tar\.gz') {
+               $srcmsg='source only, diff-only upload (original source NOT included)';
+           } else {
+               $srcmsg='source only upload (original source is included)';
+           }
+       } else {
+           if (fileomitted @files, '\.dsc') {
+               $srcmsg='binary only upload (no source included)'
+           } elsif (fileomitted @files, '\.diff\.gz') {
+               $srcmsg='full upload; Debian-native package (full source is included)';
+           } elsif (fileomitted @files, '\.orig\.tar\.gz') {
+               $srcmsg='binary and diff upload (original source NOT included)';
+           } else {
+               $srcmsg='full upload (original source is included)';
+           }
+       }
+
+       print "dpkg-buildpackage (debuild emulation): $srcmsg\n";
+
+       chdir '..' or fatal "can't chdir: $!";
+    } # end of debuild dpkg-buildpackage emulation
+
+    run_hook('lintian', $run_lintian && $lintian_exists);
+
+    if ($run_lintian && $lintian_exists) {
+       $<=$>=$uid;  # Give up on root privileges if we can
+       $(=$)=$gid;
+       print "Now running lintian...\n";
+       # The remaining items in @ARGV, if any, are lintian options
+       system('lintian', @lintian_extra_opts, @lintian_opts, $changes);
+       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;
+}
+else {
+    # Running debian/rules.  Do dpkg-checkbuilddeps first
+    if ($checkbuilddep) {
+       if ($ARGV[0] eq 'binary-arch') {
+           system('dpkg-checkbuilddeps -B');
+       } else {
+           system('dpkg-checkbuilddeps');
+       }
+       if ($?>>8) {
+           fatal <<"EOT";
+You do not appear to have all build dependencies properly met.
+You can use mk-build-deps to generate a dummy package which
+Depends on all the required packages, or you can install them
+manually using dpkg or apt using the error messages just above
+this message.
+EOT
+       }
+    }
+
+    # Don't try to use the root command if we are already running as root
+    if ( $< == 0 ) {
+       system ('debian/rules', @ARGV) == 0
+           or fatal "couldn't exec debian/rules: $!";
+    }
+    else {
+       # So we'll use the selected or default root command
+       system ($root_command, 'debian/rules', @ARGV) == 0
+           or fatal "couldn't exec $root_command debian/rules: $!";
+    }
+
+    # Any warnings?
+    if (@warnings) {
+       my $warns = @warnings > 1 ? "s" : "";
+       warn "Warning$warns generated by debuild:\n" .
+           join("\n", @warnings) . "\n";
+    }
+    exit 0;
+}
+
+###### Subroutines
+
+sub system_withecho(@) {
+    print STDERR " ", join(" ", @_), "\n";
+    system(@_);
+    if ($?>>8) {
+       fatal "@_ failed";
+    }
+}
+
+sub fileomitted (\@$) {
+    my ($files, $pat) = @_;
+    return (scalar(grep { /$pat$/ } @$files) == 0);
+}
+
+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;
+}
+
+# Dpkg::BuildOptions::parse and ::set
+sub parsebuildopts {
+    my ($env) = @_;
+
+    $env ||= $ENV{DEB_BUILD_OPTIONS};
+
+    unless ($env) { return {}; }
+
+    my %opts;
+
+    foreach (split(/\s+/, $env)) {
+       unless (/^([a-z][a-z0-9_-]*)(=(\S*))?$/) {
+           warn("$progname: invalid flag in DEB_BUILD_OPTIONS: $_\n");
+           next;
+       }
+
+        my ($k, $v) = ($1, $3 || '');
+
+        # Sanity checks
+       if ($k =~ /^(noopt|nostrip|nocheck)$/ && length($v)) {
+           $v = '';
+       } elsif ($k eq 'parallel' && $v !~ /^-?\d+$/) {
+           next;
+       }
+
+       $opts{$k} = $v;
+    }
+
+    return \%opts;
+}
+
+sub setbuildopts {
+    my ($opts, $overwrite) = @_;
+    $overwrite = 1 if not defined($overwrite);
+
+    my $new = {};
+    $new = parsebuildopts() unless $overwrite;
+
+    while (my ($k, $v) = each %$opts) {
+       $new->{$k} = $v;
+    }
+
+    my $env = join(" ", map { $new->{$_} ? $_ . "=" . $new->{$_} : $_ } keys %$new);
+
+    $ENV{DEB_BUILD_OPTIONS} = $env;
+    return $env;
+}
diff --git a/scripts/desktop2menu.pl b/scripts/desktop2menu.pl
new file mode 100755 (executable)
index 0000000..c5a8b41
--- /dev/null
@@ -0,0 +1,308 @@
+#! /usr/bin/perl -w
+
+# 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|--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;
+use File::Basename;
+
+my $progname = basename($0);
+
+BEGIN {
+    # 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/Nework/Communication",
+    "FileTransfer" => "Applications/Network/File Transfer",
+    "HamRadio" => "Applications/Amateur Radio",
+    "News" => "Applicatiosn/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.1.in b/scripts/devscripts.1.in
new file mode 100644 (file)
index 0000000..75044fe
--- /dev/null
@@ -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
+examples of \fBprocmail\fR and \fBexim\fR scripts for sorting mail
+arriving to Debian mailing lists.
+.SH ENVIRONMENT
+Several scripts of the devscripts suite use the following environment
+variables. Check the man page 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/scripts/devscripts.conf.5 b/scripts/devscripts.conf.5
new file mode 100644 (file)
index 0000000..cfe7757
--- /dev/null
@@ -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 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/scripts/dget.pl b/scripts/dget.pl
new file mode 100755 (executable)
index 0000000..d69e4ac
--- /dev/null
@@ -0,0 +1,644 @@
+#!/usr/bin/perl -w
+# vim:sw=4:sta:
+
+#   dget - Download Debian source and binary packages
+#   Copyright (C) 2005-08 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 IO::Dir;
+use IO::File;
+use Digest::MD5;
+use Getopt::Long;
+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;
+
+# 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] 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.
+
+   -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 no 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)
+   --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)://(/.+)!) {
+       if ($1 eq "copy" or not link($2, $file)) {
+           system ('cp', '-a', $2, $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
+    push @cmd, "-f", "-L" 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 $md5 = Digest::MD5->new;
+           my $fh5 = new IO::File("$path/$file") or die "$path/$file: $!";
+           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', '-a', "$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
+    if (not -e $file and $file =~ m!^([a-z0-9][a-z0-9.+-]+)_[^/]+\.(?:diff\.gz|tar\.gz)$!) {
+       my $cmd = "apt-get source --print-uris $1";
+       my $apt = new IO::File("$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;
+    }
+
+    if ($file =~ /\.(?:changes|dsc)$/) {
+       parse_file($dir, $file);
+    }
+    if ($file =~ /\.dsc$/) {
+       $found_dsc = $file;
+    }
+
+    $seen{$file} = 1;
+    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 $qpackage = quotemeta($package);
+    my $qversion = quote_version($version) if $version;
+    my @hosts;
+
+    my $apt = new IO::File("LC_ALL=C apt-cache policy $package |") or die "$!";
+    OUTER: while (<$apt>) {
+       if (not $version and /^  Candidate: (.+)/) {
+           $version = $1;
+           $qversion = quote_version($version);
+       }
+       if ($qversion and /^ [ *]{3} ($qversion) 0/) {
+           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: $package has no installation candidate\n";
+    }
+    unless (@hosts) {
+       die "$progname: no hostnames in apt-cache policy $package for $version found\n";
+    }
+
+    $apt = new IO::File("LC_ALL=C apt-cache show $package=$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 $package ($version) found\n";
+    }
+
+    # find deb lines matching the hosts in the policy output
+    my @repositories;
+    my $host_re = '(?:' . (join '|', map { quotemeta; } @hosts) . ')';
+    if (-f "/etc/apt/sources.list") {
+       $apt = new IO::File("/etc/apt/sources.list") or die "/etc/apt/sources.list: $!";
+       while (<$apt>) {
+           if (/^\s*deb\s*($host_re\b)/) {
+               push @repositories, $1;
+           }
+       }
+       close $apt;
+    }
+    my %dir;
+    tie %dir, "IO::Dir", "/etc/apt/sources.list.d";
+    foreach (keys %dir) {
+       next unless /\.list$/;
+       $_ = "/etc/apt/sources.list.d/$_";
+       $apt = new IO::File("$_") or die "$_: $!";
+       while (<$apt>) {
+           if (/^\s*deb\s*($host_re\b)/) {
+               push @repositories, $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 (@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(
+    "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 },
+    "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|http|rsh|rsync|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`;
+               print @output unless $opt->{'quiet'};
+               foreach (@output) {
+                   if ( /^dpkg-source: (?:info: )?extracting .* in (.*)/ ) {
+                       chdir $1;
+                       system 'dpkg-buildpackage', '-b', '-uc';
+                       last;
+                   }
+               }
+           } elsif ($dget_unpack) {
+               system @cmd, $found_dsc;
+           }
+       }
+
+    # case 2a: package
+    } elsif ($arg =~ /^[a-z0-9.+-]{2,}$/) {
+       apt_get($arg);
+
+    # case 2b: package=version
+    } elsif ($arg =~ /^([a-z0-9.+-]{2,})=([a-zA-Z0-9.:~+-]+)$/) {
+       apt_get($1, $2);
+
+    } else {
+       usage();
+    }
+}
+
+=pod
+
+=head1 NAME
+
+dget -- Download Debian source and binary packages
+
+=head1 SYNOPSIS
+
+=over
+
+=item B<dget> [I<options>] I<URL> ...
+
+=item B<dget> [I<options>] I<package>[=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.
+
+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<-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> DIR[: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<--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 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 DGET_UNPACK
+
+Set to 'no' to disable extracting downloaded source packages.  Default
+is 'yes'.
+
+=item DGET_VERIFY
+
+Set to 'no' to disable checking signatures of downloaded source
+packages.  Default is 'yes'.
+
+=back
+
+=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-08 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<debdiff>(1), B<dpkg-source>(1), B<curl>(1), B<wget>(1).
diff --git a/scripts/diff2patches.1 b/scripts/diff2patches.1
new file mode 100644 (file)
index 0000000..bd91637
--- /dev/null
@@ -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 
+diff2patches \fI<filename>\fP
+.br 
+diff2patches \fI\-\-help\fP|\fI\-\-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
+\fIDEB_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 (executable)
index 0000000..a26964c
--- /dev/null
@@ -0,0 +1,91 @@
+#!/bin/bash -e
+
+####################
+#    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 <http://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'.
+####################
+
+PROGNAME=$(basename "$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 | egrep -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-buildpackage-snapshot b/scripts/dpkg-buildpackage-snapshot
new file mode 100755 (executable)
index 0000000..b7af2e0
--- /dev/null
@@ -0,0 +1,267 @@
+#!/bin/sh
+
+set -e
+
+version="1.13.17"; # This line modified by Makefile
+
+progname="`basename \"$0\"`"
+usageversion () {
+       cat >&2 <<END
+Debian dpkg-buildpackage $version.  
+Copyright (C) 1996 Ian Jackson.
+Copyright (C) 2000 Wichert Akkerman
+This is free software; see the GNU General Public Licence version 2
+or later for copying conditions.  There is NO warranty.
+
+Usage: dpkg-buildpackage [options]
+Options: -r<gain-root-command>
+         -p<sign-command>
+        -d            do not check build dependencies and conflicts
+        -D            check build dependencies and conflicts
+        -k<keyid>     the key to use for signing
+         -sgpg         the sign-command is called like GPG
+         -spgp         the sign-command is called like PGP 
+         -us           unsigned source
+         -uc           unsigned changes
+         -a<arch>      Debian architecture we build for (implies -d)
+         -b            binary-only, do not build source } also passed to
+         -B            binary-only, no arch-indep files } dpkg-genchanges
+         -S            source only, no binary files     } 
+         -t<system>    set GNU system type  } passed to dpkg-architecture
+         -v<version>   changes since version <version>      }
+         -m<maint>     maintainer for package is <maint>    } 
+         -e<maint>     maintainer for release is <maint>    } only passed
+         -C<descfile>  changes are described in <descfile>  }  to dpkg-
+         -si (default) src includes orig for rev. 0 or 1    } genchanges
+         -sa           uploaded src always includes orig    }
+         -sd           uploaded src is diff and .dsc only   }
+         -nc           do not clean source tree (implies -b)
+         -tc           clean source tree when finished
+         -ap           add pause before starting signature process
+         -h            print this message
+         -W            Turn certain errors into warnings.      } passed to
+         -E            When -W is turned on, -E turned it off. } dpkg-source
+         -i[<regex>]   ignore diffs of files matching regex    } only passed
+         -I<filename>  filter out files when building tarballs } to dpkg-source
+END
+}
+
+rootcommand=''
+signcommand=""
+if (( [ -n "$GNUPGHOME" ] && [ -e "$GNUPGHOME" ] ) || [ -e "$HOME/.gnupg" ] ) && \
+               command -v gpg > /dev/null 2>&1; then
+       signcommand=gpg
+elif command -v pgp > /dev/null 2>&1 ; then
+       signcommand=pgp
+fi
+
+signsource='withecho signfile'
+signchanges='withecho signfile'
+cleansource=false
+checkbuilddep=true
+checkbuilddep_args=''
+binarytarget=binary
+sourcestyle=''
+version=''
+since=''
+maint=''
+desc=''
+noclean=false
+usepause=false
+warnable_error=0
+passopts=''
+
+while [ $# != 0 ]
+do
+       value="`echo x\"$1\" | sed -e 's/^x-.//'`"
+       case "$1" in
+       -h)     usageversion; exit 0 ;;
+       -r*)    rootcommand="$value" ;;
+       -p*)    signcommand="$value" ;;
+       -k*)    signkey="$value" ;;
+       -d)     checkbuilddep=false ;;
+       -D)     checkbuilddep=true ;;
+       -sgpg)  forcesigninterface=gpg ;;
+       -spgp)  forcesigninterface=pgp ;;
+       -us)    signsource=: ;;
+       -uc)    signchanges=: ;;
+       -ap)    usepause="true";;
+       -a*)    targetarch="$value"; checkbuilddep=false ;;
+       -si)    sourcestyle=-si ;;
+       -sa)    sourcestyle=-sa ;;
+       -sd)    sourcestyle=-sd ;;
+        -i*)    diffignore=$1;;
+       -I*)    tarignore="$tarignore $1";;
+       -tc)    cleansource=true ;;
+       -t*)    targetgnusystem="$value" ;;          # Order DOES matter!
+       -nc)    noclean=true; if [ -z "$binaryonly" ]; then binaryonly=-b; fi ;;
+       -b)     binaryonly=-b; [ "$sourceonly" ] && \
+                       { echo >&2 "$progname: cannot combine $1 and -S" ; exit 2 ; } ;;
+       -B)     binaryonly=-B; checkbuilddep_args=-B; binarytarget=binary-arch; [ "$sourceonly" ] && \
+                       { echo >&2 "$progname: cannot combine $1 and -S" ; exit 2 ; } ;;
+       -S)     sourceonly=-S; checkbuilddep=false; [ "$binaryonly" ] && \
+                       { echo >&2 "$progname: cannot combine $binaryonly and $1" ; exit 2 ; } ;;
+       -v*)    since="$value" ;;
+       -m*)    maint="$value" ;;
+       -e*)    changedby="$value" ;;
+       -C*)    desc="$value" ;;
+       -W)     warnable_error=1; passopts="$passopts -W";;
+       -E)     warnable_error=0; passopts="$passopts -E";;     
+       *)      echo >&2 "$progname: unknown option or argument $1"
+               usageversion; exit 2 ;;
+       esac
+       shift
+done
+
+if [ -z "$signcommand"  ] ; then
+       signsource=:
+       signchanges=:
+fi
+
+if test -n "$forcesigninterface" ; then
+  signinterface=$forcesigninterface
+if [ "$signinterface" != "gpg" ] && [ "$signinterface" != "pgp" ] ; then
+       echo >&2 "$progname: invalid sign interface specified"
+       exit 1
+fi
+else
+  signinterface=$signcommand
+fi
+
+
+mustsetvar () {
+       if [ "x$2" = x ]; then
+               echo >&2 "$progname: unable to determine $3" ; \
+               exit 1
+       else
+               echo "$progname: $3 $2" ; \
+               eval "$1=\"\$2\""
+       fi
+}
+
+curd="`pwd`"
+dirn="`basename \"$curd\"`"
+mustsetvar package "`dpkg-parsechangelog | sed -n 's/^Source: //p'`" "source package is"
+mustsetvar version "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" "source version is"
+if [ -n "$changedby" ]; then maintainer="$changedby";
+elif [ -n "$maint" ]; then maintainer="$maint";
+else mustsetvar maintainer "`dpkg-parsechangelog | sed -n 's/^Maintainer: //p'`" "source changed by"; fi
+eval `dpkg-architecture -a${targetarch} -t${targetgnusystem} -s -f`
+
+if [ x$sourceonly = x ]; then
+       mustsetvar arch "`dpkg-architecture -a${targetarch} -t${targetgnusystem} -qDEB_HOST_ARCH`" "host architecture"
+else
+       arch=source
+fi
+sversion=`echo "$version" | perl -pe 's/^\d+://'`
+pv="${package}_${sversion}"
+pva="${package}_${sversion}_${arch}"
+
+signfile () {
+       if test "$signinterface" = "gpg" ; then
+               (cat "../$1" ; echo "") | \
+               $signcommand --local-user "${signkey:-$maintainer}" --clearsign --armor \
+                       --textmode  > "../$1.asc" 
+       else
+               $signcommand -u "${signkey:-$maintainer}" +clearsig=on -fast <"../$1" \
+                       >"../$1.asc"
+       fi
+       status=$?
+       if [ $status -eq 0 ]; then
+               mv -- "../$1.asc" "../$1"
+       else
+               /bin/rm -f "../$1.asc"
+       fi
+       echo
+       return $status
+}
+
+withecho () {
+        echo " $@" >&2
+       "$@"
+}
+
+if [ "$checkbuilddep" = "true" ]; then
+       if ! dpkg-checkbuilddeps $checkbuilddep_args; then
+               echo >&2 "$progname: Build dependencies/conflicts unsatisfied; aborting."
+               echo >&2 "$progname: (Use -d flag to override.)"
+               exit 3
+       fi
+fi
+
+set -- $binaryonly $sourceonly $sourcestyle
+if [ -n "$maint"       ]; then set -- "$@" "-m$maint"          ; fi
+if [ -n "$changedby"   ]; then set -- "$@" "-e$changedby"      ; fi
+if [ -n "$since"       ]; then set -- "$@" "-v$since"          ; fi
+if [ -n "$desc"                ]; then set -- "$@" "-C$desc"           ; fi
+
+if [ x$noclean != xtrue ]; then
+       withecho $rootcommand debian/rules clean
+fi
+if [ x$binaryonly = x ]; then
+       cd ..; withecho dpkg-source $passopts $diffignore $tarignore -b "$dirn"; cd "$dirn"
+fi
+if [ x$sourceonly = x ]; then
+       withecho debian/rules build 
+       withecho $rootcommand debian/rules $binarytarget
+fi
+if [ "$usepause" = "true" ] && \
+   ( [ "$signchanges" != ":" ] || ( [ -z "$binaryonly" ] && [ "$signsource" != ":" ] ) ) ; then
+    echo Press the return key to start signing process
+    read dummy_stuff
+fi
+
+signerrors=
+if [ x$binaryonly = x ]; then
+       if ! $signsource "$pv.dsc"; then
+               signerrors="(WARNING: Failed to sign .dsc and .changes file)"
+               signchanges=:
+       fi
+fi
+chg=../"$pva.changes"
+withecho dpkg-genchanges "$@" >"$chg"
+
+fileomitted () {
+       set +e
+       test -z "`sed -n '/^Files:/,/^[^ ]/ s/'$1'$//p' <$chg`"
+       fir=$?
+       set -e
+       return $fir
+}      
+
+
+if fileomitted '\.deb'; then
+       # source only upload
+       if fileomitted '\.diff\.gz'; then
+               srcmsg='source only upload: Debian-native package'
+       elif fileomitted '\.orig\.tar\.gz'; then
+               srcmsg='source only, diff-only upload (original source NOT included)'
+       else
+               srcmsg='source only upload (original source is included)'
+       fi
+else
+       srcmsg='full upload (original source is included)'
+       if fileomitted '\.dsc'; then
+               srcmsg='binary only upload (no source included)'
+       elif fileomitted '\.diff\.gz'; then
+               srcmsg='full upload; Debian-native package (full source is included)'
+       elif fileomitted '\.orig\.tar\.gz'; then
+               srcmsg='binary and diff upload (original source NOT included)'
+       else
+               srcmsg='full upload (original source is included)'
+       fi
+fi
+
+if ! $signchanges "$pva.changes"; then
+       signerrors="(WARNING: Failed to sign .changes file)"
+fi
+
+if $cleansource; then
+       withecho $rootcommand debian/rules clean
+fi
+
+echo "dpkg-buildpackage: $srcmsg"
+if [ -n "$signerrors" ]; then
+       echo >&2 $signerrors
+       exit 1
+fi
diff --git a/scripts/dpkg-depcheck.1 b/scripts/dpkg-depcheck.1
new file mode 100644 (file)
index 0000000..5cae524
--- /dev/null
@@ -0,0 +1,131 @@
+.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 update-alternatives (8)
+and
+.BR devscripts.conf (5).
+.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 (executable)
index 0000000..7b99f59
--- /dev/null
@@ -0,0 +1,552 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use 5.006_000;  # our() commands
+use Cwd;
+use File::Basename;
+use Getopt::Long;
+
+use lib '/usr/share/devscripts';
+use Devscripts::Set;
+use Devscripts::Packages;
+use Devscripts::PackageDeps;
+
+# Function prototypes
+sub process_features ($$);
+sub getusedfiles (@);
+sub filterfiles (@);
+
+# Global options
+our %opts;
+
+# libvfork is taken from dpkg-genbuilddeps, written by
+# Ben Collins <bcollins@debian.org>
+our $vforklib = "/usr/lib/devscripts/libvfork.so.0";
+
+# A list of files that do not belong to a Debian package but are known
+# to never create a dependency
+our @known_files = ($vforklib, "/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 thay 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');
+my $opts_ret =
+    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"},
+              );
+
+if ($opts{"noconf"}) {
+    die "$progname: --no-conf is only acceptable as the first command-line option!\n";
+}
+
+if (! $opts_ret) {
+    die "$progname: I didn't recognise some command-line option there;\nplease fix and try again.  (Use --help for more info.)\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 = new Devscripts::PackageDeps ('/var/lib/dpkg/status');
+    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_preload = $ENV{'LD_PRELOAD'} || undef;
+       my $old_locale = $ENV{'LC_ALL'} || undef;
+       my $trace_preload = defined $old_preload ?
+           "$old_preload $vforklib" : $vforklib;
+       $file = $opts{"strace-output"} || `tempfile -p depcheck`;
+       chomp $file;
+       $file =~ s%^(\s)%./$1%;
+       my @strace_cmd=('strace', '-e', 'trace=open,execve',  '-f',
+                       '-q', '-o', $file, @_);
+       $ENV{'LD_PRELOAD'} = $trace_preload;
+       $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_preload) { $ENV{'LD_PRELOAD'} = $old_preload; }
+       else { delete $ENV{'LD_PRELOAD'}; }
+       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+)\(\"(\/.*?)\",.*\) = (-?\d+)/ or next;
+       my ($syscall, $filename, $status) = ($1, $2, $3);
+       if ($syscall eq 'open') { 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;
+
+       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 (file)
index 0000000..2f2f321
--- /dev/null
@@ -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"
+.B The Debian Policy Manual,
+sections on Build-Depends etc.,
+.BR dpkg-depcheck (1)
+and
+.BR fakeroot (1).
+.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 (executable)
index 0000000..858cade
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/bash -e
+
+PROGNAME=`basename $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/dscverify.1 b/scripts/dscverify.1
new file mode 100644 (file)
index 0000000..cc5849d
--- /dev/null
@@ -0,0 +1,81 @@
+.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_dsc_filename\fR ...
+.SH DESCRIPTION
+\fBdscverify\fR checks that the GPG or PGP signatures on the given
+\fI.changes\fR or \fI.dsc\fR files are good signatures made by keys in
+the current Debian keyrings, found in the \fIdebian-keyring\fR
+and \fIdebian-maintainers\fR
+packages.  (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 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 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:
+
+- /org/keyring.debian.org/keyrings/debian-keyring.(gpg|pgp)
+
+- /usr/share/keyrings/debian-keyring.(pgp|gpg)
+
+- /usr/share/keyrings/debian-maintainers.gpg
+.SH "SEE ALSO"
+.BR gpg (1)
+and
+.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.pl b/scripts/dscverify.pl
new file mode 100755 (executable)
index 0000000..35f5a7b
--- /dev/null
@@ -0,0 +1,434 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+use 5.004;     # correct pipe close behavior
+use strict;
+use Cwd;
+use Dpkg::IPC;
+use File::Basename;
+use POSIX      qw(:errno_h);
+
+BEGIN {
+    eval { require Digest::MD5; };
+    if ($@) {
+       my $progname = basename $0;
+       if ($@ =~ /^Can\'t locate Digest\/MD5\.pm/) {
+           die "$progname: you must have the libdigest-md5-perl package installed\nto use this script\n";
+       }
+       die "$progname: problem loading the Digest::MD5 module:\n  $@\nHave you installed the libdigest-md5-perl package?\n";
+    }
+}
+
+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;
+
+sub usage {
+    print <<"EOF";
+Usage: $progname [options] dsc-or-changes-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 = @_;
+    for (qw(/org/keyring.debian.org/keyrings/debian-keyring.gpg
+           /usr/share/keyrings/debian-keyring.gpg
+           /org/keyring.debian.org/keyrings/debian-keyring.pgp
+           /usr/share/keyrings/debian-keyring.pgp
+           /usr/share/keyrings/debian-maintainers.gpg)) {
+       push @rings, $_ if -r;
+    }
+    return @rings if @rings;
+    xdie "can't find any Debian keyrings\n";
+}
+
+sub check_signature {
+    my ($file, @rings) = @_;
+
+    my @cmd = qw(gpg --batch --no-options --no-default-keyring --always-trust);
+    foreach (@rings) { push @cmd, '--keyring'; push @cmd, $_; }
+
+    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 || $@;
+    }
+    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;
+    }
+
+    if (!open SIGNED, '<', $filebase) {
+       xwarn "can't open $file:";
+       return;
+    }
+    my $out = do { local $/; <SIGNED> };
+    if (!close SIGNED) {
+       xwarn "problem reading $file:";
+       return;
+    }
+
+    if ($file =~ /\.changes$/ 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;
+       unless ($major == 1 and $minor <= 8) {
+           xwarn "$file is an unsupported format: $format\n";
+           return;
+       }
+    }
+
+    if ($verify_sigs == 1) {
+       $sigcheck = check_signature $filebase, @rings;
+       if ($sigcheck) {
+           xwarn "$file failed signature check:\n$sigcheck";
+           return;
+       } else {
+           print "      Good signature found\n";
+       }
+    }
+
+    my @spec = map { split /\n/ } $out =~ /^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 {!/^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$/ && $verify_sigs == 1) {
+           $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 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'};
+    }
+
+    ## handle command-line options
+    while (@ARGV > 0) {
+       if ($ARGV[0] eq '--help') { usage; exit 0; }
+       if ($ARGV[0] eq '--version') { print $version; exit 0; }
+       if ($ARGV[0] =~ /^(--no(sig|-sig-)check|-u)$/) { $verify_sigs = 0; shift @ARGV; }
+       if ($ARGV[0] =~ /^--no-?conf$/) {
+           xdie "$ARGV[0] is only acceptable as the first command-line option!\n";
+       }
+       if ($ARGV[0] eq '--no-default-keyrings') {
+           $use_default_keyrings = 0;
+           shift @ARGV;
+       }
+       if ($ARGV[0] eq '--keyring') {
+           shift @ARGV;
+           if (@ARGV > 0) {
+               my $ring = shift @ARGV;
+               if (-r $ring) {
+                   push @rings, $ring;
+               }
+               else {
+                   xwarn "Keyring $ring unreadable\n";
+               }
+           }
+           # Don't need an 'else' here; a trailing --keyring will cause
+           # the program to die anyway (no .changes file)
+           next;
+       }
+       if ($ARGV[0] =~ s/^--keyring=//) {
+           my $ring = shift @ARGV;
+           if (-r $ring) {
+               push @rings, $ring;
+           }
+           else {
+               xwarn "Keyring $ring unreadable\n";
+           }
+           next;
+       }
+       if ($ARGV[0] eq '--verbose') {
+           shift @ARGV;
+           $verbose = 1;
+       }
+       if ($ARGV[0] eq '--') {
+           shift @ARGV; last;
+       }
+       last;
+    }
+
+    @ARGV or xdie "no .changes 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/getbuildlog.1 b/scripts/getbuildlog.1
new file mode 100644 (file)
index 0000000..1f6ee43
--- /dev/null
@@ -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 100644 (file)
index 0000000..3f7963f
--- /dev/null
@@ -0,0 +1,142 @@
+#!/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=`basename $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&ver=$VERSION&arch=$ARCH&\
+stamp=[[:digit:]]+"
+
+getbuildlog() {
+    BASE=$1
+    ALL_LOGS=`mktemp`
+
+    wget -q -O $ALL_LOGS "$BASE/build.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/%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 lib "/usr/share/devscripts";
+               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&\
+ver=$LASTVERSION&\arch=$ARCH&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'`
+        wget -O "${PACKAGE}_${ver}_${arch}.log" "$BASE/$match&file=log"
+    done
+
+    rm -f $ALL_LOGS
+
+    if [ "$GET_LAST_VERSION" = "yes" ]; then
+       PATTERN=$NEWPATTERN
+       GET_LAST_VERSION=no
+    fi
+}
+
+getbuildlog http://buildd.debian.org
+getbuildlog http://buildd.debian-ports.org
+getbuildlog http://experimental.debian.net
diff --git a/scripts/grep-excuses.1 b/scripts/grep-excuses.1
new file mode 100644 (file)
index 0000000..a03ae87
--- /dev/null
@@ -0,0 +1,42 @@
+.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 update_excuses.html file and greps it
+for the specified maintainer name.  The \fBlibwww-perl\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 <http://release.debian.org/migration/>.  A package name
+must be given when using this option.
+.TP
+.B \-\-help
+Show a brief usage message.
+.TP
+.B \-\-version
+Show version and copyright information.
+.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.
+.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 (executable)
index 0000000..67f0b6f
--- /dev/null
@@ -0,0 +1,235 @@
+#! /usr/bin/perl -w
+# 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 <http://www.gnu.org/licenses/>.
+
+use 5.006;
+use strict;
+use File::Basename;
+
+# Needed for --wipnity option
+
+my $term_size_broken;
+
+sub have_term_size {
+    return ($term_size_broken ? 0 : 1) if defined $term_size_broken;
+    # 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='http://ftp-master.debian.org/testing/update_excuses.html.gz';
+
+# No longer use these - see bug#309802
+my $cachedir = $ENV{'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 <http://release.debian.org/migration/>.  A package
+                      name must be given when using this option.
+  --help              Show this help
+  --version           Give version information
+
+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 "http://release.debian.org/migration/testing.pl?package=$package"`;
+    $dump =~ s/^.*?(?=Checking)//s;
+    $dump =~ s/^\[.*//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' => '',
+                      );
+    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'};
+}
+
+while (@ARGV and $ARGV[0] =~ /^-/) {
+    if ($ARGV[0] eq '--wipnity' or $ARGV[0] eq '-w') {
+       if (@ARGV) {
+           shift;
+           $string=shift;
+       }
+       if (! $string or $string eq '') {
+           die "$progname: no package specified!\nTry $progname --help for help.\n";
+       }
+       if (@ARGV) {
+           die "$progname: too many arguments!  Try $progname --help for help.\n";
+       } else { wipnity($string); exit 0; }
+    }
+    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";
+}
+
+my $hostname = `hostname --fqdn`;
+chomp $hostname;
+
+if (system("command -v wget >/dev/null 2>&1") != 0) {
+    die "$progname: this program requires the wget package to be installed\n";
+}
+
+open EXCUSES, "wget -q -O - $url | zcat |" or
+    die "$progname: wget | zcat failed: $!\n";
+
+my $item='';
+my $mainlist=0;
+my $sublist=0;
+while (<EXCUSES>) {
+    if (! $mainlist) {
+       # Have we found the start of the actual content?
+       next unless /^\s*<ul>\s*$/;
+       $mainlist=1;
+       next;
+    }
+    # Have we reached the end?
+    if (! $sublist and m%</ul>%) {
+       $mainlist=0;
+       next;
+    }
+    next unless $mainlist;
+    # Strip hyperlinks
+    my $saveline=$_;
+    s%<a\s[^>]*>%%g;
+    s%</a>%%g;
+    s%&gt;%>%g;
+    s%&lt;%<%g;
+    # New item?
+    if (! $sublist and /^\s*<li>/) {
+       s%<li>%%;
+       $item = $_;
+    }
+    elsif (! $sublist and /^\s*<ul>/) {
+       $sublist=1;
+    }
+    elsif ($sublist and m%</ul>%) {
+       $sublist=0;
+       # Did the last item match?
+       if ($item=~/^-?\Q$string\E\s/ or
+           $item=~/^\s*Maintainer:\s[^\n]*\b\Q$string\E\b[^\n]*$/m) {
+           # In case there are embedded <li> tags
+           $item =~ s%<li>%\n    %g;
+           print $item;
+       }
+    }
+    elsif ($sublist and /^\s*<li>/) {
+       s%<li>%    %;
+       $item .= $_;
+    }
+    else {
+       warn "$progname: unrecognised line in update_excuses (line $.):\n$saveline";
+    }
+}
+close EXCUSES or die "$progname: read/zcat failed: $!\n";
+
+exit 0;
diff --git a/scripts/libvfork.c b/scripts/libvfork.c
new file mode 100644 (file)
index 0000000..bdc330e
--- /dev/null
@@ -0,0 +1,8 @@
+#include <sys/types.h>
+#include <unistd.h> 
+
+#undef vfork
+
+pid_t vfork(void){
+    return fork();
+}
diff --git a/scripts/licensecheck.pl b/scripts/licensecheck.pl
new file mode 100755 (executable)
index 0000000..7d8140c
--- /dev/null
@@ -0,0 +1,543 @@
+#!/usr/bin/perl -w
+# This script was originally based on the script of the same name from
+# the KDE SDK (by dfaure@kde.org)
+#
+# This version is
+#   Copyright (C) 2007, 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, see <http://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+licensecheck - simple license checker for source files
+
+=head1 SYNOPSIS
+
+B<licensecheck> B<--help|--version>
+
+B<licensecheck> [B<--no-conf>] [B<--verbose>] [B<--copyright>]
+[B<-l|--lines=N>] [B<-i|--ignore=regex>] [B<-c|--check=regex>]
+[B<-r|--recursive>] I<list of files and directories to check>
+
+=head1 DESCRIPTION
+
+B<licensecheck> attempts to determine the license that applies to each file
+passed to it, by searching the start of the file for text belonging to
+various licenses.
+
+If any of the arguments passed are directories, B<licensecheck> will add
+the files contained within to the list of files to process.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--verbose> B<--no-verbose>
+
+Specify whether to output the text being processed from each file before
+the corresponding license information.
+
+Default is to be quiet.
+
+=item B<-l=N> B<--lines=N>
+
+Specify the number of lines of each file's header which should be parsed 
+for license information. (Default is 60).
+
+=item B<-i=regex> B<--ignore=regex>
+
+When processing the list of files and directories, the regular 
+expression specified by this option will be used to indicate those which 
+should not be considered (e.g. backup files, VCS metadata). 
+
+=item B<-r> B<--recursive>
+
+Specify that the contents of directories should be added 
+recursively.
+
+=item B<-c=regex> B<--check=regex>
+
+Specify a pattern against which filenames will be matched in order to 
+decide which files to check the license of.
+
+The default includes common source files.
+
+=item B<--copyright>
+
+Also display copyright text found within the file
+
+=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
+
+=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<LICENSECHECK_VERBOSE>
+
+If this is set to I<yes>, then it is the same as the --verbose command
+line parameter being used. The default is I<no>.
+
+=item B<LICENSECHECK_PARSELINES>
+
+If this is set to a positive number then the specified number of lines
+at the start of each file will be read whilst attempting to determine
+the license(s) in use.  This is equivalent to the --lines command line
+option.
+
+=back
+
+=head1 LICENSE
+
+This code is copyright by Adam D. Barratt <adam@adam-barratt.org.uk>, 
+all rights reserved; based on a script of the same name from the KDE 
+SDK, which is copyright by <dfaure@kde.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.
+
+=head1 AUTHOR
+
+Adam D. Barratt <adam@adam-barratt.org.uk>
+
+=cut
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Basename;
+
+sub fatal($);
+sub parse_copyright($);
+sub parselicense($);
+
+my $progname = basename($0);
+
+# From dpkg-source
+my $default_ignore_regex = '
+# Ignore general backup files
+(?:^|/).*~$|
+# Ignore emacs recovery files
+(?:^|/)\.#.*$|
+# Ignore vi swap files
+(?:^|/)\..*\.swp$|
+# Ignore baz-style junk files or directories
+(?:^|/),,.*(?:$|/.*$)|
+# File-names that should be ignored (never directories)
+(?:^|/)(?:DEADJOE|\.cvsignore|\.arch-inventory|\.bzrignore|\.gitignore)$|
+# File or directory names that should be ignored
+(?:^|/)(?:CVS|RCS|\.deps|\{arch\}|\.arch-ids|\.svn|\.hg|_darcs|\.git|
+\.shelf|_MTN|\.bzr(?:\.backup|tags)?)(?:$|/.*$)
+';
+
+# Take out comments and newlines
+$default_ignore_regex =~ s/^#.*$//mg;
+$default_ignore_regex =~ s/\n//sg;
+
+my $default_check_regex = '\.(c(c|pp|xx)?|h(h|pp|xx)?|f(77|90)?|p(l|m)|xs|sh|php|py|rb|java|vala|el|sc(i|e)|cs|pas|inc|dtd|xsl|mod)$';
+
+my $modified_conf_msg;
+
+my ($opt_verbose, $opt_lines, $opt_noconf, $opt_ignore_regex, $opt_check_regex)
+  = ('', '', '', '', '');
+my $opt_recursive = 0;
+my $opt_copyright = 0;
+my ($opt_help, $opt_version);
+my $def_lines = 60;
+
+# Read configuration files and then command line
+# This 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 = (
+                      'LICENSECHECK_VERBOSE' => 'no',
+                      'LICENSECHECK_PARSELINES' => $def_lines,
+                     );
+    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{'LICENSECHECK_VERBOSE'} =~ /^(yes|no)$/
+       or $config_vars{'LICENSECHECK_VERBOSE'} = 'no';
+    $config_vars{'LICENSECHECK_PARSELINES'} =~ /^[1-9][0-9]*$/
+       or $config_vars{'LICENSECHECK_PARSELINES'} = $def_lines;
+
+    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{'LICENSECHECK_VERBOSE'} eq 'yes' ? 1 : 0;
+    $opt_lines = $config_vars{'LICENSECHECK_PARSELINES'};
+}
+
+GetOptions("help|h" => \$opt_help,
+          "version|v" => \$opt_version,
+          "verbose!" => \$opt_verbose,
+          "lines|l=i" => \$opt_lines,
+          "ignore|i=s" => \$opt_ignore_regex,
+          "recursive|r" => \$opt_recursive,
+          "check|c=s" => \$opt_check_regex,
+          "copyright" => \$opt_copyright,
+          "noconf" => \$opt_noconf,
+          "no-conf" => \$opt_noconf,
+          )
+    or die "Usage: $progname [options] filelist\nRun $progname --help for more details\n";
+
+$opt_lines = $def_lines if $opt_lines !~ /^[1-9][0-9]*$/;
+$opt_ignore_regex = $default_ignore_regex if ! length $opt_ignore_regex;
+$opt_check_regex = $default_check_regex if ! length $opt_check_regex;
+
+if ($opt_noconf) {
+    fatal "--no-conf is only acceptable as the first command-line option!";
+}
+if ($opt_help) { help(); exit 0; }
+if ($opt_version) { version(); exit 0; }
+
+die "Usage: $progname [options] filelist\nRun $progname --help for more details\n" unless @ARGV;
+
+$opt_lines = $def_lines if not defined $opt_lines;
+
+my @files = ();
+my @find_args = ();
+my $files_count = @ARGV;
+
+push @find_args, qw(-maxdepth 1) unless $opt_recursive;
+push @find_args, qw(-follow -type f -print);
+
+while (@ARGV) {
+    my $file = shift @ARGV;
+
+    if (-d $file) {
+       open FIND, '-|', 'find', $file, @find_args
+           or die "$progname: couldn't exec find: $!\n";
+
+       while (<FIND>) {
+           chomp;
+           next unless m%$opt_check_regex%;
+           # Skip empty files
+           next if (-z $_);
+           push @files, $_ unless m%$opt_ignore_regex%;
+       }
+       close FIND;
+    } else {
+       next unless ($files_count == 1) or $file =~ m%$opt_check_regex%;
+       push @files, $file unless $file =~ m%$opt_ignore_regex%;
+    }
+}
+
+while (@files) {
+    my $file = shift @files;
+    my $content = '';
+    my $copyright_match;
+    my $copyright = '';
+    my $license = '';
+    my %copyrights;
+
+    open (F, "<$file") or die "Unable to access $file\n";
+    while (<F>) {
+        last if ($. > $opt_lines);
+        $content .= $_;
+       $copyright_match = parse_copyright($_);
+       if ($copyright_match) {
+           $copyrights{lc("$copyright_match")} = "$copyright_match";
+       }
+    }
+    close(F);
+
+    $copyright = join(" / ", values %copyrights);
+
+    print qq(----- $file header -----\n$content----- end header -----\n\n)
+       if $opt_verbose;
+
+    $content =~ tr/\t\r\n/ /;
+    # Remove C / C++ comments
+    $content =~ s#(\*/|/[/*])##g;
+    $content =~ tr% A-Za-z.,@;0-9\(\)/-%%cd;
+    $content =~ s/ c //g; # Remove fortran comments
+    $content =~ tr/ //s;
+
+    $license = parselicense($content);
+    print "$file: ";
+    print "*No copyright* " unless $copyright;
+    print $license . "\n";
+    print "  [Copyright: " . $copyright . "]\n"
+      if $copyright and $opt_copyright;
+    print "\n" if $opt_copyright;
+}
+
+sub parse_copyright($) {
+    my $copyright = '';
+    my $match;
+
+    my $copyright_indicator_regex = '
+       (?:copyright    # The full word
+       |copr\.         # Legally-valid abbreviation
+       |\x{00a9}       # Unicode character COPYRIGHT SIGN
+       |\xc2\xa9       # Unicode copyright sign encoded in iso8859
+       |\(c\)          # Legally-null representation of sign
+       )';
+    my $copyright_disindicator_regex = '
+       \b(?:info(?:rmation)?   # Discussing copyright information
+       |notice                 # Discussing the notice
+       |and|or                 # Part of a sentence
+       )\b';
+
+    if (m%$copyright_indicator_regex(?::\s*|\s+)(\S.*)$%ix) {
+       $match = $1;
+
+       # Ignore lines matching "see foo for copyright information" etc.
+       if ($match !~ m%^\s*$copyright_disindicator_regex%ix) {
+           # De-cruft
+           $match =~ s/([,.])?\s*$//;
+           $match =~ s/$copyright_indicator_regex//igx;
+           $match =~ s/^\s+//;
+           $match =~ s/\s{2,}/ /g;
+           $match =~ s/\\@/@/g;
+           $copyright = $match;
+       }
+    }
+
+    return $copyright;
+}
+
+sub help {
+   print <<"EOF";
+Usage: $progname [options] filename [filename ...]
+Valid options are:
+   --help, -h             Display this message
+   --version, -v          Display version and copyright info
+   --no-conf, --noconf    Don't read devscripts config files; must be
+                          the first option given
+   --verbose              Display the header of each file before its
+                            license information
+   --lines, -l            Specify how many lines of the file header
+                            should be parsed for license information
+                            (Default: $def_lines)
+   --check, -c            Specify a pattern indicating which files should
+                             be checked
+                             (Default: '$default_check_regex')
+   --recursive, -r        Add the contents of directories recursively
+   --copyright            Also display the file's copyright
+   --ignore, -i                  Specify that files / directories matching the
+                            regular expression should be ignored when
+                            checking files
+                            (Default: '$default_ignore_regex')
+
+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 (C) 2007, 2008 by Adam D. Barratt <adam\@adam-barratt.org.uk>; based
+on a script of the same name from the KDE SDK by <dfaure\@kde.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
+}
+
+sub parselicense($) {
+    my ($licensetext) = @_;
+
+    my $gplver = "";
+    my $extrainfo = "";
+    my $license = "";
+
+    if ($licensetext =~ /version ([^ ]+) (?:\(?only\)?.? )?(?:of the GNU (Affero )?General Public License )?as published by the Free Software Foundation/i or
+       $licensetext =~ /GNU (?:Affero )?General Public License as published by the Free Software Foundation; version ([^ ]+) /i) {
+
+       $gplver = " (v$1)";
+    } elsif ($licensetext =~ /GNU (Affero ?)General Public License, version ([^ ]+?)[ .]/) {
+       $gplver = " (v$1)";
+    } elsif ($licensetext =~ /either version ([^ ]+) of the License, or \(at your option\) any later version/) {
+       $gplver = " (v$1 or later)";
+    }
+
+    if ($licensetext =~ /(?:675 Mass Ave|59 Temple Place|51 Franklin Steet|02139|02111-1307)/i) {
+       $extrainfo = " (with incorrect FSF address)$extrainfo";
+    }
+
+    if ($licensetext =~ /permission (?:is (also granted|given))? to link (the code of )?this program with (any edition of )?(Qt|the Qt library)/i) {
+       $extrainfo = " (with Qt exception)$extrainfo"
+    }
+
+    if ($licensetext =~ /(All changes made in this file will be lost|DO NOT (EDIT|delete this file)|Generated by)/i) {
+       $license = "GENERATED FILE";
+    }
+
+    if ($licensetext =~ /is free software.? you can redistribute it and\/or modify it under the terms of the (GNU (Library|Lesser) General Public License|LGPL)/i) {
+       $license = "LGPL$gplver$extrainfo $license";
+    }
+    
+    if ($licensetext =~ /is free software.? you can redistribute it and\/or modify it under the terms of the (GNU Affero General Public License|AGPL)/i) {
+       $license = "AGPL$gplver$extrainfo $license";
+    }
+
+    if ($licensetext =~ /is free software.? you (can|may) redistribute it and\/or modify it under the terms of (?:version [^ ]+ (?:\(?only\)? )?of )?the GNU General Public License/i) {
+       $license = "GPL$gplver$extrainfo $license";
+    }
+
+    if ($licensetext =~ /is distributed under the terms of the GNU General Public License,/
+       and length $gplver) {
+       $license = "GPL$gplver$extrainfo $license";
+    }
+
+    if ($licensetext =~ /is distributed.*terms.*GPL/) {
+       $license = "GPL (unversioned/unknown version) $license";
+    }
+
+    if ($licensetext =~ /This file is part of the .*Qt GUI Toolkit. This file may be distributed under the terms of the Q Public License as defined/) {
+       $license = "QPL (part of Qt) $license";
+    } elsif ($licensetext =~ /may be distributed under the terms of the Q Public License as defined/) {
+       $license = "QPL $license";
+    }
+
+    if ($licensetext =~ /http:\/\/opensource\.org\/licenses\/mit-license\.php/) {
+       $license = "MIT/X11 (BSD like) $license";
+    } elsif ($licensetext =~ /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/) {
+       $license = "MIT/X11 (BSD like) $license";
+    }
+
+    if ($licensetext  =~ /Permission to use, copy, modify, and(\/or)? distribute this software for any purpose with or without fee is hereby granted, provided.*copyright notice.*permission notice.*all copies/) {
+       $license = "ISC $license";
+    }
+
+    if ($licensetext =~ /THIS SOFTWARE IS PROVIDED .*AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY/) {
+       if ($licensetext =~ /All advertising materials mentioning features or use of this software must display the following acknowledge?ment.*This product includes software developed by/i) {
+           $license = "BSD (4 clause) $license";
+       } elsif ($licensetext =~ /(The name of .*? may not|Neither the names? of .*? nor the names of (its|their) contributors may) be used to endorse or promote products derived from this software/i) {
+           $license = "BSD (3 clause) $license";
+       } elsif ($licensetext =~ /Redistributions of source code must retain the above copyright notice/i) {
+           $license = "BSD (2 clause) $license";
+       } else {
+           $license = "BSD $license";
+       }
+    }
+
+    if ($licensetext =~ /Mozilla Public License Version ([^ ]+)/) {
+       $license = "MPL (v$1) $license";
+    }
+
+    if ($licensetext =~ /Released under the terms of the Artistic License ([^ ]+)/) {
+       $license = "Artistic (v$1) $license";
+    }
+
+    if ($licensetext =~ /is free software under the Artistic [Ll]icense/) {
+       $license = "Artistic $license";
+    }
+
+    if ($licensetext =~ /This program is free software; you can redistribute it and\/or modify it under the same terms as Perl itself/) {
+       $license = "Perl $license";
+    }
+
+    if ($licensetext =~ /under the Apache License, Version ([^ ]+) \(the License\)/) {
+       $license = "Apache (v$1) $license";
+    }
+
+    if ($licensetext =~ /This source file is subject to version ([^ ]+) of the PHP license/) {
+       $license = "PHP (v$1) $license";
+    }
+
+    if ($licensetext =~ /under the terms of the CeCILL /) {
+       $license = "CeCILL $license";
+    }
+
+    if ($licensetext =~ /under the terms of the CeCILL-([^ ]+) /) {
+       $license = "CeCILL-$1 $license";
+    }
+
+    if ($licensetext =~ /under the SGI Free Software License B/) {
+       $license = "SGI Free Software License B $license";
+    }
+
+    if ($licensetext =~ /is in the public domain/i) {
+       $license = "Public domain";
+    }
+
+    if ($licensetext =~ /terms of the Common Development and Distribution License(, Version ([^(]+))? \(the License\)/) {
+       $license = "CDDL " . ($1 ? "(v$2) " : '') . $license;
+    }
+
+    if ($licensetext =~ /Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license \(the \"Software\"\)/ or
+       $licensetext =~ /Boost Software License([ ,-]+Version ([^ ]+)?(\.))/i) {
+       $license = "BSL " . ($1 ? "(v$2) " : '') . $license;
+    }
+
+    if ($licensetext =~ /PYTHON SOFTWARE FOUNDATION LICENSE (VERSION ([^ ]+))/i) {
+       $license = "PSF " . ($1 ? "(v$2) " : '') . $license;
+    }
+
+    if ($licensetext =~ /The origin of this software must not be misrepresented.*Altered source versions must be plainly marked as such.*This notice may not be removed or altered from any source distribution/ or
+        $licensetext =~ /see copyright notice in zlib\.h/) {
+       $license = "zlib/libpng $license";
+    }
+
+    if ($licensetext =~ /Do What The Fuck You Want To Public License, Version ([^, ]+)/i) {
+        $license = "WTFPL (v$1)";
+    }
+
+    if ($licensetext =~ /Do what The Fuck You Want To Public License/i) {
+        $license = "WTFPL";
+    }
+
+    if ($licensetext =~ /(License WTFPL|Under (the|a) WTFPL)/i) {
+        $license = "WTFPL";
+    }
+
+    $license = "UNKNOWN" if (!length($license));
+
+    return $license;
+}
+
+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/list-unreleased.1 b/scripts/list-unreleased.1
new file mode 100644 (file)
index 0000000..824df4f
--- /dev/null
@@ -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.sh b/scripts/list-unreleased.sh
new file mode 100755 (executable)
index 0000000..7a1466c
--- /dev/null
@@ -0,0 +1,91 @@
+#!/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=.
+
+get_list() {
+       local path="$1"
+
+       for dir in $(
+               if [ "$RECURSE" ]; then 
+                       find "$path" -type d | grep -v "\.svn"
+               else
+                       find "$path" -maxdepth 1 -type d | grep -v "\.svn"
+               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/manpage-alert.1 b/scripts/manpage-alert.1
new file mode 100644 (file)
index 0000000..7c2bec8
--- /dev/null
@@ -0,0 +1,28 @@
+.TH MANPAGE-ALERT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+manpage-alert \- check for binaries without corresponding manpages
+.SH SYNOPSIS
+\fBmanpage-alert\fR \fI[path list]\fR
+.br
+\fBmanpage-alert \-\-help|\-\-version\fR
+.SH DESCRIPTION
+\fBmanpage-alert\fR searches the given list of paths for binaries without 
+corresponding manpages.
+.P
+If no paths are specified on the command line, the path list
+\fI/bin /sbin /usr/bin /usr/sbin /usr/games\fR will be assumed.
+.SH OPTIONS
+.BR \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.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 (executable)
index 0000000..0e2acac
--- /dev/null
@@ -0,0 +1,82 @@
+#!/bin/bash
+#
+# 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
+
+  This script will locate executables in the given paths for which no
+  manpage is available.
+
+  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
+}
+
+case "$1" in
+    --help|-h) usage; exit 0;;
+    --version|-V) version; exit 0;;
+esac
+
+if [ $# -lt 1 ]; then
+    set -- /bin /sbin /usr/bin /usr/sbin /usr/games
+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 ))
+
+        OUT=$(man -w -S 1:8:6 "${F##*/}" 2>&1 >/dev/null)
+        RET=$?
+        if [ $RET = "0" ]; then
+            NUM_MANPAGES_FOUND=$(( $NUM_MANPAGES_FOUND + 1 ))
+        else
+            echo "$OUT" | perl -ne "next if /^.*'man 7 undocumented'.*$/;" \
+              -e "s,(\W)\Q${F##*/}\E(?:\b|$),\1$F,; s,//,/,; print;"
+            NUM_MANPAGES_MISSING=$(( $NUM_MANPAGES_MISSING + 1 ))
+        fi
+    done
+done
+
+printf "Of %d commands, found manpages for %d (%d missing).\n" \
+    $NUM_EXECUTABLES \
+    $NUM_MANPAGES_FOUND \
+    $NUM_MANPAGES_MISSING
+
+# 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 (executable)
index 0000000..e125e31
--- /dev/null
@@ -0,0 +1,524 @@
+#! /usr/bin/perl -w
+
+# 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 <http://www.gnu.org/licenses/>.
+
+=head1 NAME
+
+mass-bug - mass-file a bug report against a list of packages
+
+=head1 SYNOPSIS
+
+mass-bug [options] --subject="bug subject" 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 --severity=(wishlist|minor|normal|important|serious|grave|critical)
+
+Specify the severity with which bugs should be filed. Default
+is 'normal'.
+
+=item --display
+
+Fill out the templates for each package and display them all for
+verification. This is the default behavior.
+
+=item --send
+
+Actually send the bug reports.
+
+=item --subject="bug subject"
+
+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 --tags
+
+Set the BTS pseudo-header for tags.
+
+=item --user
+
+Set the BTS pseudo-header for a usertags' user.
+
+=item --usertags
+
+Set the BTS pseudo-header for usertags.
+
+=item --source
+
+Specify that package names refer to source packages rather than binary
+packages.
+
+=item --sendmail=SENDMAILCMD
+
+Specify the sendmail command.  The command will be split on white
+space and will not be passed to a shell.  Default is '/usr/sbin/sendmail'.
+
+=item --no-wrap
+
+Do not wrap the template to lines of 70 characters.
+
+=item --no-conf, --noconf
+
+Do not read any configuration files.  This can only be used as the
+first option given on the command-line.
+
+=item --help
+
+Provide a usage message.
+
+=item --version
+
+Display version information.
+
+=back
+
+=head1 ENVIRONMENT
+
+DEBEMAIL and 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 BTS_SENDMAIL_COMMAND
+
+If this is set, specifies a sendmail command to use instead of
+/usr/sbin/sendmail.  Same as the --sendmail command line option.
+
+=back
+
+=cut
+
+use strict;
+use Getopt::Long;
+use Text::Wrap;
+use File::Basename;
+
+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
+   --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 $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);
+       }
+    }
+    $bugtext = "$type: $package\n$version" . "Severity: $severity\n$tags$user$usertags\n$template_text";
+    return $bugtext;
+}
+               
+sub div {
+    print +("-" x 79)."\n";
+}
+
+sub mailbts {
+    my ($subject, $body, $to, $from) = @_;
+
+    if (defined $from) {
+       my $date = `date -R`;
+       chomp $date;
+       
+       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 $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,
+                "source"     => sub { $type="Source"; },
+                "sendmail=s" => \$opt_sendmail,
+                "help"       => sub { usage(); exit 0; },
+                "version"    => sub { version(); exit 0; },
+                "no-wrap"    => sub { $nowrap=1; },
+                )) {
+    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)."\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),
+               $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 (file)
index 0000000..9496731
--- /dev/null
@@ -0,0 +1,21 @@
+.TH MERGECHANGES 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+mergechanges \- merge multiple changes files
+.SH SYNOPSIS
+\fBmergechanges\fR [\fB\-f\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.
+.SH AUTHOR
+Gergely Nagy <algernon@debian.org>,
+modifications by Julian Gilbey <jdg@debian.org> and
+Adam D. Barratt <adam@adam-barratt.org.uk>.
diff --git a/scripts/mergechanges.sh b/scripts/mergechanges.sh
new file mode 100755 (executable)
index 0000000..28fbf60
--- /dev/null
@@ -0,0 +1,212 @@
+#! /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 <http://www.gnu.org/licenses/>.
+
+set -e
+
+PROGNAME=`basename $0`
+
+usage () {
+    echo \
+"Usage: $PROGNAME [--help|--version] [-f] <file1> <file2> [<file> ...]
+  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>."
+}
+
+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
+
+while [ $# -gt 0 ]; do
+    case "$1" in
+       --help)
+           usage
+           exit 0
+           ;;
+       --version)
+           version
+           exit 0
+           ;;
+       -f)
+           FILE=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
+    echo "Usage: mergechanges [--help|--version] [-f] <file1> <file2> [<file...>]" >&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
+
+# Extract the Architecture: field from all .changes files,
+# and merge them, sorting out duplicates
+ARCHS=$(grep -h "^Architecture: " "$@" | sed -e "s,^Architecture: ,," | tr ' ' '\n' | sort -u | tr '\n' ' ' | sed 's/ $//')
+
+checksum_uniq() {
+    awk '{if(arr[$NF] != 1){arr[$NF] = 1; print;}}'
+}
+
+# Extract & merge the Version: field from all files..
+# Don't catch Version: GnuPG lines, though!
+VERSION=$(grep -h "^Version: [0-9]" "$@" | sed -e "s,^Version: ,," | sort -u)
+SVERSION=$(echo "$VERSION" | perl -pe 's/^\d+://')
+# Extract & merge the sources from all files
+SOURCE=$(grep -h "^Source: " "$@" | sed -e "s,^Source: ,," | sort -u)
+# Extract & merge the files from all files
+FILES=$(egrep -h "^ [0-9a-f]{32} [0-9]+" "$@" | checksum_uniq)
+# Extract & merge the sha1 checksums from all files
+SHA1S=$(egrep -h "^ [0-9a-f]{40} [0-9]+" "$@" | checksum_uniq)
+# Extract & merge the sha256 checksums from all files
+SHA256S=$(egrep -h "^ [0-9a-f]{64} [0-9]+" "$@" | checksum_uniq)
+# Extract & merge the description from all files
+DESCRIPTIONS=$(sed '/^Description:/,/^[^ ]/{/^ /p;d};d' "$@" | sort -u)
+# Extract & merge the Formats from all files
+FORMATS=$(grep -h "^Format: " "$@" | sed -e "s,^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=`tempfile`
+DESCFILE=`tempfile`
+trap "rm -f '${OUTPUT}' '${DESCFILE}'" 0 1 2 3 7 10 13 15
+
+if test $(echo "${DESCRIPTIONS}" | wc -l) -ne 0; then
+    echo "Description: " > "${DESCFILE}"
+    echo "${DESCRIPTIONS}" >> "${DESCFILE}"
+fi
+
+# 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
+
+# Replace the Architecture: field, nuke the value of Files:, and insert
+# the Description: field before the Changes: field
+eval "sed -e 's,^Architecture: .*,Architecture: ${ARCHS},' \
+    -e '/^Files: /,$ d; /^Checksums-.*: /,$ d' \
+    -e '/^Description:/,/^[^ ]/{/^Description:/d;/^[ ]/d}' \
+    -e '/^Changes:/{r '${DESCFILE} -e ';aChanges: ' -e ';d}' \
+    -e 's,^Format: .*,Format: ${FORMATS},' \
+    ${OUTPUT} ${REDIR1}"
+
+# Voodoo magic to get the merged file and checksum lists into the output
+if test -n "${SHA1S}"; then
+    eval "echo 'Checksums-Sha1: ' ${REDIR2}"
+    eval "echo '${SHA1S}' ${REDIR2}"
+fi
+if test -n "${SHA256S}"; then
+    eval "echo 'Checksums-Sha256: ' ${REDIR2}"
+    eval "echo '${SHA256S}' ${REDIR2}"
+fi
+eval "echo 'Files: ' ${REDIR2}"
+eval "echo '${FILES}' ${REDIR2}"
+
+exit 0
diff --git a/scripts/mk-build-deps.pl b/scripts/mk-build-deps.pl
new file mode 100755 (executable)
index 0000000..8c7aa92
--- /dev/null
@@ -0,0 +1,301 @@
+#!/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> --help|--version
+
+B<mk-build-deps> [options] <control file | package name> [...]
+
+=head1 DESCRIPTION
+
+Given a package name and/or 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: apt-get)
+
+=item B<-r>, B<--remove>
+
+Remove the package file after installing it. Ignored if used without
+the install switch.
+
+=item B<-a> I<foo>, B<--arch> I<foo>
+
+If the source package has architecture-specific build dependencies, produce
+a package for architecture I<foo>, not for the system architecture. (If the
+source package does not have architecture-specific build dependencies,
+the package produced is always for the pseudo-architecture B<all>.)
+
+=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<-h>, B<--help>
+
+Show a summary of options.
+
+=item B<-v>, B<--version>
+
+Show version and copyright information.
+
+=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 strict;
+use warnings;
+use Getopt::Long;
+use File::Basename;
+use Pod::Usage;
+use Dpkg::Control;
+
+my $progname = basename($0);
+my $opt_install;
+my $opt_remove=0;
+my ($opt_help, $opt_version, $opt_arch, $opt_dep, $opt_indep);
+my $control;
+my $install_tool;
+my @packages;
+my @deb_files;
+
+my @config_files = ('/etc/devscripts.conf', '~/.devscripts');
+my %config_vars = (
+                   'MKBUILDDEPS_TOOL' => 'apt-get',
+                   'MKBUILDDEPS_REMOVE_AFTER_INSTALL' => 'no'
+                   );
+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'}='/usr/bin/apt-get';
+$config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'} =~ /^(yes|no)$/
+       or $config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'}='no';
+
+$install_tool = $config_vars{'MKBUILDDEPS_TOOL'};
+
+if ($config_vars{'MKBUILDDEPS_REMOVE_AFTER_INSTALL'} =~ /yes/) {
+       $opt_remove=1;
+}
+
+
+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,
+           "build-dep|B" => \$opt_dep,
+           "build-indep|A" => \$opt_indep,
+           )
+    or pod2usage({ -exitval => 1, -verbose => 0 });
+
+pod2usage({ -exitval => 0, -verbose => 1 }) if ($opt_help);
+if ($opt_version) { version(); exit 0; }
+
+if (!@ARGV) {
+    if (-r 'debian/control') {
+       push(@ARGV, 'debian/control');
+    }
+}
+
+pod2usage({ -exitval => 1, -verbose => 0 }) 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);
+    if (-r $control and -f $control) {
+       open $fh, $control || do {
+           warn "Unable to open $control: $!\n";
+           next;
+        };
+       $name = 'Source';
+    }
+    else {
+       open $fh, "apt-cache showsrc $control |" || do {
+           warn "Unable to run apt-cache: $!\n";
+           next;
+        };
+       $name = 'Package';
+    }
+
+    my $ctrl = Dpkg::Control->new(type => CTRL_INFO_SRC);
+    if ($ctrl->parse($fh, $control)) {
+       my $args = '';
+       my $arch = 'all';
+       my ($build_deps, $build_dep, $build_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-Indep'}) {
+           $build_indep = $ctrl->{'Build-Depends-Indep'};
+           $build_indep =~ s/\n/ /g;
+           $build_deps .= ', ' if $build_deps;
+           $build_deps .= $build_indep;
+       }
+
+       die "$progname: Unable to find build-deps for $ctrl->{$name}\n" unless $build_deps;
+
+       # 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(@packages,
+                build_equiv({ depends => $build_deps,
+                              name => $ctrl->{$name},
+                              type => 'build-deps',
+                              version => $ctrl->{Version} }));
+           next;
+       }
+       if ($opt_dep) {
+           push(@packages,
+                build_equiv({ depends => $build_dep,
+                              name => $ctrl->{$name},
+                              type => 'build-deps-depends',
+                              version => $ctrl->{Version} }));
+       }
+       if ($opt_indep) {
+           push(@packages,
+                build_equiv({ depends => $build_indep,
+                              name => $ctrl->{$name},
+                              type => 'build-deps-indep',
+                              version => $ctrl->{Version} }));
+       }
+    }
+    else {
+       die "$progname: Unable to find package name in '$control'\n";
+    }
+}
+
+use Text::ParseWords;
+
+if ($opt_install) {
+    for my $package (@packages) {
+       my $file = glob "${package}_*.deb";
+       push @deb_files, $file;
+    }
+
+    system 'dpkg', '--unpack', @deb_files;
+    system shellwords($install_tool), '-f', 'install';
+
+    if ($opt_remove) {
+       foreach my $file (@deb_files) {
+           unlink $file;
+       }
+    }
+}
+
+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 $arch = 'all';
+
+    if ($opts->{depends} =~ /\[|\]/) {
+       $arch = 'any';
+
+       if (defined $opt_arch) {
+           $args = "--arch=$opt_arch ";
+       }
+    }
+
+    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: $opts->{name}-$opts->{type}\n".
+    "Architecture: $arch\n".
+    "Depends: build-essential, $opts->{depends}\n";
+    print EQUIVS "Version: $opts->{version}\n" if $opts->{version};
+
+    print EQUIVS "Description: build-dependencies for $opts->{name}\n" .
+    " Depencency package to build the '$opts->{name}' package\n";
+
+    close EQUIVS;
+    return "$opts->{name}-$opts->{type}";
+}
diff --git a/scripts/namecheck.pl b/scripts/namecheck.pl
new file mode 100644 (file)
index 0000000..e9c36e0
--- /dev/null
@@ -0,0 +1,267 @@
+#!/usr/bin/perl -w
+
+=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 HOMEPAGE
+
+The most recent version of this script may be found here:
+
+http://mybin.repository.steve.org.uk/?raw-file/tip/namecheck
+
+=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;
+
+
+
+#
+#  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  = $ENV{ '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();
+
+
+    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 $response = $ua->get($url);
+
+        #
+        #  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://alioth.debian.org/projects/%s | Invalid Project
+http://developer.berlios.de/projects/%s | Invalid Project
+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.ohloh.net/projects/%s     | Sorry, the page you are trying to view is not here
+https://gna.org/projects/%s          | Invalid Group
+http://code.google.com/p/%s          | Not Found
diff --git a/scripts/nmudiff.1 b/scripts/nmudiff.1
new file mode 100644 (file)
index 0000000..bbe4448
--- /dev/null
@@ -0,0 +1,117 @@
+.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 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 .dsc and any corresponding tar and diff 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) 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 sendmail command.  The command will be split on white
+space and will be interpreted by the shell.  Default is
+\fI/usr/sbin/sendmail\fR.  The \fI\-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 \fI\-t\fR
+option, this must be included in the \fISENDMAILCMD\fR, for example:
+\-\-sendmail="/usr/sbin/mymailer \-t".  This can also be set using the
+devscripts configuration files; see below.
+.TP
+\fB\-\-from\fR \fIEMAIL\fR
+If using the sendmail (\fB\-\-no\-mutt\fR) option, then the email to the
+BTS will be sent using the name and address in the environment
+variables DEBEMAIL and DEBFULLNAME.  If these are not set, then the
+variables EMAIL and NAME 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 0 indicates
+that the upload has not been delayed.  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
+.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 "0" indicates that the DELAYED 
+queue has not been used.
+.TP
+.B NMUDIFF_MUTT
+Can be "yes" (default) or "no", and specifies whether to use
+\fBmutt\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 "maybe"
+(default), which sends to the existing bug reports if exactly one bug
+is being closed; "yes", which always creates a new report, or "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).
+.TP
+.B BTS_SENDMAIL_COMMAND
+If this is set, specifies a sendmail command to use instead of
+/usr/sbin/sendmail.  Same as the \-\-sendmail command line option.
+.SH "SEE ALSO"
+.BR debdiff (1),
+.BR sensible-editor (1)
+and
+.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 (executable)
index 0000000..e2e39b2
--- /dev/null
@@ -0,0 +1,426 @@
+#! /bin/bash -e
+# 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 <http://www.gnu.org/licenses/>.
+
+PROGNAME=`basename $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
+    --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"
+VARS="NMUDIFF_DELAY NMUDIFF_MUTT NMUDIFF_NEWREPORT BTS_SENDMAIL_COMMAND"
+# 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 | egrep '^(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 help,version -n "$PROGNAME" -- "$@")
+if [ $? != 0 ] ; then exit 1 ; fi
+
+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 ;;
+    --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 ;;
+    --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 ] && ! command -v mutt > /dev/null 2>&1; then
+    echo "$PROGNAME: can't find mutt, falling back to sendmail instead" >&2
+    NMUDIFF_MUTT=no
+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 | grep ^Source: | cut -d" " -f2 )
+if [ -z "$SOURCE" ]; then
+    echo "nmudiff: could not determine source package name from changelog!" >&2
+    exit 1
+fi
+
+VERSION=$( dpkg-parsechangelog | grep ^Version: | cut -d" " -f2 )
+if [ -z "$VERSION" ]; then
+    echo "nmudiff: could not determine source package version from changelog!" >&2
+    exit 1
+fi
+
+CLOSES=$( dpkg-parsechangelog | grep ^Closes: | cut -d" " -f2- )
+
+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=$( sed -n "s/^[^ .][^ ]* (\(.*\)).*$/\1/p" debian/changelog | \
+  head -2 | tail -1 )
+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 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
+tags $b + patch"
+       fi
+       if [ "$NMUDIFF_DELAY" != "0" ] && [ "`bts select bugs:$b tag:pending`" != "$b" ]; then
+           TAGS="$TAGS
+tags $b + pending"
+       fi
+    done
+    TO_ADDRESSES_SENDMAIL=$(echo "$TO_ADDRESSES_SENDMAIL" | tail -n +2)
+    if [ "$TAGS" != "" ]; then
+        TAGS=$(echo "$TAGS" | tail -n +2)
+        TAGS="$TAGS
+thanks"
+        BCC_ADDRESS_SENDMAIL="control@bugs.debian.org"
+        BCC_ADDRESS_MUTT="-b control@bugs.debian.org"
+    fi
+fi
+
+TMPNAM="$( tempfile )"
+
+if [ "$NMUDIFF_DELAY" = "XX" ]; then
+    DELAY_HEADER="
+[Replace XX with correct value]"
+fi
+
+if [ "$NMUDIFF_DELAY" = "0" ]; then
+    BODY="$(printf "%s\n%s\n" \
+"I've prepared an NMU for $SOURCE (versioned as $VERSION). The diff" \
+"is attached to this message.")"
+else
+    BODY="$(printf "%s\n%s\n%s\n" \
+"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.")"
+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
+Dear maintainer,
+
+$BODY
+
+Regards.
+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
+Dear maintainer,
+
+$BODY
+
+Regards.
+EOF
+
+    mutt -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/pkgnames.bash_completion b/scripts/pkgnames.bash_completion
new file mode 100644 (file)
index 0000000..8a8f98e
--- /dev/null
@@ -0,0 +1,23 @@
+_pkg_names() 
+{
+    local cur prev opts
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+
+    COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) )
+
+    return 0
+}
+
+_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 -F _pkg_names wnpp-alert wnpp-check mk-build-deps rmadison mass-bug debsnap dd-list build-rdeps who-uploads transition-check getbuildlog dcontrol grep-excuses rc-alert bts whodepends dget pts-subscribe debc pts-unsubscribe
+complete -o dirnames -F _debc debc
diff --git a/scripts/plotchangelog.1 b/scripts/plotchangelog.1
new file mode 100644 (file)
index 0000000..68ea6e2
--- /dev/null
@@ -0,0 +1,127 @@
+.TH PLOTCHANGELOG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+plotchangelog \- graph debian changelogs
+.SH SYNOPSIS
+.B plotchangelog
+.I "[options] changelog ..."
+.SH "DESCRIPTION"
+.BR plotchangelog
+is a tool to aid in visualizing a Debian changelog. 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, \-\-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, \-\-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, \-\-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, \-\-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, \-\-save=file
+Save the graph to "file" in postscript format instead of immediately
+displaying it.
+.TP
+.B \-u, \-\-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
+.BI \-g commands, \-\-gnuplot=" commands "
+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 "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.
+.TP
+.B \-\-help
+Show a usage summary.
+.TP
+.B \-\-version
+Display version, author and copyright information.
+.TP
+.B \-\-noconf, \-\-no-conf
+Do not read any configuration files (see below).
+.TP
+.B changelog ...
+The changelog files to graph. If multiple files are specified they will all
+be display 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
+"\-l \-b".  Do not include "\-g" or "\-\-gnuplot" 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.pl b/scripts/plotchangelog.pl
new file mode 100755 (executable)
index 0000000..190e792
--- /dev/null
@@ -0,0 +1,415 @@
+#! /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 <http://www.gnu.org/licenses/>.
+
+use 5.006;
+use strict;
+use FileHandle;
+use File::Basename;
+use File::Temp qw/ tempfile /;
+use Fcntl;
+use Getopt::Long;
+
+BEGIN {
+    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        Don\'t read devscripts configuration files
+
+  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 (file)
index 0000000..ba9f881
--- /dev/null
@@ -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 [options] \fIpackage\fR
+.PP
+\fBpts-unsubscribe\fR [options] \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 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 \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
+http://www.debian.org/doc/developers-reference/ch-resources#s-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 (executable)
index 0000000..3a0e8c3
--- /dev/null
@@ -0,0 +1,177 @@
+#! /bin/bash -e
+
+# Subscribe to the PTS for a specified package for a limited length of time
+
+PROGNAME=`basename $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 | egrep '^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" -- "$@")
+
+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 2>&1; 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 ]; then
+       if ! command -v at >/dev/null 2>&1; 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
+    fi
+
+    cd /
+    if [ "$PTS_UNTIL" != forever ]; then
+       TEMPFILE=$(mktemp) || { echo "$PROGNAME: Couldn't create tempfile!" >&2; exit 1; }
+       trap "rm -f '$TEMPFILE'" 0 1 2 3 7 10 13 15
+       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/rc-alert.1 b/scripts/rc-alert.1
new file mode 100644 (file)
index 0000000..6268f5f
--- /dev/null
@@ -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 [inclusion options] [\-\-debtags [tag[,tag ...]] [\-\-popcon] [package ...]\fR
+.br
+\fBrc\-alert \-\-help|\-\-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~/.devscripts_cache\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~/.devscripts_cache\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 (executable)
index 0000000..6db03ac
--- /dev/null
@@ -0,0 +1,421 @@
+#!/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 <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use lib '/usr/share/devscripts';
+use Devscripts::Packages;
+use File::Basename;
+use Getopt::Long;
+
+sub remove_duplicate_values($);
+sub store_if_relevant(%);
+sub human_flags($);
+sub unhtmlsanit($);
+sub dt_parse_request($);
+
+my $cachedir = $ENV{'HOME'}."/.devscripts_cache/";
+my $url = "http://bugs.debian.org/release-critical/other/all.html";
+my $cachefile = $cachedir . basename($url);
+my $forcecache = 0;
+my $usecache = 0;
+
+my %flagmap = ( '(P)' => "pending",
+               '.(\+)' => "patch",
+               '..(H)' => "help [wanted]",
+               '...(M)' => "moreinfo [needed]",
+               '....(R)' => "unreproducible",
+               '.....(S)' => "security",
+               '......(U)' => "upstream",
+               '.......(I)' => "lenny-ignore or squeeze-ignore",
+             );
+# A little hacky but allows us to sort the list by length
+my %distmap = ( '(O)' => "oldstable",
+               '.?(S)' => "stable",
+               '.?.?(T)' => "testing",
+               '.?.?.?(U)' => "unstable",
+               '.?.?.?.?(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,
+          );
+
+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
+
+unless (system("command -v wget >/dev/null 2>&1") == 0) {
+    die "$progname: this program requires the wget package to be installed\n";
+}
+
+
+if (! -d $cachedir and $forcecache) {
+    mkdir $cachedir
+       or die "$progname: can't make cache directory $cachedir: $!\n";
+}
+
+if (-d $cachedir) {
+    chdir $cachedir or die "$progname: can't cd $cachedir: $!\n";
+
+    if (system("wget -qN $url") != 0) {
+       die "$progname: wget failed!\n";
+    }
+    open BUGS, $cachefile or die "$progname: could not read $cachefile: $!\n";
+}
+else {
+    open BUGS, "wget -q -O - $url |" or
+       die "$progname: could not run 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(0);
+}
+
+## 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, "wget -q -O - 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 %pkg_store;
+while (defined(my $line = <BUGS>)) {
+    if( $line =~ /^<div class="package">/) {
+       $found_bugs_start = 1;
+    }
+    if( ! defined($found_bugs_start)) {
+       next;
+    } elsif ($line =~ m%<a name="([^\"]+)"><strong>Package:</strong></a> <a href="[^\"]+">%i) {
+       $current_package = $1;
+       $comment = '';
+    } elsif ($line =~ m%<a name="(\d+)"></a>\s*<a href="[^\"]+">\d+</a> (\[[^\]]+\])( \[[^\]]+\])? ([^<]+)%i) {
+       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{$_}; }
+
+close BUGS or die "$progname: could not close $cachefile: $!\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 = @_;
+    
+    if (exists($$package_list{$args{pkg}})) {
+       # 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: $args{pkg}\n" .
+           $comment .  # non-empty comments always contain the trailing \n
+           "Bug:     $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 $flag ( sort { length $a <=> length $b } keys %flagmap ) {
+       if ($mrf =~ /^\[(?:$flag)/) {
+           if ($excludetags =~ /\Q$1\E/) {
+               $matchedexcludes++;
+           } elsif ($includetags =~ /\Q$1\E/ or ! $includetags) {
+               $matchedflags++;
+           }
+           push @hrf, $flagmap{$flag};
+       }
+    }
+    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 $dist ( sort { length $a <=> length $b } keys %distmap ) {
+       if ($mrf =~ /(?:$dist)/) {
+           if ($excludedists =~ /$dist/) {
+               $matchedexcludes++;
+           } elsif ($includedists =~ /$dist/ or ! $includedists) {
+               $matcheddists++;
+           }
+           push @hrf, $distmap{$dist};
+       }
+    }
+    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:/org/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/rmadison.pl b/scripts/rmadison.pl
new file mode 100755 (executable)
index 0000000..505d446
--- /dev/null
@@ -0,0 +1,312 @@
+#!/usr/bin/perl -w
+# vim:sw=4:sta:
+
+# Copyright (C) 2006, 2007, 2008 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
+
+use strict;
+use File::Basename;
+use Getopt::Long;
+
+BEGIN {
+    # 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.3';
+
+sub version($) {
+    my ($fd) = @_;
+    print $fd "rmadison $VERSION (devscripts ###VERSION###) (C) 2006, 2007 Christoph Berg <myon\@debian.org>\n";
+}
+
+sub usage($$) {
+    my ($fd, $exit) = @_;
+    print <<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
+  -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 http://qa.debian.org/madison.php
+
+  --noconf, --no-conf        don\'t read devscripts configuration files
+
+ARCH, COMPONENT and SUITE can be comma (or space) separated lists, e.g.
+    --architecture=m68k,i386
+EOT
+    exit $exit;
+}
+
+my $params;
+my %url_map = (
+    'debian' => "http://qa.debian.org/madison.php",
+    'qa' => "http://qa.debian.org/madison.php",
+    'myon' => "http://qa.debian.org/~myon/madison.php",
+    'bpo' => "http://backports.debian.org/cgi-bin/madison.cgi",
+    'debug' => "http://debug.debian.net/cgi-bin/madison.cgi",
+    'ubuntu' => "http://people.canonical.com/~ubuntu-archive/madison.cgi",
+    'udd' => 'http://qa.debian.org/cgi-bin/madison.cgi',
+);
+my $default_url = "debian";
+
+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 $envvar (@config_vars) {
+       if ($envvar =~ /^RMADISON_URL_MAP_([^=]*)=(.*)$/) {
+           $url_map{lc($1)}=$2;
+       } elsif ($envvar =~ /^RMADISON_DEFAULT_URL=(.*)$/) {
+           $default_url=$1;
+       }
+    }
+}
+
+Getopt::Long::config('bundling');
+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'},
+    '-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;
+}
+
+unless (@ARGV) {
+    print STDERR "E: need at least one package name as an argument.\n";
+    exit 1;
+}
+if ($params->{regex}) {
+    print STDERR "E: rmadison does not support the -r --regex option.\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;
+push @args, "a=$params->{'architecture'}" if $params->{'architecture'};
+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, "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;
+
+foreach my $url (@url) {
+    print "$url:\n" if @url > 1;
+    $url = $url_map{$url} if $url_map{$url};
+    my @cmd = -x "/usr/bin/curl" ? qw/curl -s -S -L/ : qw/wget -q -O -/;
+    system @cmd, $url . (($url =~ m/\?/)?'&':'?')."package=" . join("+", map { uri_escape($_) } @ARGV) . "&text=on&" . join ("&", @args);
+}
+
+=pod
+
+=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<http://qa.debian.org/madison.php> provides that service without
+requiring ssh access to ftp-master.debian.org or the mirror on
+ries.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<-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> or B<qa> http://qa.debian.org/madison.php (the default)
+ B<bpo> http://backports.debian.org/cgi-bin/madison.cgi
+ B<debug> http://debug.debian.net/cgi-bin/madison.cgi
+ B<ubuntu> http://people.canonical.com/~ubuntu-archive/madison.cgi
+
+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=m68k,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.
+
+=back
+
+=head1 NOTES
+
+B<dak ls> also supports B<-r>, B<--regex> to treat I<PACKAGE> as a regex. Since
+that can easily DoS the database ("-r ."), this option is not supported by the
+CGI and rmadison.
+
+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, s, S, t, and package. The parameter text is passed to
+enable plain-text output.
+
+=head1 SEE ALSO
+
+madison-lite(1), dak(1).
+
+=head1 AUTHOR
+
+rmadison and http://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/svnpath.pl b/scripts/svnpath.pl
new file mode 100755 (executable)
index 0000000..ddecd91
--- /dev/null
@@ -0,0 +1,101 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+svnpath - output svn url with support for tags and branches
+
+=head1 SYNOPSIS
+
+svnpath
+
+svnpath tags
+
+svnpath branches
+
+svnpath trunk
+
+=head1 DESCRIPTION
+
+svnpath is intended to be run in a subversion working copy.
+
+In its simplest usage, svnpath with no parameters outputs the svn url for
+the repository associated with the working copy.
+
+If a parameter is given, 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 "trunk", "tags", or
+"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
+~/.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
+
+$ENV{LANG}="C";
+
+my $wanted=shift;
+my $path=shift;
+
+if (length $path) {
+       chdir $path || die "$path: unreadable\n";
+}
+
+our $url;
+if (-d ".svn") {
+       # Get the svn url of the current directory.
+       $url = `svn info .| grep -i ^URL: | cut -d ' ' -f 2`;
+}
+else {
+       # 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!;
+
+       if (-e "$ENV{HOME}/.svnpath") {
+               require "$ENV{HOME}/.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 (executable)
index 0000000..e25378f
--- /dev/null
@@ -0,0 +1,443 @@
+#! /usr/bin/perl -w
+#
+# 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;
+use File::Basename;
+use lib '/usr/share/devscripts';
+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;
+
+Getopt::Long::Configure ("bundling");
+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" => \$opt_to,
+          "wnpp|w" => \$opt_wnpp,
+          "interactive|i" => \$opt_interactive,
+           )
+    or die "Usage: $progname [options]\nRun $progname --help for more details\n";
+
+$opt_to = "-v$opt_to" if $opt_to;
+
+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> [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 -n, --noact
+
+Check whether any bugs require tagging, but do not actually do so.
+
+=item -s, --silent
+
+Do not output any messages.
+
+=item -v, --verbose
+
+List each bug checked and tagged in turn.
+
+=item -f, --force
+
+Do not query the BTS, but (re)tag all bugs closed in the changelog.
+
+=item --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 --to, the header line output
+will always be that of the most recent version.
+
+=item --no-comments
+
+Do not include changelog entries in the generated mail.
+
+=item -c, --confirm
+
+Tag bugs as both confirmed and pending.
+
+=item -t, --to <version>
+
+Parse changelogs for all versions strictly greater than <version>.
+
+Equivalent to dpkg-parsechangelog's -v option.
+
+=item -i, --interactive
+
+Display the message which would be sent to the BTS and, except when
+--noact was used, prompt for confirmation before sending it.
+
+=item -w, --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
+
+my $source;
+my @closes;
+my $in_changes=0;
+my $changes='';
+my $header='';
+
+foreach my $file ("debian/changelog") {
+    if (! -f $file) {
+       die "$progname error: $file does not exist!\n";
+    }
+}
+
+open PARSED, "dpkg-parsechangelog $opt_to |";
+
+while (<PARSED>) {
+    if (/^Source: (.*)/) {
+       $source = $1;
+    } elsif (/^Closes: (.*)$/) {
+       @closes = split ' ', $1;
+    } elsif (/^Changes: /) {
+       $in_changes = 1;
+    } elsif ($in_changes) {
+       if ($header) {
+           next unless /^ {3}[^[]/;
+           $changes .= "\n" if $changes;
+           $changes .= $_;
+       } else {
+           $header = $_;
+       }
+    }
+}
+
+close PARSED;
+
+# Add a fake entry to the end of the recorded changes
+# This makes the parsing of the changes simpler
+$changes .= "   *";
+
+my $pending;
+my $open;
+
+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";
+    }
+}
+
+my %bugs = map { $_ => 1} @closes;
+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 (executable)
index 0000000..bf8079b
--- /dev/null
@@ -0,0 +1,237 @@
+#!/usr/bin/perl -w
+
+# 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|--version>
+
+B<transition-check> [B<-f|--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 .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 0
+
+Either B<--help> or B<--version> was used, or none of the packages examined
+was involved in a transition.
+
+=item 1
+
+At least one package examined is involved in a current transition.
+
+=back
+
+=head1 LICENSE
+
+This code is copyright by Adam D. Barratt <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 <adam@adam-barratt.org.uk>
+
+=cut
+
+use warnings;
+use strict;
+use Getopt::Long;
+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', 'http://ftp-master.debian.org/testing/hints/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.1 b/scripts/uscan.1
new file mode 100644 (file)
index 0000000..0550ec4
--- /dev/null
@@ -0,0 +1,546 @@
+.TH USCAN 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*-
+.SH NAME
+uscan \- scan/watch upstream sources for new releases of software
+.SH SYNOPSIS
+\fBuscan\fR [\fIoptions\fR] [\fIpath-to-debian-source-packages\fR ...]
+.SH DESCRIPTION
+\fBuscan\fR scans the given directories (or the current directory if
+none are specified) and all of their subdirectories for packages
+containing a control file \fIdebian/watch\fR.  Parameters are then
+read from those control files and upstream ftp or http sites are
+inspected for newly available updates (as compared with the upstream
+version number retrieved from the \fIdebian/changelog\fR file in the
+same directory).  The newest updates are retrieved (as determined by
+their version numbers) and if specified in the watchfile, a program
+may then be executed on the newly downloaded source.
+.PP
+The traditional \fIdebian/watch\fR files can still be used, but the
+current format offers both simpler and more flexible services.  We do
+not describe the old format here; for their documentation, see the
+source code for \fRuscan\fR.
+
+.SH FORMAT of debian/watch files
+
+The following demonstrates the type of entries which can appear in a
+\fIdebian/watch\fR file.  Obviously, not all of these would appear in
+one such file; usually, one would have one line for the current
+package.
+
+.PP
+.nf
+# format version number, currently 3; this line is compulsory!
+version=3
+
+# Line continuations are performed with \\
+
+# This is the format for an FTP site:
+# Full-site-with-pattern  [Version  [Action]]
+ftp://ftp.tex.ac.uk/tex-archive/web/c_cpp/cweb/cweb-(.*)\\.tar\\.gz \\
+  debian  uupdate
+
+# This is the format for an FTP site with regex special characters in
+# the filename part
+ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\\+\\+-(.*)\\.tar\\.gz
+
+# This is the format for an FTP site with directory pattern matching
+ftp://ftp.nessus.org/pub/nessus/nessus-([\\d\\.]+)/src/nessus-core-([\\d\\.]+)\\.tar\\.gz
+
+# This can be used if you want to override the PASV setting
+# for a specific site
+# opts=pasv ftp://.../...
+
+# This is one format for an HTTP site, which is the same
+# as the FTP format.  uscan starts by downloading the homepage,
+# obtained by removing the last component of the URL; in this case,
+# http://www.cpan.org/modules/by-module/Text/
+http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.*)\\.tar\\.gz
+
+# This is a variant HTTP format which allows direct specification of
+# the homepage:
+# Homepage  Pattern  [Version  [Action]]
+http://www.dataway.ch/~lukasl/amph/amph.html \\
+  files/amphetamine-([\\d\\.]*).tar.bz2
+
+# This one shows that recursive directory scanning works, in either of
+# two forms, as long as the website can handle requests of the form
+# http://site/inter/mediate/dir/
+http://tmrc.mit.edu/mirror/twisted/Twisted/(\\d\\.\\d)/ \\
+  Twisted-([\\d\\.]*)\\.tar\\.bz2
+http://tmrc.mit.edu/mirror/twisted/Twisted/(\\d\\.\\d)/Twisted-([\\d\\.]*)\\.tar\\.bz2
+
+# qa.debian.org runs a redirector which allows a simpler form of URL
+# for SourceForge based projects. The format below will automatically
+# be rewritten to use the redirector.
+http://sf.net/audacity/audacity-src-(.+)\\.tar\\.gz
+
+# githubredir.debian.net is a redirector for GitHub projects
+# It can be used as following:
+http://githubredir.debian.net/github/<user>/<project> (.*).tar.gz
+
+# This is the format for a site which has funny version numbers;
+# the parenthesised groups will be joined with dots to make a
+# sanitised version number
+http://www.site.com/pub/foobar/foobar_v(\\d+)_(\\d+)\\.tar\\.gz
+
+# 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.)
+opts="uversionmangle=s/^/0.0./" \\
+  ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\\.tar\\.gz
+
+# Similarly, the upstream part of the Debian version number can be
+# mangled:
+opts=dversionmangle=s/\\.dfsg\\.\\d+$// \\
+  http://some.site.org/some/path/foobar-(.*)\\.tar\\.gz
+
+# The filename is found by taking the last component of the URL and
+# removing everything after any '?'.  If this would not make a usable
+# filename, use filenamemangle.  For example,
+# <A href="http://foo.bar.org/download/?path=&download=foo-0.1.1.tar.gz">
+# could be handled as:
+# opts=filenamemangle=s/.*=(.*)/$1/ \\
+#     http://foo.bar.org/download/\\?path=&download=foo-(.*)\\.tar\\.gz
+# 
+# <A href="http://foo.bar.org/download/?path=&download_version=0.1.1">
+# could be handled as:
+# opts=filenamemangle=s/.*=(.*)/foo-$1\\.tar\\.gz/ \\
+#    http://foo.bar.org/download/\\?path=&download_version=(.*)
+
+# The option downloadurlmangle can be used to mangle the URL of the file
+# to download.  This can only be used with http:// URLs.  This may be
+# necessary if the link given on the webpage needs to be transformed in
+# some way into one which will work automatically, for example:
+# opts=downloadurlmangle=s/prdownload/download/ \\
+#   http://developer.berlios.de/project/showfiles.php?group_id=2051 \\
+#   http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz
+
+.fi
+.PP
+Comment lines may be introduced with a `#' character.  Continuation
+lines may be indicated by terminating a line with a backslash
+character.
+.PP
+The first (non-comment) line of the file must begin `version=3'.  This
+allows for future extensions without having to change the name of the
+file.
+.PP
+There are two possibilities for the syntax of an HTTP watchfile line,
+and only one for an FTP line.  We begin with the common (and simpler)
+format.  We describe the optional opts=... first field below, and
+ignore it in what follows.
+.PP
+The first field gives the full pattern of URLs being searched for.  In
+the case of an FTP site, the directory listing for the requested
+directory will be requested and this will be scanned for files
+matching the basename (everything after the trailing `/').  In the
+case of an HTTP site, the URL obtained by stripping everything after
+the trailing slash will be downloaded and searched for hrefs (links of
+the form <a href=...>) to either the full URL pattern given, or to the
+absolute part (everything without the http://host.name/ part), or to
+the basename (just the part after the final `/').  Everything up to
+the final slash is taken as a verbatim URL, as long as there are no
+parentheses (`(' and ')') in this part of the URL: if it does, the
+directory name will be matched in the same way as the final component
+of the URL as described below.  (Note that regex metacharacters such
+as `+' are regarded literally unless they are in a path component
+containing parentheses; see the Atlas-C++ example above.  Also, the
+parentheses must match within each path component.)
+.PP
+The pattern (after the final slash) is a Perl regexp (see
+\fBperlre\fR(1) for details of these).  You need to make the pattern
+so tight that it matches only the upstream software you are interested
+in and nothing else.  Also, the pattern will be anchored at the
+beginning and at the end, so it must match the full filename.  (Note
+that for HTTP URLs, the href may include the absolute path or full
+site and path and still be accepted.)  The pattern must contain at
+least one Perl group as explained in the next paragraph.
+.PP
+Having got a list of `files' matching the pattern, their version
+numbers are extracted by treating the part matching the Perl regexp
+groups, demarcated by `(...)', joining them with `.' as a separator,
+and using the result as the version number of the file.  The version
+number will then be mangled if required by the uversionmangle option
+described below.  Finally, the file versions are then compared to find
+the one with the greatest version number, as determined by \fBdpkg
+\-\-compare-versions\fR.  Note that if you need Perl groups which are
+not to be used in the version number, either use `(?:...)' or use the
+uversionmangle option to clean up the mess!
+.PP
+The current (upstream) version can be specified as the second
+parameter in the watchfile line.  If this is \fIdebian\fR or absent,
+then the current Debian version (as determined by
+\fIdebian/changelog\fR) is used to determine the current upstream
+version.  The current upstream version may also be specified by the
+command-line option \fB\-\-upstream-version\fR, which specifies the
+upstream version number of the currently installed package (i.e., the
+Debian version number without epoch and Debian revision).  The
+upstream version number will then be mangled using the dversionmangle
+option if one is specified, as described below.  If the newest version
+available is newer than the current version, then it is downloaded
+into the parent directory, unless the \fB\-\-report\fR or
+\fR\-\-report-status\fR option has been used.  Once the file has been
+downloaded, then a symlink to the file is made from
+\fI<package>_<version>.orig.tar.gz\fR if the file has a \fI.tar.gz\fR
+or a \fI.tgz\fR suffix and from \fI<package>_<version>.orig.tar.bz2\fR
+if the file has a \fI.tar.bz2\fR or a \fI.tbz\fR or \fI.tbz2\fR
+suffix.
+.PP
+Finally, if a third parameter (an action) is given in the watchfile
+line, this is taken as the name of a command, and the command
+.nf
+    \fIcommand \fB\-\-upstream-version\fI version filename\fR
+.fi
+is executed, using either the original file or the symlink name.  A
+common such command would be \fBuupdate\fR(1).  (Note that the calling
+syntax was slightly different when using watchfiles without a
+`version=...' line; there the command executed was `command filename
+version'.)  If the command is \fBuupdate\fR, then the
+\fB\-\-no\-symlink\fR option is given to \fBuupdate\fR as a first
+option, since any requested symlinking will already be done by
+\fBuscan\fR.
+.PP
+The alternative version of the watchfile syntax for HTTP URLs is as
+follows.  The first field is a homepage which should be downloaded and
+then searched for hrefs matching the pattern given in the second
+field.  (Again, this pattern will be anchored at the beginning and the
+end, so it must match the whole href.  If you want to match just the
+basename of the href, you can use a pattern like
+".*/name-(.*)\\.tar\\.gz" if you know that there is a full URL, or
+better still: "(?:.*/)?name-(.*)\\.tar\\.gz" if there may or may not
+be.  Note the use of (?:...) to avoid making a backreference.)  If any
+of the hrefs in the homepage which match the (anchored) pattern are
+relative URLs, they will be taken as being relative to the base URL of
+the homepage (i.e., with everything after the trailing slash removed),
+or relative to the base URL specified in the homepage itself with a
+<base href="..."> tag.  The third and fourth fields are the version
+number and action fields as before.
+.SH "PER-SITE OPTIONS"
+A watchfile line may be prefixed with `opts=\fIoptions\fR', where
+\fIoptions\fR is a comma-separated list of options.  The whole
+\fIoptions\fR string may be enclosed in double quotes, which is
+necessary if \fIoptions\fR contains any spaces.  The recognised
+options are as follows:
+.TP
+\fBactive\fR and \fBpassive\fR (or \fBpasv\fR)
+If used on an FTP line, these override the choice of whether to use
+PASV mode or not, and force the use of the specified mode for this
+site.
+.TP
+\fBuversionmangle=\fIrules\fR
+This is used to mangle the upstream version number as matched by the
+ftp://... or http:// rules as follows.  First, the \fIrules\fR string
+is split into multiple rules at every `;'.  Then the upstream version
+number is mangled by applying \fIrule\fR to the version, in a similar
+way to executing the Perl command:
+.nf
+    $version =~ \fIrule\fR;
+.fi
+for each rule.  Thus, suitable rules might be `s/^/0./' to prepend
+`0.' to the version number and `s/_/./g' to change underscores into
+periods.  Note that the \fIrules\fR string may not contain commas;
+this should not be a problem.
+
+\fIrule\fR may only use the 's', 'tr' and 'y' operations.  When the 's'
+operation is used, only the 'g', 'i' and 'x' flags are available and
+\fIrule\fR may not contain any expressions which have the potential to
+execute code (i.e. the (?{}) and (??{}) constructs are not supported).
+.TP
+\fBdversionmangle=\fIrules\fR
+This is used to mangle the Debian version number of the currently
+installed package in the same way as the \fBuversionmangle\fR option.
+Thus, a suitable rule might be `s/\\.dfsg\\.\\d+$//' to remove a
+`.dfsg.1' suffix from the Debian version number, or to handle `.pre6'
+type version numbers.  Again, the \fIrules\fR string may not contain
+commas; this should not be a problem.
+.TP
+\fBversionmangle=\fIrules\fR
+This is a syntactic shorthand for
+\fBuversionmangle=\fIrules\fB,dversionmangle=\fIrules\fB, applying the
+same rules to both the upstream and Debian version numbers.
+.TP
+\fBfilenamemangle=\fIrules\fR
+This is used to mangle the filename with which the downloaded file
+will be saved, and is parsed in the same way as the
+\fBuversionmangle\fR option.  Examples of its use are given in the
+examples section above.
+.TP
+\fBdownloadurlmangle=\fIrules\fR
+This is used to mangle the URL to be used for the download.  The URL
+is first computed based on the homepage downloaded and the pattern
+matched, then the version number is determined from this URL.
+Finally, any rules given by this option are applied before the actual
+download attempt is made. An example of its use is given in the
+examples section above.
+.SH "Directory name checking"
+Similarly to several other scripts in the \fBdevscripts\fR package,
+\fBuscan\fR explores the requested directory trees looking for
+\fIdebian/changelog\fR and \fIdebian/watch\fR 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 \fIdebian/changelog\fR 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 DEVSCRIPTS_CHECK_DIRNAME_LEVEL and
+DEVSCRIPTS_CHECK_DIRNAME_REGEX, and their corresponding command-line
+options \fB\-\-check-dirname-level\fR and
+\fB\-\-check-dirname-regex\fR.
+.PP
+DEVSCRIPTS_CHECK_DIRNAME_LEVEL 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, that is, the directory
+containing \fIdebian/changelog\fR is not the directory from which
+\fBuscan\fR was invoked.  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 DEVSCRIPTS_CHECK_DIRNAME_REGEX 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 EXAMPLE
+This script will perform a fully automatic upstream update.
+
+.nf
+#!/bin/sh \-e
+# called with '\-\-upstream-version' <version> <file>
+uupdate "$@"
+package=`dpkg\-parsechangelog | sed \-n 's/^Source: //p'`
+cd ../$package-$2
+debuild
+.fi
+
+Note that we don't call \fBdupload\fR or \fBdput\fR automatically, as
+the maintainer should perform sanity checks on the software before
+uploading it to Debian.
+.SH OPTIONS
+.TP
+.B \-\-report, \-\-no\-download
+Only report about available newer versions but do not download anything.
+.TP
+.B \-\-report\-status
+Report on the status of all packages, even those which are up-to-date,
+but do not download anything.
+.TP
+.B \-\-download
+Report and download.  (This is the default behaviour.)
+.TP
+.B \-\-destdir
+Path of directory to which to download.
+.TP
+.B \-\-force-download
+Download upstream even if up to date (will not overwrite local files, however)
+.TP
+.B \-\-pasv
+Force PASV mode for FTP connections.
+.TP
+.B \-\-no\-pasv
+Do not use PASV mode for FTP connections.
+.TP
+\fB\-\-timeout\fR \fIN\fR
+Set timeout to N seconds (default 20 seconds).
+.TP
+.B \-\-symlink
+Make orig.tar.gz symlinks to any downloaded files if their extensions
+are \fI.tar.gz\fR or \fI.tgz\fR, and similarly for to orig.tar.bz2 for
+the suffixes \fI.tar.gz\fR, \fI.tbz\fR and \fI.tbz2\fR.  (This is the
+default behaviour.)
+.TP
+.B \-\-rename
+Instead of symlinking, rename the downloaded files to their Debian
+orig.tar.gz names if their extensions are \fI.tar.gz\fR or \fI.tgz\fR,
+and similarly for tar.bz2 files.
+.TP
+.B \-\-repack
+After having downloaded an lzma tar, xz tar, bzip tar or zip archive,
+repack it to a gzip tar archive, which is still currently required as a
+member of a Debian source package. Does nothing if the downloaded
+archive is not an lzma tar archive, xz tar archive, bzip tar archive or
+a zip archive (i.e. it doesn't match a .tlz, .tar.lzma, .txz, .tar.xz
+\^.tbz, .tbz2, .tar.bz2 or .zip extension). The unzip package must be
+installed in order to repack .zip archives, the lzma package must be
+installed to repack lzma tar archives, and the xz-utils package must be
+installed to repack xz tar archives.
+.TP
+.B \-\-no\-symlink
+Don't make these symlinks and don't rename the files.
+.TP
+.B \-\-dehs
+Use an XML format for output, as required by the DEHS system.
+.TP
+.B \-\-no-dehs
+Use the traditional uscan output format.  (This is the default behaviour.)
+.TP
+\fB\-\-package\fR \fIpackage\fR
+Specify the name of the package to check for rather than examining
+\fIdebian/changelog\fR; this requires the \fB\-\-upstream-version\fR
+(unless a version is specified in the watchfile)
+and \fB\-\-watchfile\fR options as well.  Furthermore, no directory
+scanning will be done and nothing will be downloaded.  This option is
+probably most useful in conjunction with the DEHS system (and
+\fB\-\-dehs\fR).
+.TP
+\fB\-\-upstream-version\fR \fIupstream-version\fR
+Specify the current upstream version rather than examine the watchfile
+or changelog to determine it.  This is ignored if a directory scan is
+being performed and more than one watchfile is found.
+.TP
+\fB\-\-watchfile\fR \fIwatchfile\fR
+Specify the watchfile rather than perform a directory scan to
+determine it.  If this option is used without \fB\-\-package\fR, then
+\fBuscan\fR must be called from within the Debian package source tree
+(so that \fIdebian/changelog\fR can be found simply by stepping up
+through the tree).
+.TP
+\fB\-\-download\-version\fR \fIversion\fR
+Specify the version which the upstream release must match in order to be
+considered, rather than using the release with the highest version.
+.TP
+\fB\-\-download\-current\-version\fR
+Download the currently packaged version
+.TP
+.B \-\-verbose
+Give verbose output.
+.TP
+.B \-\-no\-verbose
+Don't give verbose output.  (This is the default behaviour.)
+.TP
+.B \-\-debug
+Dump the downloaded web pages to stdout for debugging your watch file.
+.TP
+\fB\-\-check-dirname-level\fR \fIN\fR
+See the above section "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-check-dirname-regex\fR \fIregex\fR
+See the above section "Directory name checking" for an explanation of
+this option.
+.TP
+\fB\-\-user-agent\fR, \fB\-\-useragent\fR
+Override the default user agent header.
+.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 \-\-help
+Give brief usage information.
+.TP
+.B \-\-version
+Display version information.
+.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.  These may be overridden by command line
+options.  Environment variable settings are ignored for this purpose.
+If the first command line option given is \fB\-\-noconf\fR, then these
+files will not be read.  The currently recognised variables are:
+.TP
+.B USCAN_DOWNLOAD
+If this is set to \fIno\fR, then newer upstream files will not be
+downloaded; this is equivalent to the \fB\-\-report\fR or
+\fB\-\-no\-download\fR options.
+.TP
+.B USCAN_PASV
+If this is set to \fIyes\fR or \fIno\fR, this will force FTP
+connections to use PASV mode or not to, respectively.  If this is set
+to \fIdefault\fR, then Net::FTP(3) make the choice (primarily based on
+the FTP_PASSIVE environment variable).
+.TP
+.B USCAN_TIMEOUT
+If set to a number \fIN\fR, then set the timeout to \fIN\fR seconds. 
+This is equivalent to the \fB\-\-timeout\fR option.
+.TP
+.B USCAN_SYMLINK
+If this is set to \fIno\fR, then a pkg_version.orig.tar.{gz|bz2}
+symlink will not be made (equivalent to the \fB\-\-no\-symlink\fR
+option).  If it is set to \fIyes\fR or \fIsymlink\fR, then the
+symlinks will be made.  If it is set to \fIrename\fR, then the files
+are renamed (equivalent to the \fB\-\-rename\fR option).
+.TP
+.B USCAN_DEHS_OUTPUT
+If this is set to \fIyes\fR, then DEHS-style output will be used.
+This is equivalent to the \fB\-\-dehs\fR option.
+.TP
+.B USCAN_VERBOSE
+If this is set to \fIyes\fR, then verbose output will be given.  This
+is equivalent to the \fB\-\-verbose\fR option.
+.TP
+.B USCAN_USER_AGENT
+If set, the specified user agent string will be used in place of the
+default.  This is equivalent to the \fB\-\-user-agent\fR option.
+.TP
+.B USCAN_DESTDIR
+If set, the downloaded files will be placed in this directory.  This is 
+equivalent to the \fB\-\-destdir\fR option.
+.TP
+.B USCAN_REPACK
+If this is set to \fIyes\fR, then after having downloaded a bzip tar,
+lzma tar, xz tar, or zip archive, \fBuscan\fR will repack it to a gzip tar.
+This is equivalent to the \fB\-\-repack\fR option.
+.SH "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.
+.TP
+0
+Either \fB\-\-help\fR or \fB\-\-version\fR was used, or for some
+watchfile which was examined, a newer upstream version was located.
+.TP
+1
+No newer upstream versions were located for any of the watchfiles
+examined.
+.SH "HISTORY AND UPGRADING"
+This section briefly describes the backwards-incompatible watchfile
+features which have been added in each watchfile version, and the
+first version of the \fBdevscripts\fR package which understood them.
+.TP
+.I Pre-version 2
+The watchfile syntax was significantly different in those days.  Don't
+use it.  If you are upgrading from a pre-version 2 watchfile, you are
+advised to read this manpage and to start from scratch.
+.TP
+.I Version 2
+devscripts version 2.6.90: The first incarnation of the current style
+of watchfiles.
+.TP
+.I Version 3
+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 behaviour, change the non-version-number groups to be
+(?:...) instead of a plain (...) group.
+.SH "SEE ALSO"
+.BR dpkg (1),
+.BR perlre (1),
+.BR uupdate (1)
+and
+.BR devscripts.conf (5).
+.SH AUTHOR
+The original version of \fBuscan\fR 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.
diff --git a/scripts/uscan.pl b/scripts/uscan.pl
new file mode 100755 (executable)
index 0000000..49a775a
--- /dev/null
@@ -0,0 +1,1979 @@
+#! /usr/bin/perl -w
+
+# uscan: This program looks for watchfiles 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
+#
+# 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/>.
+
+use 5.008;  # uses 'our' variables and filetest
+use strict;
+use Cwd;
+use File::Basename;
+use File::Copy;
+use File::Temp qw/tempdir/;
+use filetest 'access';
+use Getopt::Long;
+use lib '/usr/share/devscripts';
+use Devscripts::Versort;
+use Text::ParseWords;
+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\nto use this script\n";
+       } else {
+           die "$progname: problem loading the LWP::UserAgent module:\n  $@\nHave you installed the libwww-perl package?\n";
+       }
+    }
+}
+my $CURRENT_WATCHFILE_VERSION = 3;
+
+my $progname = basename($0);
+my $modified_conf_msg;
+my $opwd = cwd();
+
+my $haveSSL = 1;
+eval { require Crypt::SSLeay; };
+if ($@) {
+    $haveSSL = 0;
+}
+
+# Did we find any new upstream versions on our wanderings?
+our $found = 0;
+
+sub process_watchline ($$$$$$);
+sub process_watchfile ($$$$);
+sub recursive_regex_dir ($$$);
+sub newest_dir ($$$$$);
+sub dehs_msg ($);
+sub dehs_warn ($);
+sub dehs_die ($);
+sub dehs_output ();
+sub quoted_regex_replace ($);
+sub safe_replace ($$);
+
+sub usage {
+    print <<"EOF";
+Usage: $progname [options] [dir ...]
+  Process watchfiles in all .../debian/ subdirs of those listed (or the
+  current directory if none listed) to check for upstream releases.
+Options:
+    --report       Only report on newer or absent versions, do not download
+    --report-status
+                   Report status of packages, but do not download
+    --debug        Dump the downloaded web pages to stdout for debugging
+                   your watch file.
+    --destdir      Path of directory to which to download.
+    --download     Report on newer and absent versions, and download (default)
+    --force-download
+                   Always download the upstream release, even if up to date
+    --no-download  Report on newer and absent versions, but don\'t download
+    --pasv         Use PASV mode for FTP connections
+    --no-pasv      Do not use PASV mode for FTP connections (default)
+    --timeout N    Specifies how much time, in seconds, we give remote
+                   servers to respond (default 20 seconds)
+    --symlink      Make an orig.tar.gz symlink to downloaded file (default)
+    --rename       Rename to orig.tar.gz instead of symlinking
+                   (Both will use orig.tar.bz2 if appropriate)
+    --repack       Repack downloaded archives from orig.tar.bz2 or orig.zip to
+                   orig.tar.gz
+                   (does nothing if downloaded archive orig.tar.gz)
+    --no-symlink   Don\'t make symlink or rename
+    --verbose      Give verbose output
+    --no-verbose   Don\'t give verbose output (default)
+    --check-dirname-level N
+                   How much to check directory names:
+                   N=0   never
+                   N=1   only when 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(-.+)?')
+    --watchfile FILE
+                   Specify the watchfile rather than using debian/watch;
+                   no directory traversing will be done in this case
+    --upstream-version VERSION
+                   Specify the current upstream version in use rather than
+                   parsing debian/changelog to determine this
+    --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-current-version
+                   Download the currently packaged version
+    --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
+    --no-dehs      Use traditional uscan output format (default)
+    --dehs         Use DEHS style output (XML-type)
+    --user-agent, --useragent
+                   Override the default user agent
+    --no-conf, --noconf
+                   Don\'t read devscripts config files;
+                   must be the first option given
+    --help         Show this message
+    --version      Show version information
+
+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-2006 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.
+EOF
+}
+
+# What is the default setting of $ENV{'FTP_PASSIVE'}?
+our $passive = 'default';
+
+# Now start by reading configuration files and then command line
+# The next stuff is boilerplate
+
+my $destdir = "..";
+my $download = 1;
+my $download_version;
+my $force_download = 0;
+my $report = 0; # report even on up-to-date packages?
+my $repack = 0; # repack .tar.bz2 or .zip to .tar.gz
+my $symlink = 'symlink';
+my $verbose = 0;
+my $check_dirname_level = 1;
+my $check_dirname_regex = 'PACKAGE(-.+)?';
+my $dehs = 0;
+my %dehs_tags;
+my $dehs_end_output = 0;
+my $dehs_start_output = 0;
+my $pkg_report_header = '';
+my $timeout = 20;
+my $user_agent_string = 'Debian uscan ###VERSION###';
+
+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 = (
+                      'USCAN_TIMEOUT' => 20,
+                      'USCAN_DESTDIR' => '..',
+                      'USCAN_DOWNLOAD' => 'yes',
+                      'USCAN_PASV' => 'default',
+                      'USCAN_SYMLINK' => 'symlink',
+                      'USCAN_VERBOSE' => 'no',
+                      'USCAN_DEHS_OUTPUT' => 'no',
+                      'USCAN_USER_AGENT' => '',
+                      'USCAN_REPACK' => 'no',
+                      '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{'USCAN_DESTDIR'} =~ /^\s*(\S+)\s*$/
+       or $config_vars{'USCAN_DESTDIR'}='..';
+    $config_vars{'USCAN_DOWNLOAD'} =~ /^(yes|no)$/
+       or $config_vars{'USCAN_DOWNLOAD'}='yes';
+    $config_vars{'USCAN_PASV'} =~ /^(yes|no|default)$/
+       or $config_vars{'USCAN_PASV'}='default';
+    $config_vars{'USCAN_TIMEOUT'} =~ m/^\d+$/
+       or $config_vars{'USCAN_TIMEOUT'}=20;
+    $config_vars{'USCAN_SYMLINK'} =~ /^(yes|no|symlinks?|rename)$/
+       or $config_vars{'USCAN_SYMLINK'}='yes';
+    $config_vars{'USCAN_SYMLINK'}='symlink'
+       if $config_vars{'USCAN_SYMLINK'} eq 'yes' or
+           $config_vars{'USCAN_SYMLINK'} =~ /^symlinks?$/;
+    $config_vars{'USCAN_VERBOSE'} =~ /^(yes|no)$/
+       or $config_vars{'USCAN_VERBOSE'}='no';
+    $config_vars{'USCAN_DEHS_OUTPUT'} =~ /^(yes|no)$/
+       or $config_vars{'USCAN_DEHS_OUTPUT'}='no';
+    $config_vars{'USCAN_REPACK'} =~ /^(yes|no)$/
+       or $config_vars{'USCAN_REPACK'}='no';
+    $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'} =~ /^[012]$/
+       or $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'}=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;
+
+    $destdir = $config_vars{'USCAN_DESTDIR'}
+       if defined $config_vars{'USCAN_DESTDIR'};
+    $download = $config_vars{'USCAN_DOWNLOAD'} eq 'no' ? 0 : 1;
+    $passive = $config_vars{'USCAN_PASV'} eq 'yes' ? 1 :
+       $config_vars{'USCAN_PASV'} eq 'no' ? 0 : 'default';
+    $timeout = $config_vars{'USCAN_TIMEOUT'};
+    $symlink = $config_vars{'USCAN_SYMLINK'};
+    $verbose = $config_vars{'USCAN_VERBOSE'} eq 'yes' ? 1 : 0;
+    $dehs = $config_vars{'USCAN_DEHS_OUTPUT'} eq 'yes' ? 1 : 0;
+    $check_dirname_level = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_LEVEL'};
+    $check_dirname_regex = $config_vars{'DEVSCRIPTS_CHECK_DIRNAME_REGEX'};
+    $user_agent_string = $config_vars{'USCAN_USER_AGENT'}
+       if $config_vars{'USCAN_USER_AGENT'};
+    $repack = $config_vars{'USCAN_REPACK'} eq 'yes' ? 1 : 0;
+}
+
+# Now read the command line arguments
+my $debug = 0;
+my ($opt_h, $opt_v, $opt_destdir, $opt_download, $opt_force_download,
+    $opt_report, $opt_passive, $opt_symlink, $opt_repack);
+my ($opt_verbose, $opt_level, $opt_regex, $opt_noconf);
+my ($opt_package, $opt_uversion, $opt_watchfile, $opt_dehs, $opt_timeout);
+my $opt_download_version;
+my $opt_user_agent;
+my $opt_download_current_version;
+
+GetOptions("help" => \$opt_h,
+          "version" => \$opt_v,
+          "destdir=s" => \$opt_destdir,
+          "download!" => \$opt_download,
+          "download-version=s" => \$opt_download_version,
+          "force-download" => \$opt_force_download,
+          "report" => sub { $opt_download = 0; },
+          "report-status" => sub { $opt_download = 0; $opt_report = 1; },
+          "passive|pasv!" => \$opt_passive,
+          "timeout=i" => \$opt_timeout,
+          "symlink!" => sub { $opt_symlink = $_[1] ? 'symlink' : 'no'; },
+          "rename" => sub { $opt_symlink = 'rename'; },
+          "repack" => sub { $opt_repack = 1; },
+          "package=s" => \$opt_package,
+          "upstream-version=s" => \$opt_uversion,
+          "watchfile=s" => \$opt_watchfile,
+          "dehs!" => \$opt_dehs,
+          "verbose!" => \$opt_verbose,
+          "debug" => \$debug,
+          "check-dirname-level=s" => \$opt_level,
+          "check-dirname-regex=s" => \$opt_regex,
+          "user-agent=s" => \$opt_user_agent,
+          "useragent=s" => \$opt_user_agent,
+          "noconf" => \$opt_noconf,
+          "no-conf" => \$opt_noconf,
+          "download-current-version" => \$opt_download_current_version,
+          )
+    or die "Usage: $progname [options] [directories]\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_h) { usage(); exit 0; }
+if ($opt_v) { version(); exit 0; }
+
+# Now we can set the other variables according to the command line options
+
+$destdir = $opt_destdir if defined $opt_destdir;
+$download = $opt_download if defined $opt_download;
+$force_download = $opt_force_download if defined $opt_force_download;
+$report = $opt_report if defined $opt_report;
+$repack = $opt_repack if defined $opt_repack;
+$passive = $opt_passive if defined $opt_passive;
+$timeout = $opt_timeout if defined $opt_timeout;
+$timeout = 20 unless defined $timeout and $timeout > 0;
+$symlink = $opt_symlink if defined $opt_symlink;
+$verbose = $opt_verbose if defined $opt_verbose;
+$dehs = $opt_dehs if defined $opt_dehs;
+$user_agent_string = $opt_user_agent if defined $opt_user_agent;
+$download_version = $opt_download_version if defined $opt_download_version;
+if ($dehs) {
+    $SIG{'__WARN__'} = \&dehs_warn;
+    $SIG{'__DIE__'} = \&dehs_die;
+}
+
+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";
+    }
+}
+
+$check_dirname_regex = $opt_regex if defined $opt_regex;
+
+if (defined $opt_package) {
+    die "$progname: --package requires the use of --watchfile\nas well; run $progname --help for more details\n"
+       unless defined $opt_watchfile;
+    $download = -$download unless defined $opt_download;
+}
+
+die "$progname: Can't use --verbose if you're using --dehs!\n"
+    if $verbose and $dehs;
+
+die "$progname: Can't use --report-status if you're using --verbose!\n"
+    if $verbose and $report;
+
+die "$progname: Can't use --report-status if you're using --download!\n"
+    if $download and $report;
+
+warn "$progname: You're going to get strange (non-XML) output using --debug and --dehs together!\n"
+    if $debug and $dehs;
+
+# We'd better be verbose if we're debugging
+$verbose |= $debug;
+
+# Net::FTP understands this
+if ($passive ne 'default') {
+    $ENV{'FTP_PASSIVE'} = $passive;
+}
+elsif (exists $ENV{'FTP_PASSIVE'}) {
+    $passive = $ENV{'FTP_PASSIVE'};
+}
+else { $passive = undef; }
+# Now we can say
+#   if (defined $passive) { $ENV{'FTP_PASSIVE'}=$passive; }
+#   else { delete $ENV{'FTP_PASSIVE'}; }
+# to restore $ENV{'FTP_PASSIVE'} to what it was at this point
+
+# dummy subclass used to store all the redirections for later use
+package LWP::UserAgent::UscanCatchRedirections;
+
+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;
+}
+
+package main;
+
+my $user_agent = LWP::UserAgent::UscanCatchRedirections->new(env_proxy => 1);
+$user_agent->timeout($timeout);
+$user_agent->agent($user_agent_string);
+
+if (defined $opt_watchfile) {
+    die "Can't have directory arguments if using --watchfile" if @ARGV;
+
+    # no directory traversing then, and things are very simple
+    if (defined $opt_package) {
+       # no need to even look for a changelog!
+       process_watchfile(undef, $opt_package, $opt_uversion, $opt_watchfile);
+    } else {
+       # Check for debian/changelog file
+       until (-r 'debian/changelog') {
+           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";
+           }
+       }
+
+       # Figure out package info we need
+       my $changelog = `dpkg-parsechangelog`;
+       unless ($? == 0) {
+           die "$progname: Problems running dpkg-parsechangelog\n";
+       }
+
+       my ($package, $debversion, $uversion);
+       $changelog =~ /^Source: (.*?)$/m and $package=$1;
+       $changelog =~ /^Version: (.*?)$/m and $debversion=$1;
+       if (! defined $package || ! defined $debversion) {
+           die "$progname: Problems determining package name and/or version from\n  debian/changelog\n";
+       }
+       
+       # Check the directory is properly named for safety
+       my $good_dirname = 1;
+       if ($check_dirname_level ==  2 or
+           ($check_dirname_level == 1 and cwd() ne $opwd)) {
+           my $re = $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$%);
+           }
+       }
+       if (! $good_dirname) {
+           die "$progname: not processing watchfile because this directory does not match the package name\n" .
+               "   or the settings of the--check-dirname-level and --check-dirname-regex options if any.\n";
+       }
+
+       # Get current upstream version number
+       if (defined $opt_uversion) {
+           $uversion = $opt_uversion;
+       } else {
+           $uversion = $debversion;
+           $uversion =~ s/-[^-]+$//;  # revision
+           $uversion =~ s/^\d+://;    # epoch
+       }
+
+       process_watchfile(cwd(), $package, $uversion, $opt_watchfile);
+    }
+
+    # Are there any warnings to give if we're using dehs?
+    $dehs_end_output=1;
+    dehs_output if $dehs;
+    exit ($found ? 0 : 1);
+}
+
+# Otherwise we're scanning for watchfiles
+push @ARGV, '.' if ! @ARGV;
+print "-- Scanning for watchfiles in @ARGV\n" if $verbose;
+
+# 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 debian -print)
+    or die "$progname: couldn't exec find: $!\n";
+
+while (<FIND>) {
+    chomp;
+    push @dirs, $_;
+}
+close FIND;
+
+die "$progname: No debian directories found\n" unless @dirs;
+
+my @debdirs = ();
+
+my $origdir = cwd;
+for my $dir (@dirs) {
+    unless (chdir $origdir) {
+       warn "$progname warning: Couldn't chdir back to $origdir, skipping: $!\n";
+       next;
+    }
+    $dir =~ s%/debian$%%;
+    unless (chdir $dir) {
+       warn "$progname warning: Couldn't chdir $dir, skipping: $!\n";
+       next;
+    }
+
+    # Check for debian/watch file
+    if (-r 'debian/watch' and -r 'debian/changelog') {
+       # Figure out package info we need
+       my $changelog = `dpkg-parsechangelog`;
+       unless ($? == 0) {
+           warn "$progname warning: Problems running dpkg-parsechangelog in $dir, skipping\n";
+           next;
+       }
+
+       my ($package, $debversion, $uversion);
+       $changelog =~ /^Source: (.*?)$/m and $package=$1;
+       $changelog =~ /^Version: (.*?)$/m and $debversion=$1;
+       if (! defined $package || ! defined $debversion) {
+           warn "$progname warning: Problems determining package name and/or version from\n  $dir/debian/changelog, skipping\n";
+           next;
+       }
+
+       # Check the directory is properly named for safety
+       my $good_dirname = 1;
+       if ($check_dirname_level ==  2 or
+           ($check_dirname_level == 1 and cwd() ne $opwd)) {
+           my $re = $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$%);
+           }
+       }
+       if ($good_dirname) {
+           print "-- Found watchfile in $dir/debian\n" if $verbose;
+       } else {
+           print "-- Skip watchfile in $dir/debian since it does not match the package name\n" .
+               "   (or the settings of the --check-dirname-level and --check-dirname-regex options if any).\n"
+               if $verbose;
+           next;
+       }
+
+       # Get upstream version number
+       $uversion = $debversion;
+       $uversion =~ s/-[^-]+$//;  # revision
+       $uversion =~ s/^\d+://;    # epoch
+
+       push @debdirs, [$debversion, $dir, $package, $uversion];
+    }
+    elsif (-r 'debian/watch') {
+       warn "$progname warning: Found watchfile in $dir,\n  but couldn't find/read changelog; skipping\n";
+       next;
+    }
+    elsif (-f 'debian/watch') {
+       warn "$progname warning: Found watchfile in $dir,\n  but it is not readable; skipping\n";
+       next;
+    }
+}
+
+warn "$progname: no watch file found\n" if (@debdirs == 0 and $report);
+
+# Was there a --uversion option?
+if (defined $opt_uversion) {
+    if (@debdirs == 1) {
+       $debdirs[0][3] = $opt_uversion;
+    } else {
+       warn "$progname warning: ignoring --uversion as more than one debian/watch file found\n";
+    }
+}
+
+# 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 watchfiles in order.  If a directory d has subdirectories
+# d/sd1/debian and d/sd2/debian, which each contain watchfiles corresponding
+# to the same package, then we only process the watchfile in the package with
+# the latest version number.
+my %donepkgs;
+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}) {
+       warn "$progname warning: Skipping $dir/debian/watch\n  as this package has already been scanned successfully\n";
+       next;
+    }
+
+    unless (chdir $origdir) {
+       warn "$progname warning: Couldn't chdir back to $origdir, skipping: $!\n";
+       next;
+    }
+    unless (chdir $dir) {
+       warn "$progname warning: Couldn't chdir $dir, skipping: $!\n";
+       next;
+    }
+
+    if (process_watchfile($dir, $package, $version, "debian/watch")
+       == 0) {
+       $donepkgs{$parentdir}{$package} = 1;
+    }
+    # Are there any warnings to give if we're using dehs?
+    dehs_output if $dehs;
+}
+
+print "-- Scan finished\n" if $verbose;
+
+$dehs_end_output=1;
+dehs_output if $dehs;
+exit ($found ? 0 : 1);
+
+
+# This is the heart of the code: Process a single watch item
+#
+# 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]]
+# or
+#   http://site.name/dir/path/base pattern-(.*)\.tar\.gz [version [action]]
+#
+# Lines can be prefixed with opts=<opts>.
+#
+# 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.
+#
+# watch_version=3:
+#
+# Correct handling of regex special characters in the path part:
+# ftp://ftp.worldforge.org/pub/worldforge/libs/Atlas-C++/transitional/Atlas-C\+\+-(.*)\.tar\.gz
+# 
+# Directory pattern matching:
+# ftp://ftp.nessus.org/pub/nessus/nessus-([\d\.]+)/src/nessus-core-([\d\.]+)\.tar\.gz
+# 
+# The pattern in each part may contain several (...) groups and
+# the version number is determined by joining all groups together
+# using "." as separator.  For example:
+#   ftp://site/dir/path/pattern-(\d+)_(\d+)_(\d+)\.tar\.gz
+# 
+# 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.)
+# opts=uversionmangle=s/^/0.0./ \
+#   ftp://ftp.ibiblio.org/pub/Linux/ALPHA/wine/development/Wine-(.*)\.tar\.gz
+# 
+# Similarly, the upstream part of the Debian version number can be
+# mangled:
+# opts=dversionmangle=s/\.dfsg\.\d+$// \
+#   http://some.site.org/some/path/foobar-(.*)\.tar\.gz
+# 
+# The versionmangle=... option is a shorthand for saying uversionmangle=...
+# and dversionmangle=... and applies to both upstream and Debian versions.
+# 
+# The option filenamemangle can be used to mangle the name under which
+# the downloaded file will be saved:
+#   href="http://foo.bar.org/download/?path=&amp;download=foo-0.1.1.tar.gz"
+# could be handled as:
+# opts=filenamemangle=s/.*=(.*)/$1/ \
+#     http://foo.bar.org/download/\?path=&amp;download=foo-(.*)\.tar\.gz
+# and
+#   href="http://foo.bar.org/download/?path=&amp;download_version=0.1.1"
+# as:
+# opts=filenamemangle=s/.*=(.*)/foo-$1\.tar\.gz/ \
+#    http://foo.bar.org/download/\?path=&amp;download_version=(.*)
+# 
+# The option downloadurlmangle can be used to mangle the URL of the file
+# to download.  This can only be used with http:// URLs.  This may be
+# necessary if the link given on the webpage needs to be transformed in
+# some way into one which will work automatically, for example:
+# opts=downloadurlmangle=s/prdownload/download/ \
+#   http://developer.berlios.de/project/showfiles.php?group_id=2051 \
+#   http://prdownload.berlios.de/softdevice/vdr-softdevice-(.*).tgz
+
+
+sub process_watchline ($$$$$$)
+{
+    my ($line, $watch_version, $pkg_dir, $pkg, $pkg_version, $watchfile) = @_;
+
+    my $origline = $line;
+    my ($base, $site, $dir, $filepattern, $pattern, $lastversion, $action);
+    my $basedir;
+    my (@patterns, @sites, @redirections, @basedirs);
+    my %options = ();
+
+    my ($request, $response);
+    my ($newfile, $newversion);
+    my $style='new';
+    my $urlbase;
+    my $headers = HTTP::Headers->new;
+
+    # Comma-separated list of features that sites being queried might
+    # want to be aware of
+    $headers->header('X-uscan-features' => 'enhanced-matching');
+    %dehs_tags = ('package' => $pkg);
+
+    if ($watch_version == 1) {
+       ($site, $dir, $pattern, $lastversion, $action) = split ' ', $line, 5;
+
+       if (! defined $lastversion or $site =~ /\(.*\)/ or $dir =~ /\(.*\)/) {
+           warn "$progname warning: there appears to be a version 2 format line in\n  the version 1 watchfile $watchfile;\n  Have you forgotten a 'version=2' line at the start, perhaps?\n  Skipping the line: $line\n";
+           return 1;
+       }
+       if ($site !~ m%\w+://%) {
+           $site = "ftp://$site";
+           if ($pattern !~ /\(.*\)/) {
+               # watch_version=1 and old style watchfile;
+               # pattern uses ? and * shell wildcards; everything from the
+               # first to last of these metachars is the pattern to match on
+               $pattern =~ s/(\?|\*)/($1/;
+               $pattern =~ s/(\?|\*)([^\?\*]*)$/$1)$2/;
+               $pattern =~ s/\./\\./g;
+               $pattern =~ s/\?/./g;
+               $pattern =~ s/\*/.*/g;
+               $style='old';
+               warn "$progname warning: Using very old style of filename pattern in $watchfile\n  (this might lead to incorrect results): $3\n";
+           }
+       }
+
+       # Merge site and dir
+       $base = "$site/$dir/";
+       $base =~ s%(?<!:)//%/%g;
+       $base =~ m%^(\w+://[^/]+)%;
+       $site = $1;
+    } else {
+       # version 2/3 watchfile
+       if ($line =~ s/^opt(?:ion)?s=//) {
+           my $opts;
+           if ($line =~ s/^"(.*?)"\s+//) {
+               $opts=$1;
+           } elsif ($line =~ s/^(\S+)\s+//) {
+               $opts=$1;
+           } else {
+               warn "$progname warning: malformed opts=... in watchfile, skipping line:\n$origline\n";
+               return 1;
+           }
+
+           my @opts = split /,/, $opts;
+           foreach my $opt (@opts) {
+               if ($opt eq 'pasv' or $opt eq 'passive') {
+                   $options{'pasv'}=1;
+               }
+               elsif ($opt eq 'active' or $opt eq 'nopasv'
+                      or $opt eq 'nopassive') {
+                   $options{'pasv'}=0;
+               }
+               elsif ($opt =~ /^uversionmangle\s*=\s*(.+)/) {
+                   @{$options{'uversionmangle'}} = split /;/, $1;
+               }
+               elsif ($opt =~ /^dversionmangle\s*=\s*(.+)/) {
+                   @{$options{'dversionmangle'}} = split /;/, $1;
+               }
+               elsif ($opt =~ /^versionmangle\s*=\s*(.+)/) {
+                   @{$options{'uversionmangle'}} = split /;/, $1;
+                   @{$options{'dversionmangle'}} = split /;/, $1;
+               }
+               elsif ($opt =~ /^filenamemangle\s*=\s*(.+)/) {
+                   @{$options{'filenamemangle'}} = split /;/, $1;
+               }
+               elsif ($opt =~ /^downloadurlmangle\s*=\s*(.+)/) {
+                   @{$options{'downloadurlmangle'}} = split /;/, $1;
+               }
+               else {
+                   warn "$progname warning: unrecognised option $opt\n";
+               }
+           }
+       }
+
+       ($base, $filepattern, $lastversion, $action) = split ' ', $line, 4;
+
+       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 ' ', $line, 3;
+       }
+
+       if ((!$lastversion or $lastversion eq 'debian') and not defined $pkg_version) {
+           warn "$progname warning: Unable to determine current version\n  in $watchfile, skipping:\n  $line\n";
+           return 1;
+       }
+
+       # Check all's OK
+       if ($filepattern !~ /\(.*\)/) {
+           warn "$progname warning: Filename pattern missing version delimiters ()\n  in $watchfile, skipping:\n  $line\n";
+           return 1;
+       }
+
+       # Check validity of options
+       if ($base =~ /^ftp:/ and exists $options{'downloadurlmangle'}) {
+           warn "$progname warning: downloadurlmangle option invalid for ftp sites,\n  ignoring in $watchfile:\n  $line\n";
+       }
+
+       # Handle sf.net addresses specially
+       if ($base =~ m%^http://sf\.net/%) {
+           $base =~ s%^http://sf\.net/%http://qa.debian.org/watch/sf.php/%;
+           $filepattern .= '(?:\?.*)?';
+       }
+       if ($base =~ m%^(\w+://[^/]+)%) {
+           $site = $1;
+       } else {
+           warn "$progname warning: Can't determine protocol and site in\n  $watchfile, skipping:\n  $line\n";
+           return 1;
+       }
+
+       # Find the path with the greatest version number matching the regex
+       $base = recursive_regex_dir($base, \%options, $watchfile);
+       if ($base eq '') { return 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+://[^/]+/%/%;
+       $pattern = "(?:(?:$site)?" . quotemeta($basedir) . ")?$filepattern";
+    }
+
+    if (! $lastversion or $lastversion eq 'debian') {
+       if (defined $pkg_version) {
+           $lastversion=$pkg_version;
+       } else {
+           warn "$progname warning: Unable to determine current version\n  in $watchfile, skipping:\n  $line\n";
+           return 1;
+       }
+    }
+    # And mangle it if requested
+    my $mangled_lastversion;
+    $mangled_lastversion = $lastversion;
+    foreach my $pat (@{$options{'dversionmangle'}}) {
+       if (! safe_replace(\$mangled_lastversion, $pat)) {
+           warn "$progname: In $watchfile, potentially"
+             . " unsafe or malformed dversionmangle"
+             . " pattern:\n  '$pat'"
+             . " found. Skipping watchline\n"
+             . "  $line\n";
+           return 1;
+       }
+    }
+    if($opt_download_current_version) {
+       $download_version = $mangled_lastversion;
+       $force_download = 1;
+    }
+
+    # Check all's OK
+    if ($pattern !~ /\(.*\)/) {
+       warn "$progname warning: Filename pattern missing version delimiters ()\n  in $watchfile, skipping:\n  $line\n";
+       return 1;
+    }
+
+    push @patterns, $pattern;
+    push @sites, $site;
+    push @basedirs, $basedir;
+
+    # What is the most recent file, based on the filenames?
+    # We first have to find the candidates, then we sort them using
+    # Devscripts::Versort::versort
+    if ($site =~ m%^http(s)?://%) {
+       if (defined($1) and !$haveSSL) {
+           die "$progname: you must have the libcrypt-ssleay-perl package installed\nto use https URLs\n";
+       }
+       print STDERR "$progname debug: requesting URL $base\n" if $debug;
+       $request = HTTP::Request->new('GET', $base, $headers);
+       $response = $user_agent->request($request);
+       if (! $response->is_success) {
+           warn "$progname warning: In watchfile $watchfile, reading webpage\n  $base failed: " . $response->status_line . "\n";
+           return 1;
+       }
+
+       @redirections = @{$user_agent->get_redirections};
+       
+       print STDERR "$progname debug: redirections: @redirections\n"
+           if $debug;
+
+       foreach my $_redir (@redirections) {
+           my $base_dir = $_redir;
+           
+           $base_dir =~ s%^\w+://[^/]+/%/%;
+           if ($_redir =~ m%^(\w+://[^/]+)%) {
+               my $base_site = $1;
+
+               push @patterns, "(?:(?:$base_site)?" . quotemeta($base_dir) . ")?$filepattern";
+               push @sites, $base_site;
+               push @basedirs, $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, "(?:(?:$base_site)?" . quotemeta($base_dir) . ")?$filepattern";
+                   push @sites, $base_site;
+                   push @basedirs, $base_dir;
+               }
+           }
+       }
+
+       my $content = $response->content;
+       print STDERR "$progname debug: received content:\n$content\[End of received content]\n"
+           if $debug;
+       # 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;
+       # Is there a base URL given?
+       if ($content =~ /<\s*base\s+[^>]*href\s*=\s*([\"\'])(.*?)\1/i) {
+           # Ensure it ends with /
+           $urlbase = "$2/";
+           $urlbase =~ s%//$%/%;
+       } else {
+           # May have to strip a base filename
+           ($urlbase = $base) =~ s%/[^/]*$%/%;
+       }
+
+       print STDERR "$progname debug: matching pattern(s) @patterns\n" if $debug;
+       my @hrefs;
+       while ($content =~ m/<\s*a\s+[^>]*href\s*=\s*([\"\'])(.*?)\1/sgi) {
+           my $href = $2;
+           $href =~ s/\n//g;
+           foreach my $_pattern (@patterns) {
+               if ($href =~ m&^$_pattern$&) {
+                   if ($watch_version == 2) {
+                       # watch_version 2 only recognised one group; the code
+                       # below will break version 2 watchfiles with a construction
+                       # such as file-([\d\.]+(-\d+)?) (bug #327258)
+                       push @hrefs, [$1, $href];
+                   } else {
+                       # need the map { ... } here to handle cases of (...)?
+                       # which may match but then return undef values
+                       my $mangled_version =
+                           join(".", map { $_ if defined($_) }
+                               $href =~ m&^$_pattern$&);
+                       foreach my $pat (@{$options{'uversionmangle'}}) {
+                           if (! safe_replace(\$mangled_version, $pat)) {
+                               warn "$progname: In $watchfile, potentially"
+                                . " unsafe or malformed uversionmangle"
+                                 . " pattern:\n  '$pat'"
+                                 . " found. Skipping watchline\n"
+                                 . "  $line\n";
+                               return 1;
+                           }
+                       }
+                       push @hrefs, [$mangled_version, $href];
+                   }
+               }
+           }
+       }
+       if (@hrefs) {
+           if ($verbose) {
+               print "-- Found the following matching hrefs:\n";
+               foreach my $href (@hrefs) { print "     $$href[1]\n"; }
+           }
+           if (defined $download_version) {
+               my @vhrefs = grep { $$_[0] eq $download_version } @hrefs;
+               if (@vhrefs) {
+                   ($newversion, $newfile) = @{$vhrefs[0]};
+               } else {
+                   warn "$progname warning: In $watchfile no matching hrefs for version $download_version"
+                       . " in watch line\n  $line\n";
+                   return 1;
+               }
+           } else {
+               @hrefs = Devscripts::Versort::versort(@hrefs);
+               ($newversion, $newfile) = @{$hrefs[0]};
+           }
+       } else {
+           warn "$progname warning: In $watchfile,\n  no matching hrefs for watch line\n  $line\n";
+           return 1;
+       }
+    }
+    else {
+       # Better be an FTP site
+       if ($site !~ m%^ftp://%) {
+           warn "$progname warning: Unknown protocol in $watchfile, skipping:\n  $site\n";
+           return 1;
+       }
+
+       if (exists $options{'pasv'}) {
+           $ENV{'FTP_PASSIVE'}=$options{'pasv'};
+       }
+       print STDERR "$progname debug: requesting URL $base\n" if $debug;
+       $request = HTTP::Request->new('GET', $base);
+       $response = $user_agent->request($request);
+       if (exists $options{'pasv'}) {
+           if (defined $passive) { $ENV{'FTP_PASSIVE'}=$passive; }
+           else { delete $ENV{'FTP_PASSIVE'}; }
+       }
+       if (! $response->is_success) {
+           warn "$progname warning: In watchfile $watchfile, reading FTP directory\n  $base failed: " . $response->status_line . "\n";
+           return 1;
+       }
+
+       my $content = $response->content;
+       print STDERR "$progname debug: received content:\n$content\[End of received content]\n"
+           if $debug;
+
+       # 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
+       print STDERR "$progname debug: matching pattern $pattern\n" if $debug;
+       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) {
+           while ($content =~ 
+               m/(?:<\s*a\s+[^>]*href\s*=\s*\")((?-i)$pattern)\"/gi) {
+               my $file = $1;
+               my $mangled_version = join(".", $file =~ m/^$pattern$/);
+               foreach my $pat (@{$options{'uversionmangle'}}) {
+                   if (! safe_replace(\$mangled_version, $pat)) {
+                       warn "$progname: In $watchfile, potentially"
+                         . " unsafe or malformed uversionmangle"
+                         . " pattern:\n  '$pat'"
+                         . " found. Skipping watchline\n"
+                         . "  $line\n";
+                       return 1;
+                   }
+               }
+               push @files, [$mangled_version, $file];
+           }
+       } else {
+           # they all look like:
+           # info info ... info filename [ -> linkname]
+           while ($content =~ m/\s($filepattern)(\s+->\s+\S+)?$/mg) {
+               my $file = $1;
+               my $mangled_version = join(".", $file =~ m/^$filepattern$/);
+               foreach my $pat (@{$options{'uversionmangle'}}) {
+                   if (! safe_replace(\$mangled_version, $pat)) {
+                       warn "$progname: In $watchfile, potentially"
+                         . " unsafe or malformed uversionmangle"
+                         . " pattern:\n  '$pat'"
+                         . " found. Skipping watchline\n"
+                         . "  $line\n";
+                       return 1;
+                   }
+               }
+               push @files, [$mangled_version, $file];
+           }
+       }           
+
+       if (@files) {
+           if ($verbose) {
+               print "-- Found the following matching files:\n";
+               foreach my $file (@files) { print "     $$file[1]\n"; }
+           }
+           if (defined $download_version) {
+               my @vfiles = grep { $$_[0] eq $download_version } @files;
+               if (@vfiles) {
+                   ($newversion, $newfile) = @{$vfiles[0]};
+               } else {
+                   warn "$progname warning: In $watchfile no matching files for version $download_version"
+                       . " in watch line\n  $line\n";
+                   return 1;
+               }
+           } else {
+               @files = Devscripts::Versort::versort(@files);
+               ($newversion, $newfile) = @{$files[0]};
+           }
+       } else {
+           warn "$progname warning: In $watchfile no matching files for watch line\n  $line\n";
+           return 1;
+       }
+    }
+
+    # 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 ($style eq 'old') {
+        # Old-style heuristics
+       if ($newversion =~ /^\D*(\d+\.(?:\d+\.)*\d+)\D*$/) {
+           $newversion = $1;
+       } else {
+           warn <<"EOF";
+$progname warning: In $watchfile, couldn\'t determine a
+  pure numeric version number from the file name for watch line
+  $line
+  and file name $newfile
+  Please use a new style watchfile instead!
+EOF
+           return 1;
+       }
+    }
+
+    my $newfile_base=basename($newfile);
+    if (exists $options{'filenamemangle'}) {
+        $newfile_base=$newfile;
+    }
+    foreach my $pat (@{$options{'filenamemangle'}}) {
+       if (! safe_replace(\$newfile_base, $pat)) {
+           warn "$progname: In $watchfile, potentially"
+             . " unsafe or malformed filenamemangle"
+             . " pattern:\n  '$pat'"
+             . " found. Skipping watchline\n"
+             . "  $line\n";
+               return 1;
+       }
+    }
+    # Remove HTTP header trash
+    if ($site =~ m%^https?://%) {
+        $newfile_base =~ s/\?.*$//;
+       # just in case this leaves us with nothing
+       if ($newfile_base eq '') {
+           $newfile_base = "$pkg-$newversion.download";
+       }
+    }
+    
+    # So what have we got to report now?
+    my $upstream_url;
+    # Upstream URL?  Copying code from below - ugh.
+    if ($site =~ m%^https?://%) {
+       # absolute URL?
+       if ($newfile =~ m%^\w+://%) {
+           $upstream_url = $newfile;
+       }
+       # absolute filename?
+       elsif ($newfile =~ m%^/%) {
+           # Were there any redirections? If so try using those first
+           if ($#patterns > 0) {
+               # replace $site here with the one we were redirected to
+               foreach my $index (0 .. $#patterns) {
+                   if ("$sites[$index]$newfile" =~ m&^$patterns[$index]$&) {
+                       $upstream_url = "$sites[$index]$newfile";
+                       last;
+                   }
+               }
+               if (!defined($upstream_url)) {
+                   if ($debug) {
+                       warn "$progname warning: Unable to determine upstream url from redirections,\n" .
+                           "defaulting to using site specified in watchfile\n";
+                   }
+                   $upstream_url = "$sites[0]$newfile";
+               }
+           } else {
+               $upstream_url = "$sites[0]$newfile";
+           }
+       }
+       # relative filename, we hope
+       else {
+           # Were there any redirections? If so try using those first
+           if ($#patterns > 0) {
+               # replace $site here with the one we were redirected to
+               foreach my $index (0 .. $#patterns) {
+                   # skip unless the basedir looks like a directory
+                   next unless $basedirs[$index] =~ m%/$%;
+                   my $nf = "$basedirs[$index]$newfile";
+                   if ("$sites[$index]$nf" =~ m&^$patterns[$index]$&) {
+                       $upstream_url = "$sites[$index]$nf";
+                       last;
+                   }
+               }
+               if (!defined($upstream_url)) {
+                   if ($debug) {
+                       warn "$progname warning: Unable to determine upstream url from redirections,\n" .
+                           "defaulting to using site specified in watchfile\n";
+                   }
+                   $upstream_url = "$urlbase$newfile";
+               }
+           } else {
+               $upstream_url = "$urlbase$newfile";
+           }
+       }
+
+       # mangle if necessary
+       $upstream_url =~ s/&amp;/&/g;
+       if (exists $options{'downloadurlmangle'}) {
+           foreach my $pat (@{$options{'downloadurlmangle'}}) {
+               if (! safe_replace(\$upstream_url, $pat)) {
+                   warn "$progname: In $watchfile, potentially"
+                     . " unsafe or malformed downloadurlmangle"
+                     . " pattern:\n  '$pat'"
+                     . " found. Skipping watchline\n"
+                     . "  $line\n";
+                   return 1;
+               }
+           }
+       }
+    }
+    else {
+       # FTP site
+       $upstream_url = "$base$newfile";
+    }
+
+    $dehs_tags{'debian-uversion'} = $lastversion;
+    $dehs_tags{'debian-mangled-uversion'} = $mangled_lastversion;
+    $dehs_tags{'upstream-version'} = $newversion;
+    $dehs_tags{'upstream-url'} = $upstream_url;
+
+    # Can't just use $lastversion eq $newversion, as then 0.01 and 0.1
+    # compare different, whereas they are treated as equal by dpkg
+    if (system("dpkg", "--compare-versions", "$mangled_lastversion", "eq", "$newversion") == 0) {
+       if ($verbose or ($download == 0 and $report and ! $dehs)) {
+           print $pkg_report_header;
+           $pkg_report_header = '';
+           print "Newest version on remote site is $newversion, local version is $lastversion\n" .
+               ($mangled_lastversion eq $lastversion ? "" : " (mangled local version number $mangled_lastversion)\n");
+           print " => Package is up to date\n";
+       }
+       $dehs_tags{'status'} = "up to date";
+       if (! $force_download) {
+           return 0;
+       } else {
+           $download = 1;
+       }
+    }
+
+    # In all other cases, we'll want to report information even with --report
+    if ($verbose or ($download == 0 and ! $dehs)) {
+       print $pkg_report_header;
+       $pkg_report_header = '';
+       print "Newest version on remote site is $newversion, local version is $lastversion\n" .
+           ($mangled_lastversion eq $lastversion ? "" : " (mangled local version number $mangled_lastversion)\n");
+    }
+
+    # We use dpkg's rules to determine whether our current version
+    # is newer or older than the remote version.
+    if (!defined $download_version) {
+       if (system("dpkg", "--compare-versions", "$mangled_lastversion", "gt", "$newversion") == 0) {
+           if ($verbose) {
+               print " => remote site does not even have current version\n";
+           } elsif ($dehs) {
+               $dehs_tags{'status'} = "Debian version newer than remote site";
+           } else {
+               print "$pkg: remote site does not even have current version\n";
+           }
+           return 0;
+       } else {
+           # There's a newer upstream version available, which may already
+           # be on our system or may not be
+           $found++;
+       }
+    } else {
+       # Flag that we found a newer upstream version, so that the exit status
+       # is set correctly
+       $found++;
+    }
+
+    if (defined $pkg_dir) {
+       if (! -d "$destdir") {
+           print "Package directory '$destdir to store downloaded file is not existing\n";
+           return 1;
+       }
+       if (-f "$destdir/$newfile_base") {
+           print " => $newfile_base already in package directory\n"
+               if $verbose or ($download == 0 and ! $dehs);
+           return 0;
+       }
+       if (-f "$destdir/${pkg}_${newversion}.orig.tar.gz") {
+           print " => ${pkg}_${newversion}.orig.tar.gz already in package directory '$destdir'\n"
+               if $verbose or ($download == 0 and ! $dehs);
+           return 0;
+       }
+       elsif (-f "$destdir/${pkg}_${newversion}.orig.tar.bz2") {
+           print " => ${pkg}_${newversion}.orig.tar.bz2 already in package directory '$destdir'\n"
+               if $verbose or ($download == 0 and ! $dehs);
+           return 0;
+       }
+    }
+
+    if ($force_download and $verbose) {
+       print " => Forcing download as requested\n";
+    } elsif ($verbose) {
+       print " => Newer version available from\n";
+       print "    $upstream_url\n";
+    } elsif ($dehs) {
+       $dehs_tags{'status'} = "Newer version available";
+    } else {
+       my $msg_header = "$pkg: ";
+       $msg_header .= $force_download ? "Version" : "Newer version";
+       print "$msg_header ($newversion) available on remote site:\n  $upstream_url\n  (local version is $lastversion" .
+           ($mangled_lastversion eq $lastversion ? "" : ", mangled local version number $mangled_lastversion") .
+           ")\n";
+    }
+
+    if ($download < 0) {
+       my $msg = "Not downloading as --package was used.  Use --download to force downloading.";
+       if ($dehs) {
+           dehs_msg($msg);
+       } else {
+           print "$msg\n";
+       }
+       return 0;
+    }
+    return 0 unless $download;
+
+    print "-- Downloading updated package $newfile_base\n" if $verbose;
+    if (! -d "$destdir") {
+        print "Package directory '$destdir to store downloaded file is not existing\n";
+        return 1;
+    }
+    # Download newer package
+    if ($upstream_url =~ m%^http(s)?://%) {
+       if (defined($1) and !$haveSSL) {
+           die "$progname: you must have the libcrypt-ssleay-perl package installed\nto use https URLs\n";
+       }
+       # substitute HTML entities
+       # Is anything else than "&amp;" required?  I doubt it.
+       print STDERR "$progname debug: requesting URL $upstream_url\n" if $debug;
+       $request = HTTP::Request->new('GET', $upstream_url);
+       $response = $user_agent->request($request, "$destdir/$newfile_base");
+       if (! $response->is_success) {
+           if (defined $pkg_dir) {
+               warn "$progname warning: In directory $pkg_dir, downloading\n  $upstream_url failed: " . $response->status_line . "\n";
+           } else {
+               warn "$progname warning: Downloading\n $upstream_url failed:\n" . $response->status_line . "\n";
+           }
+           return 1;
+       }
+    }
+    else {
+       # FTP site
+       if (exists $options{'pasv'}) {
+           $ENV{'FTP_PASSIVE'}=$options{'pasv'};
+       }
+       print STDERR "$progname debug: requesting URL $upstream_url\n" if $debug;
+       $request = HTTP::Request->new('GET', "$upstream_url");
+       $response = $user_agent->request($request, "$destdir/$newfile_base");
+       if (exists $options{'pasv'}) {
+           if (defined $passive) { $ENV{'FTP_PASSIVE'}=$passive; }
+           else { delete $ENV{'FTP_PASSIVE'}; }
+       }
+       if (! $response->is_success) {
+           if (defined $pkg_dir) {
+               warn "$progname warning: In directory $pkg_dir, downloading\n  $upstream_url failed: " . $response->status_line . "\n";
+           } else {
+               warn "$progname warning: Downloading\n $upstream_url failed:\n" . $response->status_line . "\n";
+           }
+           return 1;
+       }
+    }
+
+    if ($repack and $newfile_base =~ /^(.*)\.(tar\.bz2|tbz2?)$/) {
+       print "-- Repacking from bzip2 to gzip\n" if $verbose;
+       my $newfile_base_gz = "$1.tar.gz";
+       system("bunzip2 -c $destdir/$newfile_base | gzip -n -9 > $destdir/$newfile_base_gz") == 0
+         or die "repacking from bzip2 to gzip failed\n";
+       unlink "$destdir/$newfile_base";
+       $newfile_base = $newfile_base_gz;
+    }
+
+    if ($repack and $newfile_base =~ /^(.*)\.(tar\.lzma|tlz(?:ma?)?)$/) {
+       print "-- Repacking from lzma to gzip\n" if $verbose;
+       my $newfile_base_gz = "$1.tar.gz";
+       system("lzma -cd $destdir/$newfile_base | gzip -n -9 > $destdir/$newfile_base_gz") == 0
+         or die "repacking from lzma to gzip failed\n";
+       unlink "$destdir/$newfile_base";
+       $newfile_base = $newfile_base_gz;
+    }
+
+    if ($repack and $newfile_base =~ /^(.*)\.(tar\.xz|txz)$/) {
+       print "-- Repacking from xz to gzip\n" if $verbose;
+       my $newfile_base_gz = "$1.tar.gz";
+       system("xz -cd $destdir/$newfile_base | gzip -n -9 > $destdir/$newfile_base_gz") == 0
+         or die "repacking from xz to gzip failed\n";
+       unlink "$destdir/$newfile_base";
+       $newfile_base = $newfile_base_gz;
+    }
+
+    if ($repack and $newfile_base =~ /^(.*)\.zip$/) {
+       print "-- Repacking from zip to .tar.gz\n" if $verbose;
+
+       system('command -v unzip >/dev/null 2>&1') >> 8 == 0
+         or die("unzip binary not found. You need to install the package unzip to be able to repack .zip upstream archives.\n");
+
+       my $newfile_base_gz = "$1.tar.gz";
+       my $tempdir = tempdir ( "uscanXXXX", TMPDIR => 1, CLEANUP => 1 );
+       system("unzip -q -d $tempdir $destdir/$newfile_base; GZIP=-9 tar -C $tempdir -czf $destdir/$newfile_base_gz .") == 0 
+         or die("Repacking from zip to tar.gz failed\n");
+       unlink "$destdir/$newfile_base";
+       $newfile_base = $newfile_base_gz;
+    }
+
+    if ($newfile_base =~ /\.(tar\.gz|tgz|tar\.bz2|tbz2?)$/) {
+       my $filetype = `file $destdir/$newfile_base`;
+       $filetype =~ s%^\.\./\Q$newfile_base\E: %%;
+       unless ($filetype =~ /compressed data/) {
+           warn "$progname warning: $destdir/$newfile_base does not appear to be a compressed file;\nthe file command says: $filetype\nNot processing this file any further!\n";
+           return 1;
+       }
+    }
+
+    if ($newfile_base =~ /\.(tar\.gz|tgz)$/) {
+       if ($symlink eq 'symlink') {
+           symlink $newfile_base, "$destdir/${pkg}_${newversion}.orig.tar.gz";
+       } elsif ($symlink eq 'rename') {
+           move "$destdir/$newfile_base", "$destdir/${pkg}_${newversion}.orig.tar.gz";
+       }
+    }
+    elsif ($newfile_base =~ /\.(tar\.bz2|tbz2?)$/) {
+       if ($symlink eq 'symlink') {
+           symlink $newfile_base, "$destdir/${pkg}_${newversion}.orig.tar.bz2";
+       } elsif ($symlink eq 'rename') {
+           move "$destdir/$newfile_base", "$destdir/${pkg}_${newversion}.orig.tar.bz2";
+       }
+    }
+
+    if ($verbose) {
+       print "-- Successfully downloaded updated package $newfile_base\n";
+       if ($newfile_base =~ /\.(tar\.gz|tgz)$/) {
+           if ($symlink eq 'symlink') {
+               print "    and symlinked ${pkg}_${newversion}.orig.tar.gz to it\n";
+           } elsif ($symlink eq 'rename') {
+               print "    and renamed it as ${pkg}_${newversion}.orig.tar.gz\n";
+           }
+       }
+       elsif ($newfile_base =~ /\.(tar\.bz2|tbz2?)$/) {
+           if ($symlink eq 'symlink') {
+               print "    and symlinked ${pkg}_${newversion}.orig.tar.bz2 to it\n";
+           } elsif ($symlink eq 'rename') {
+               print "    and renamed it as ${pkg}_${newversion}.orig.tar.bz2\n";
+           }
+       }
+    } elsif ($dehs) {
+       my $msg = "Successfully downloaded updated package $newfile_base";
+       if ($newfile_base =~ /\.(tar\.gz|tgz)$/) {
+           if ($symlink eq 'symlink') {
+               $msg .= " and symlinked ${pkg}_${newversion}.orig.tar.gz to it";
+           } elsif ($symlink eq 'rename') {
+               $msg .= " and renamed it as ${pkg}_${newversion}.orig.tar.gz";
+           }
+       }
+       elsif ($newfile_base =~ /\.(tar\.bz2|tbz2?)$/) {
+           if ($symlink eq 'symlink') {
+               $msg .= " and symlinked ${pkg}_${newversion}.orig.tar.bz2 to it";
+           } elsif ($symlink eq 'rename') {
+               $msg .= " and renamed it as ${pkg}_${newversion}.orig.tar.bz2";
+           }
+       }
+       dehs_msg($msg);
+    } else {
+       print "$pkg: Successfully downloaded updated package $newfile_base\n";
+       if ($newfile_base =~ /\.(tar\.gz|tgz)$/) {
+           if ($symlink eq 'symlink') {
+               print "    and symlinked ${pkg}_${newversion}.orig.tar.gz to it\n";
+           } elsif ($symlink eq 'rename') {
+               print "    and renamed it as ${pkg}_${newversion}.orig.tar.gz\n";
+           }
+       }
+       elsif ($newfile_base =~ /\.(tar\.bz2|tbz2?)$/) {
+           if ($symlink eq 'symlink') {
+               print "    and symlinked ${pkg}_${newversion}.orig.tar.bz2 to it\n";
+           } elsif ($symlink eq 'rename') {
+               print "    and renamed it as ${pkg}_${newversion}.orig.tar.bz2\n";
+           }
+       }
+    }
+
+    # Do whatever the user wishes to do
+    if ($action) {
+       my $usefile = "$destdir/$newfile_base";
+       my @cmd = shellwords($action);
+       if ($symlink =~ /^(symlink|rename)$/
+           and $newfile_base =~ /\.(tar\.gz|tgz)$/) {
+           $usefile = "$destdir/${pkg}_${newversion}.orig.tar.gz";
+       }
+       elsif ($symlink =~ /^(symlink|rename)$/
+           and $newfile_base =~ /\.(tar\.bz2|tbz2)$/) {
+           $usefile = "$destdir/${pkg}_${newversion}.orig.tar.bz2";
+       }
+
+       # Any symlink requests are already handled by uscan
+       if ($action =~ /^uupdate(\s|$)/) {
+           push @cmd, "--no-symlink";
+       }
+
+       if ($watch_version > 1) {
+           push @cmd, ("--upstream-version", "$newversion", "$usefile");
+       } else {
+           push @cmd, ("$usefile", "$newversion");
+       }
+       my $actioncmd = join(" ", @cmd);
+       print "-- Executing user specified script\n     $actioncmd\n" if $verbose;
+       if ($dehs) {
+           my $msg = "Executing user specified script: $actioncmd; output:\n";
+           $msg .= `$actioncmd 2>&1`;
+           dehs_msg($msg);
+       } else {
+           system(@cmd);
+       }
+    }
+
+    return 0;
+}
+
+
+sub recursive_regex_dir ($$$) {
+    my ($base, $optref, $watchfile)=@_;
+
+    $base =~ m%^(\w+://[^/]+)/(.*)$%;
+    my $site = $1;
+    my @dirs = split /(\/)/, $2;
+    my $dir = '/';
+
+    foreach my $dirpattern (@dirs) {
+       if ($dirpattern =~ /\(.*\)/) {
+           print STDERR "$progname debug: dir=>$dir  dirpattern=>$dirpattern\n"
+               if $debug;
+           my $newest_dir =
+               newest_dir($site, $dir, $dirpattern, $optref, $watchfile);
+           print STDERR "$progname debug: newest_dir => '$newest_dir'\n"
+               if $debug;
+           if ($newest_dir ne '') {
+               $dir .= "$newest_dir";
+           }
+           else {
+               return '';
+           }
+       } else {
+           $dir .= "$dirpattern";
+       }
+    }
+    return $site . $dir;
+}
+
+
+# very similar to code above
+sub newest_dir ($$$$$) {
+    my ($site, $dir, $pattern, $optref, $watchfile) = @_;
+    my $base = $site.$dir;
+    my ($request, $response);
+
+    if ($site =~ m%^http(s)?://%) {
+       if (defined($1) and !$haveSSL) {
+           die "$progname: you must have the libcrypt-ssleay-perl package installed\nto use https URLs\n";
+       }
+       print STDERR "$progname debug: requesting URL $base\n" if $debug;
+       $request = HTTP::Request->new('GET', $base);
+       $response = $user_agent->request($request);
+       if (! $response->is_success) {
+           warn "$progname warning: In watchfile $watchfile, reading webpage\n  $base failed: " . $response->status_line . "\n";
+           return 1;
+       }
+
+       my $content = $response->content;
+       print STDERR "$progname debug: received content:\n$content\[End of received content\]\n"
+           if $debug;
+       # 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;
+
+       my $dirpattern = "(?:(?:$site)?" . quotemeta($dir) . ")?$pattern";
+
+       print STDERR "$progname debug: matching pattern $dirpattern\n"
+           if $debug;
+       my @hrefs;
+       while ($content =~ m/<\s*a\s+[^>]*href\s*=\s*([\"\'])(.*?)\1/gi) {
+           my $href = $2;
+           if ($href =~ m&^$dirpattern/?$&) {
+               my $mangled_version = join(".", $href =~ m&^$dirpattern/?$&);
+               push @hrefs, [$mangled_version, $href];
+           }
+       }
+       if (@hrefs) {
+           @hrefs = Devscripts::Versort::versort(@hrefs);
+           if ($debug) {
+               print "-- Found the following matching hrefs (newest first):\n";
+               foreach my $href (@hrefs) { print "     $$href[1]\n"; }
+           }
+           my $newdir = $hrefs[0][1];
+           # just give the final directory component
+           $newdir =~ s%/$%%;
+           $newdir =~ s%^.*/%%;
+           return $newdir;
+       } else {
+           warn "$progname warning: In $watchfile,\n  no matching hrefs for pattern\n  $site$dir$pattern";
+           return 1;
+       }
+    }
+    else {
+       # Better be an FTP site
+       if ($site !~ m%^ftp://%) {
+           return 1;
+       }
+
+       if (exists $$optref{'pasv'}) {
+           $ENV{'FTP_PASSIVE'}=$$optref{'pasv'};
+       }
+       print STDERR "$progname debug: requesting URL $base\n" if $debug;
+       $request = HTTP::Request->new('GET', $base);
+       $response = $user_agent->request($request);
+       if (exists $$optref{'pasv'}) {
+           if (defined $passive) { $ENV{'FTP_PASSIVE'}=$passive; }
+           else { delete $ENV{'FTP_PASSIVE'}; }
+       }
+       if (! $response->is_success) {
+           warn "$progname warning: In watchfile $watchfile, reading webpage\n  $base failed: " . $response->status_line . "\n";
+           return '';
+       }
+
+       my $content = $response->content;
+       print STDERR "$progname debug: received content:\n$content\[End of received content]\n"
+           if $debug;
+
+       # 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
+       print STDERR "$progname debug: matching pattern $pattern\n" if $debug;
+       my (@dirs);
+
+       # We separate out HTMLised listings from standard listings, so
+       # that we can target our search correctly
+       if ($content =~ /<\s*a\s+[^>]*href/i) {
+           while ($content =~ 
+               m/(?:<\s*a\s+[^>]*href\s*=\s*\")((?-i)$pattern)\"/gi) {
+               my $dir = $1;
+               my $mangled_version = join(".", $dir =~ m/^$pattern$/);
+               push @dirs, [$mangled_version, $dir];
+           }
+       } else {
+           # they all look like:
+           # info info ... info filename [ -> linkname]
+           while ($content =~ m/($pattern)(\s+->\s+\S+)?$/mg) {
+               my $dir = $1;
+               my $mangled_version = join(".", $dir =~ m/^$pattern$/);
+               push @dirs, [$mangled_version, $dir];
+           }
+       }           
+       if (@dirs) {
+           if ($debug) {
+               print STDERR "-- Found the following matching dirs:\n";
+               foreach my $dir (@dirs) { print STDERR "     $$dir[1]\n"; }
+           }
+           @dirs = Devscripts::Versort::versort(@dirs);
+           my ($newversion, $newdir) = @{$dirs[0]};
+           return $newdir;
+       } else {
+           warn "$progname warning: In $watchfile no matching dirs for pattern\n  $base$pattern\n";
+           return '';
+       }
+    }
+}
+
+
+# parameters are dir, package, upstream version, good dirname
+sub process_watchfile ($$$$)
+{
+    my ($dir, $package, $version, $watchfile) = @_;
+    my $watch_version=0;
+    my $status=0;
+    %dehs_tags = ();
+
+    unless (open WATCH, $watchfile) {
+       warn "$progname warning: could not open $watchfile: $!\n";
+       return 1;
+    }
+
+    while (<WATCH>) {
+       next if /^\s*\#/;
+       next if /^\s*$/;
+       s/^\s*//;
+
+    CHOMP:
+       chomp;
+       if (s/(?<!\\)\\$//) {
+           if (eof(WATCH)) {
+               warn "$progname warning: $watchfile ended with \\; skipping last line\n";
+               $status=1;
+               last;
+           }
+           $_ .= <WATCH>;
+           goto CHOMP;
+       }
+
+       if (! $watch_version) {
+           if (/^version\s*=\s*(\d+)(\s|$)/) {
+               $watch_version=$1;
+               if ($watch_version < 2 or
+                   $watch_version > $CURRENT_WATCHFILE_VERSION) {
+                   warn "$progname ERROR: $watchfile version number is unrecognised; skipping watchfile\n";
+                   last;
+               }
+               next;
+           } else {
+               warn "$progname warning: $watchfile is an obsolete version 1 watchfile;\n  please upgrade to a higher version\n  (see uscan(1) for details).\n";
+               $watch_version=1;
+           }
+       }
+
+       # 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;
+       if ($verbose) {
+           print "-- In $watchfile, processing watchfile line:\n   $_\n";
+       } elsif ($download == 0 and ! $dehs) {
+           $pkg_report_header = "Processing watchfile line for package $package...\n";
+       }
+           
+       $status +=
+           process_watchline($_, $watch_version, $dir, $package, $version,
+                             $watchfile);
+       dehs_output if $dehs;
+    }
+
+    close WATCH or
+       $status=1, warn "$progname warning: problems reading $watchfile: $!\n";
+
+    return $status;
+}
+
+
+# Collect up messages for dehs output into a tag
+sub dehs_msg ($)
+{
+    my $msg = $_[0];
+    $msg =~ s/\s*$//;
+    push @{$dehs_tags{'messages'}}, $msg;
+}
+
+sub dehs_warn ($)
+{
+    my $warning = $_[0];
+    $warning =~ s/\s*$//;
+    push @{$dehs_tags{'warnings'}}, $warning;
+}
+
+sub dehs_die ($)
+{
+    my $msg = $_[0];
+    $msg =~ s/\s*$//;
+    %dehs_tags = ('errors' => "$msg");
+    $dehs_end_output=1;
+    dehs_output;
+    exit 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
+                   status 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";
+           }
+       }
+    }
+    if ($dehs_end_output) {
+       print "</dehs>\n";
+    }
+
+    # Don't repeat output
+    %dehs_tags = ();
+}
+
+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
+                   $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) {
+               if ($in_replacement) {
+                   $replacement .= $char;
+               } else {
+                   $regexp .= $char;
+               }
+           } elsif ($open < 0) {
+               $parsed_ok = 0;
+               last;
+           }
+       } else {
+           if ($in_replacement) {
+               if ($open) {
+                   $replacement .= $char;
+               } else {
+                   $flags .= $char;
+               }
+           } else {
+               $regexp .= $char;
+           }
+       }
+       # Don't treat \\ as an escape
+       $last_was_escape = ($char eq '\\' and ! $last_was_escape);
+    }
+
+    $parsed_ok = 0 unless $in_replacement and $open == 0;
+
+    return ($parsed_ok, $regexp, $replacement, $flags);
+}
+
+sub safe_replace($$) {
+    my ($in, $pat) = @_;
+    $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);
+
+       return 0 unless $parsed_ok;
+    } elsif ($pat !~ /^(?:s|tr|y)$esc((?:\\.|[^\\$esc])*)$esc((?:\\.|[^\\$esc])*)$esc([a-z]*)$/) {
+       return 0;
+    } else {
+       ($regexp, $replacement, $flags) = ($1, $2, $3);
+    }
+
+    my $safeflags = $flags;
+    if ($op eq 'tr' or $op eq 'y') {
+       $safeflags =~ tr/cds//cd;
+       return 0 if $safeflags ne $flags;
+       
+       $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 ($@) {
+           return 0;
+       } else {
+           return 1;
+       }
+    } else {
+       $safeflags =~ tr/gix//cd;
+       return 0 if $safeflags ne $flags;
+
+       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
+           return 0 if $regexp =~ /^.*[^\\](\\\\)*\\G/;
+       }
+
+       # 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
+       $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];
+                   }
+               }
+           };
+           return 0 if $@;
+
+           # 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;
+    }
+}
diff --git a/scripts/uupdate.1 b/scripts/uupdate.1
new file mode 100644 (file)
index 0000000..817f98a
--- /dev/null
@@ -0,0 +1,180 @@
+.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\-\-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\-\-upstream-version \fIversion\fR, \fB\-v \fIversion\fR
+Specify the version number of the upstream package explicitly.
+.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.
+.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 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, \fBlsb_release\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, \fBlsb_release\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),
+.I The Debian Policy Manual
+and
+.BR devscripts.conf (5).
+.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.sh b/scripts/uupdate.sh
new file mode 100755 (executable)
index 0000000..e90787e
--- /dev/null
@@ -0,0 +1,829 @@
+#! /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
+#
+# 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/>.
+
+
+# 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>
+# 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
+
+PROGNAME=`basename $0`
+MODIFIED_CONF_MSG='Default settings modified by devscripts configuration files:'
+
+usage () {
+    echo \
+"Usage for a new archive:
+  $PROGNAME [options] <new upstream archive> [<version>]
+For a patch file:
+  $PROGNAME [options] --patch|-p <patch>[.gz|.bz2|.lzma|.xz]
+Options are:
+   --upstream-version <version>, -v <version>
+                      specify version number of upstream package
+   --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 patches
+   --no-symlink       Copy new upstream archive to new location
+                      as <pkg>_<version>.orig.tar.{gz|bz2|lzma|xz} instead of making a
+                      symlink
+   --no-conf, --noconf
+                      Don't read devscripts config files;
+                      must be the first option given
+
+$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
+}
+
+# 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
+
+# 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 which lsb_release >/dev/null 2>&1; then
+    case "$(lsb_release --short --id 2>/dev/null)" in
+       "Ubuntu")
+           SUFFIX="0ubuntu1"
+           ;;
+    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 | egrep '^(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:ubs \
+        --long upstream-version:,patch:,rootcmd: \
+       --long pristine,no-pristine,nopristine \
+       --long symlink,no-symlink,nosymlink \
+       --long no-conf,noconf \
+       --long help,version -n "$PROGNAME" -- "$@")
+if [ $? != 0 ] ; then exit 1 ; fi
+
+eval set -- $TEMP
+
+# Process Parameters
+while [ "$1" ]; do
+    case $1 in
+    --upstream-version|-v)
+       shift; NEW_VERSION="$1" ;;
+    --patch|-p)
+       shift; PATCH="$1" ;;
+    --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 ;;
+    --help) usage; exit 0 ;;
+    --version) version; exit 0 ;;
+    --)        shift; break ;;
+    *) echo "$PROGNAME: bug in option parser, sorry!" >&2 ; exit 1 ;;
+    esac
+    shift
+done
+
+if [ -n "$PATCH" ]; then
+    if [ $# -ne 0 ]; then
+        echo "$PROGNAME: additional archive name/version number is not allowed with --patch" >&2
+       echo "Run $PROGNAME --help for usage information" >&2
+        exit 1
+    fi
+else
+    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 "Run $PROGNAME --help for usage information" >&2
+       exit 1 ;;
+    esac
+fi
+
+# Get Parameters from current source archive
+
+if [ ! -f debian/changelog ]; then
+    echo "$PROGNAME: cannot find debian/changelog." >&2
+    echo "Are you in the top directory of the source tree?" >&2
+    exit 1
+fi
+
+# Figure out package info we need
+mustsetvar PACKAGE "`dpkg-parsechangelog | sed -n 's/^Source: //p'`" \
+    "source package"
+mustsetvar VERSION "`dpkg-parsechangelog | sed -n 's/^Version: //p'`" \
+    "source version"
+
+# Get epoch and upstream version
+eval `echo "$VERSION" | perl -ne '/^(?:(\d+):)?(.*)/; print "SVERSION=$2\nEPOCH=$1\n";'`
+
+UVERSION=`expr "$SVERSION" : '\(.*\)-[0-9a-zA-Z.+~]*$'` ||
+{
+    echo "$PROGNAME: a native Debian package cannot take upstream updates" >&2
+    exit 1
+}
+
+# Save pwd before we goes walkabout
+OPWD=`pwd`
+
+if [ "$PATCH" ]; then
+    if [ "$ARCHIVE" ]; then
+       echo "$PROGNAME: you can only specify a patch or a source code archive, not both!" >&2
+       exit 1
+    fi
+    # 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="lzcat $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="lzcat $OPWD/$PATCH"
+                   else
+                       CATPATCH="lzcat ../$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 "Please run $PROGNAME with the -v option" >&2
+           exit 1
+       fi
+
+       if [ -n "$EPOCH" ]; then
+           echo "New Release will be $EPOCH:$NEW_VERSION-$SUFFIX."
+       else
+           echo "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 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 "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 "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 "in the parent directory!" >&2
+       echo "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" >&2
+           echo "successfully.  Why not?" >&2
+           echo "Aborting...." >&2
+           exit 1
+       }
+    else debuild clean || {
+           echo "$PROGNAME: couldn't run  debuild -r$UUPDATE_ROOTCMD clean" >&2
+           echo "successfully.  Why not?" >&2
+           echo "Aborting...." >&2
+           exit 1
+       }
+    fi
+
+    cd ..
+    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 "aborting..." >&2
+       exit 1
+    }
+    cd $TEMP_DIR
+    if [ "$OLDARCHIVETYPE" = gz ]; then
+       tar zxf ../$OLDARCHIVE || {
+           echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+           echo "aborting..." >&2
+           exit 1
+       }
+    elif [ "$OLDARCHIVETYPE" = bz2 ]; then
+       tar --bzip2 -xf ../$OLDARCHIVE || {
+           echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+           echo "aborting..." >&2
+           exit 1
+       }
+    elif [ "$OLDARCHIVETYPE" = lzma ]; then
+       tar --lzma -xf ../$OLDARCHIVE || {
+           echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+           echo "aborting..." >&2
+           exit 1
+       }
+    elif [ "$OLDARCHIVETYPE" = xz ]; then
+       tar --xz -xf ../$OLDARCHIVE || {
+           echo "$PROGNAME: can't untar $OLDARCHIVE;" >&2
+           echo "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 ..
+    rm -rf $TEMP_DIR
+
+    cd $PACKAGE-$UVERSION.orig
+    if ! $CATPATCH > /dev/null; then
+       echo "$PROGNAME: can't run $CATPATCH;" >&2
+       echo "aborting..." >&2
+       exit 1
+    fi
+    if $CATPATCH | patch -sp1; then
+       cd ..
+       mv $PACKAGE-$UVERSION.orig $PACKAGE-$SNEW_VERSION.orig
+       echo "-- Originals could be successfully patched"
+       cp -a $PACKAGE-$UVERSION $PACKAGE-$SNEW_VERSION
+       cd $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
+       debchange -v "$NEW_VERSION-$SUFFIX" "New upstream release"
+       echo "Remember: Your current directory is the OLD sourcearchive!"
+       echo "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 ..
+       rm -rf $PACKAGE-$UVERSION.orig
+       exit 1
+    fi
+else
+# This is an orginal sourcearchive
+    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 "Please run $PROGNAME with the -v option" >&2
+           exit 1
+       fi
+    fi
+    if [ -n "$EPOCH" ]; then
+       echo "New Release will be $EPOCH:$NEW_VERSION-$SUFFIX."
+    else
+       echo "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 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 "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 "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 "already exists in the parent dir;" >&2
+       echo "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 "already exists in the parent dir;" >&2
+       echo "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 "already exists in the parent dir;" >&2
+       echo "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 "already exists in the parent dir;" >&2
+       echo "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 "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 "Continuing anyway..." >&2
+               ;;
+       esac
+    fi
+
+    cd ..
+    TEMP_DIR=$(mktemp -d uupdate.XXXXXXXX) || {
+       echo "$PROGNAME: can't create temporary directory;" >&2
+       echo "aborting..." >&2
+       exit 1
+    }
+    cd $TEMP_DIR
+    if [ ! -d "$ARCHIVE_PATH" ]; then
+       echo "-- Untarring the new sourcecode archive $ARCHIVE"
+       $UNPACK "$ARCHIVE_PATH" || {
+           echo "$PROGNAME: can't unpack: $UNPACK $ARCHIVE_PATH failed;" >&2
+           echo "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 "aborting..." >&2
+           exit 1
+       }
+    fi
+
+    cd ..
+    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
+    fi
+    rm -rf $TEMP_DIR
+    cp -a $PACKAGE-$SNEW_VERSION $PACKAGE-$SNEW_VERSION.orig
+    cd $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=lzcat
+    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"
+    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 "Please check that the diff is applied correctly." >&2
+                   echo "(This program will use the pristine upstream version and save the old .diff.gz" >&2
+                   echo "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
+
+       if $DIFFCAT $DIFF | patch -sNp1 ; then
+           echo "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 "Rejected diffs are in $X" >&2
+           fi
+           STATUS=1
+       fi
+
+       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 "but upstream also contains a debian/ directory!" >&2
+           if [ -e "debian.upstream" ]; then
+               echo "Please apply the diff by hand and take care with this." >&2
+               exit 1
+           fi
+           echo "This program will move the upstream directory out of the way" >&2
+           echo "to debian.upstream/ and use the Debian version" >&2
+           mv debian debian.upstream
+       fi
+       if $DIFFUNPACK $DIFF; then
+           echo "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
+    chmod a+x debian/rules
+    debchange -v "$NEW_VERSION-$SUFFIX" New upstream release
+    echo "Remember: Your current directory is the OLD sourcearchive!"
+    echo "Do a \"cd ../$PACKAGE-$SNEW_VERSION\" to see the new package"
+fi
+
+if [ $STATUS -ne 0 ]; then
+    echo "(Did you see the warnings above?)" >&2
+fi
+
+exit $STATUS
diff --git a/scripts/who-uploads.1 b/scripts/who-uploads.1
new file mode 100644 (file)
index 0000000..1898b4f
--- /dev/null
@@ -0,0 +1,74 @@
+.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) 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,pgp}\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,pgp}\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 (executable)
index 0000000..aa94f67
--- /dev/null
@@ -0,0 +1,243 @@
+#! /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 <http://www.gnu.org/licenses/>.
+
+PROGNAME=`basename $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.*
+                      and /usr/share/keyrings/debian-maintainers.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-keyring.pgp:/usr/share/keyrings/debian-maintainers.gpg
+DEFAULT_WHOUPLOADS_MAXUPLOADS=3
+DEFAULT_WHOUPLOADS_DATE=no
+VARS="WHOUPLOADS_KEYRINGS WHOUPLOADS_MAXUPLOADS WHOUPLOADS_DATE"
+
+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
+
+OIFS="$IFS"
+IFS=:
+declare -a GPG_DEFAULT_KEYRINGS
+
+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:-  }"
+
+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" -- "$@")
+if [ $? != 0 ] ; then exit 1 ; fi
+
+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)
+       GPG_DEFAULT_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
+
+# Some useful abbreviations for gpg options
+GPG_NO_KEYRING="--no-options --no-auto-check-trustdb --no-default-keyring --keyring /dev/null"
+GPG_OPTIONS="--no-options --no-auto-check-trustdb --no-default-keyring"
+
+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="http://packages.qa.debian.org/${prefix}/${package}.html"
+    baseurl="http://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 --verify 2>&1 |
+                sed -rne 's/.*ID ([0-9A-Z]+).*/\1/p')
+
+       UPLOADER=$(gpg $GPG_OPTIONS \
+                  "${GPG_DEFAULT_KEYRINGS[@]}" "${GPG_KEYRINGS[@]}" \
+                  --list-key --with-colons $GPG_ID 2>/dev/null |
+                  awk  -F: '/@debian\.org>/ { a = $10; exit} /^pub/ { a = $10 } END { print a }' )
+       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
+
+exit 0
diff --git a/scripts/whodepends.1 b/scripts/whodepends.1
new file mode 100644 (file)
index 0000000..26e1ca0
--- /dev/null
@@ -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] [options]
+.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, \-h
+Show a brief usage message.
+.TP
+.B \-\-version, \-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 (executable)
index 0000000..a9b12ef
--- /dev/null
@@ -0,0 +1,54 @@
+#! /bin/bash -e
+# 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.
+
+PROGNAME=`basename $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 (file)
index 0000000..cee9229
--- /dev/null
@@ -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 [\-\-diff] [package ...]\fR
+.br
+\fBwnpp-alert \-\-help|\-\-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~/.devscripts_cache\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
+http://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 (executable)
index 0000000..19fc5d5
--- /dev/null
@@ -0,0 +1,128 @@
+#! /bin/bash -e
+
+# 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%....
+
+PROGNAME=`basename $0`
+CACHEDIR=~/.devscripts_cache
+CACHEDDIFF="${CACHEDIR}/wnpp-diff"
+
+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.
+  http://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 "$CACHEDDIFF" ]; then
+        # First use
+        comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/+/\\+/g' | \
+          xargs -i egrep '^[A-Z]+ [0-9]+ {} ' $WNPP | \
+          tee $CACHEDDIFF
+    else
+        comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/+/\\+/g' | \
+          xargs -i egrep '^[A-Z]+ [0-9]+ {} ' $WNPP > $WNPP_DIFF
+        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 [ "x$1" = "x--help" -o "x$1" = "x-h" ]; then usage; exit 0; fi
+if [ "x$1" = "x--version" -o "x$1" = "x-v" ]; then version; exit 0; fi
+
+if ! command -v wget >/dev/null 2>&1; then
+    echo "$PROGNAME: need the wget 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
+
+INSTALLED=`mktemp -t wnppalert-installed.XXXXXX`
+trap "rm -f '$INSTALLED'" 0 1 2 3 7 10 13 15
+WNPP=`mktemp -t wnppalert-wnpp.XXXXXX`
+WNPPTMP=`mktemp -t wnppalert-wnpp.XXXXXX`
+trap "rm -f '$INSTALLED' '$WNPP' '$WNPPTMP'" 0 1 2 3 7 10 13 15
+WNPP_PACKAGES=`mktemp -t wnppalert-wnpp_packages.XXXXXX`
+trap "rm -f '$INSTALLED' '$WNPP' '$WNPPTMP' '$WNPP_PACKAGES'" \
+  0 1 2 3 7 10 13 15
+
+if [ "x$1" = "x--diff" ] || [ "x$1" = "x-d" ]; then
+    shift
+    WNPP_DIFF=`mktemp -t wnppalert-wnpp_diff.XXXXXX`
+    trap "rm -f '$INSTALLED' '$WNPP' '$WNPPTMP' '$WNPP_PACKAGES' '$WNPP_DIFF'" \
+      0 1 2 3 7 10 13 15
+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'
+wget -q -O $WNPPTMP http://www.debian.org/devel/wnpp/orphaned || \
+    { echo "wnpp-alert: wget http://www.debian.org/devel/wnpp/orphaned failed" >&2; exit 1; }
+sed -ne 's/.*<li><a href="http:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/O \1 \2 -- \3/; T d; p; : d' $WNPPTMP > $WNPP
+
+wget -q -O $WNPPTMP http://www.debian.org/devel/wnpp/rfa_bypackage || \
+    { echo "wnpp-alert: wget http://www.debian.org/devel/wnpp/rfa_bypackage" >&2; exit 1; }
+sed -ne 's/.*<li><a href="http:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFA \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+wget -q -O $WNPPTMP http://www.debian.org/devel/wnpp/help_requested || \
+    { echo "wnpp-alert: wget http://www.debian.org/devel/wnpp/help_requested" >&2; exit 1; }
+sed -ne 's/.*<li><a href="http:\/\/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.
+# This shouldn't use knowledge of the internal /var/lib/dpkg/status
+# format directly, but speed ...
+# For the correct settings of -B# -A#, keep up-to-date with
+# the dpkg source, defn of fieldinfos[] in lib/parse.c
+# (and should match Devscripts/Packages.pm)
+
+if [ $# -gt 0 ]; then
+    echo $* | tr ' ' '\n' | sort -u > $INSTALLED
+else
+    grep -B2 -A7 'Status: install ok installed' /var/lib/dpkg/status | \
+    grep '^\(Package\|Source\):' | \
+    cut -f2 -d' ' | \
+    sort -u \
+    > $INSTALLED
+fi
+
+if [ -f "$WNPP_DIFF" ]; then 
+    if [ -d "$CACHEDIR" ]; then
+        wnppdiff
+        exit 0
+    else
+        echo "$PROGNAME: Unable to create diff; displaying full output" 
+    fi
+fi
+
+comm -12 $WNPP_PACKAGES $INSTALLED | sed -e 's/+/\\+/g' | \
+xargs -i egrep '^[A-Z]+ [0-9]+ {} ' $WNPP
diff --git a/scripts/wnpp-check.1 b/scripts/wnpp-check.1
new file mode 100644 (file)
index 0000000..20a3249
--- /dev/null
@@ -0,0 +1,39 @@
+.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 package [...]\fR
+.br
+\fBwnpp-check \-\-help|\-\-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 \-\-help ", " \-h
+Show a summary of options.
+.TP
+.BR \-\-version ", " \-v
+Show version and copyright information.
+.SH SEE ALSO
+http://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 (executable)
index 0000000..b3858db
--- /dev/null
@@ -0,0 +1,69 @@
+#! /bin/bash -e
+
+# 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>
+
+PROGNAME=`basename $0`
+PACKAGES="$@"
+
+usage () { echo \
+"Usage: $PROGNAME <package name> [...]
+  -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
+  http://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>"
+}
+
+if [ "x$1" = "x--help" -o "x$1" = "x-h" ]; then usage; exit 0; fi
+if [ "x$1" = "x--version" -o "x$1" = "x-v" ]; then version; exit 0; fi
+if [ "x$1" = "x" ]; then usage; exit 1; fi
+
+if ! command -v wget >/dev/null 2>&1; then
+    echo "$PROGNAME: need the wget package installed to run this" >&2
+    exit 1
+fi
+
+WNPP=`mktemp -t wnppcheck-wnpp.XXXXXX`
+WNPPTMP=`mktemp -t wnppcheck-wnpp.XXXXXX`
+trap "rm -f '$WNPP' '$WNPPTMP'" 0 1 2 3 7 10 13 15
+WNPP_PACKAGES=`mktemp -t wnppcheck-wnpp_packages.XXXXXX`
+trap "rm -f '$WNPP' '$WNPPTMP' '$WNPP_PACKAGES'" \
+  0 1 2 3 7 10 13 15
+
+# 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'
+
+wget -q -O $WNPPTMP http://www.debian.org/devel/wnpp/being_packaged || \
+    { echo "wnpp-check: wget http://www.debian.org/devel/wnpp/being_packaged failed" >&2; exit 1; }
+sed -ne 's/.*<li><a href="http:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/ITP \1 \2 -- \3/; T d; p; : d' $WNPPTMP > $WNPP
+
+wget -q -O $WNPPTMP http://www.debian.org/devel/wnpp/requested || \
+    { echo "wnpp-check: wget http://www.debian.org/devel/wnpp/requested" >&2; exit 1; }
+sed -ne 's/.*<li><a href="http:\/\/bugs.debian.org\/\([0-9]*\)">\([^:<]*\)[: ]*\([^<]*\)<\/a>.*/RFP \1 \2 -- \3/; T d; p; : d' $WNPPTMP >> $WNPP
+
+awk -F' ' '{print $3" ("$1" - #"$2")"}' $WNPP | sort > $WNPP_PACKAGES
+
+FOUND=0
+for pkg in $PACKAGES
+do
+    grep $pkg $WNPP_PACKAGES && FOUND=1
+done
+
+exit $FOUND