From 93a48ae6f49c2036d06bda61754917d878f3f9e2 Mon Sep 17 00:00:00 2001 From: James McCoy Date: Sat, 15 Sep 2012 02:32:38 +0100 Subject: [PATCH] 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) # imported from the archive --- COPYING | 340 + Devscripts/DB_File_Lock.pm | 366 + Devscripts/Debbugs.pm | 454 + Devscripts/PackageDeps.pm | 280 + Devscripts/Packages.pm | 275 + Devscripts/Set.pm | 133 + Devscripts/URI.pm | 106 + Devscripts/Versort.pm | 56 + Makefile | 45 + Makefile.common | 8 + README | 311 + README.newscripts | 20 + conf.default.in | 612 + cowpoke.conf | 86 + debian/NEWS | 49 + debian/TODO | 1 + debian/bug/presubj | 4 + debian/bug/script | 19 + debian/changelog | 4958 ++++++ debian/compat | 1 + debian/control | 133 + debian/copyright | 45 + debian/dirs | 5 + debian/examples | 1 + debian/genmanpage.pl | 33 + debian/install | 2 + debian/links | 7 + debian/lintian.overrides | 2 + debian/manpages | 4 + debian/postinst | 695 + debian/postrm | 9 + debian/rules | 92 + debian/source/format | 1 + debian/svn-deblayout | 1 + examples/bts_autosubscription.procmail | 32 + examples/debian.procmail | 100 + examples/forward.exim | 6 + examples/forward.procmail | 1 + examples/master.procmail | 90 + po4a/Makefile | 24 + po4a/add_fr/translator_dbk.add | 27 + po4a/add_fr/translator_man.add | 16 + po4a/add_fr/translator_pod.add | 6 + po4a/devscripts-po4a.conf | 124 + po4a/fr/translator_man.add | 16 + po4a/po/devscripts.pot | 14513 +++++++++++++++++ po4a/po/fr.po | 19295 +++++++++++++++++++++++ scripts/Makefile | 67 + scripts/annotate-output.1 | 59 + scripts/annotate-output.sh | 85 + scripts/archpath.1 | 63 + scripts/archpath.sh | 44 + scripts/bts.pl | 4091 +++++ scripts/build-rdeps.pl | 351 + scripts/chdist.bash_completion | 50 + scripts/chdist.pl | 678 + scripts/checkbashisms.1 | 65 + scripts/checkbashisms.pl | 623 + scripts/cowpoke.1 | 250 + scripts/cowpoke.sh | 368 + scripts/cvs-debc.1 | 68 + scripts/cvs-debi.1 | 72 + scripts/cvs-debi.sh | 360 + scripts/cvs-debrelease.1 | 73 + scripts/cvs-debrelease.sh | 375 + scripts/cvs-debuild.1 | 60 + scripts/cvs-debuild.pl | 219 + scripts/dcmd.1 | 103 + scripts/dcmd.sh | 262 + scripts/dcontrol.pl | 292 + scripts/dd-list.1 | 95 + scripts/dd-list.pl | 193 + scripts/deb-reversion.dbk | 320 + scripts/deb-reversion.sh | 221 + scripts/debc.1 | 122 + scripts/debchange.1 | 445 + scripts/debchange.pl | 1536 ++ scripts/debcheckout.pl | 977 ++ scripts/debclean.1 | 113 + scripts/debclean.sh | 205 + scripts/debcommit.pl | 849 + scripts/debdiff.1 | 227 + scripts/debdiff.pl | 1084 ++ scripts/debi.1 | 131 + scripts/debi.pl | 412 + scripts/debpkg-wrapper.c | 17 + scripts/debpkg.1 | 25 + scripts/debpkg.pl | 94 + scripts/debrelease.1 | 139 + scripts/debrelease.sh | 338 + scripts/debrsign.1 | 73 + scripts/debrsign.sh | 265 + scripts/debsign.1 | 155 + scripts/debsign.sh | 751 + scripts/debsnap.1 | 113 + scripts/debsnap.pl | 253 + scripts/debuild.1 | 426 + scripts/debuild.pl | 1416 ++ scripts/desktop2menu.pl | 308 + scripts/devscripts.1.in | 30 + scripts/devscripts.conf.5 | 60 + scripts/dget.pl | 644 + scripts/diff2patches.1 | 50 + scripts/diff2patches.sh | 91 + scripts/dpkg-buildpackage-snapshot | 267 + scripts/dpkg-depcheck.1 | 131 + scripts/dpkg-depcheck.pl | 552 + scripts/dpkg-genbuilddeps.1 | 40 + scripts/dpkg-genbuilddeps.sh | 40 + scripts/dscverify.1 | 81 + scripts/dscverify.pl | 434 + scripts/getbuildlog.1 | 42 + scripts/getbuildlog.sh | 142 + scripts/grep-excuses.1 | 42 + scripts/grep-excuses.pl | 235 + scripts/libvfork.c | 8 + scripts/licensecheck.pl | 543 + scripts/list-unreleased.1 | 23 + scripts/list-unreleased.sh | 91 + scripts/manpage-alert.1 | 28 + scripts/manpage-alert.sh | 82 + scripts/mass-bug.pl | 524 + scripts/mergechanges.1 | 21 + scripts/mergechanges.sh | 212 + scripts/mk-build-deps.pl | 301 + scripts/namecheck.pl | 267 + scripts/nmudiff.1 | 117 + scripts/nmudiff.sh | 426 + scripts/pkgnames.bash_completion | 23 + scripts/plotchangelog.1 | 127 + scripts/plotchangelog.pl | 415 + scripts/pts-subscribe.1 | 59 + scripts/pts-subscribe.sh | 177 + scripts/rc-alert.1 | 129 + scripts/rc-alert.pl | 421 + scripts/rmadison.pl | 312 + scripts/svnpath.pl | 101 + scripts/tagpending.pl | 443 + scripts/transition-check.pl | 237 + scripts/uscan.1 | 546 + scripts/uscan.pl | 1979 +++ scripts/uupdate.1 | 180 + scripts/uupdate.sh | 829 + scripts/who-uploads.1 | 74 + scripts/who-uploads.sh | 243 + scripts/whodepends.1 | 20 + scripts/whodepends.sh | 54 + scripts/wnpp-alert.1 | 34 + scripts/wnpp-alert.sh | 128 + scripts/wnpp-check.1 | 39 + scripts/wnpp-check.sh | 69 + 151 files changed, 75548 insertions(+) create mode 100644 COPYING create mode 100644 Devscripts/DB_File_Lock.pm create mode 100644 Devscripts/Debbugs.pm create mode 100644 Devscripts/PackageDeps.pm create mode 100644 Devscripts/Packages.pm create mode 100644 Devscripts/Set.pm create mode 100644 Devscripts/URI.pm create mode 100644 Devscripts/Versort.pm create mode 100644 Makefile create mode 100644 Makefile.common create mode 100644 README create mode 100644 README.newscripts create mode 100644 conf.default.in create mode 100644 cowpoke.conf create mode 100644 debian/NEWS create mode 100644 debian/TODO create mode 100644 debian/bug/presubj create mode 100644 debian/bug/script create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/dirs create mode 100644 debian/examples create mode 100644 debian/genmanpage.pl create mode 100644 debian/install create mode 100644 debian/links create mode 100644 debian/lintian.overrides create mode 100644 debian/manpages create mode 100644 debian/postinst create mode 100644 debian/postrm create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/svn-deblayout create mode 100644 examples/bts_autosubscription.procmail create mode 100644 examples/debian.procmail create mode 100644 examples/forward.exim create mode 100644 examples/forward.procmail create mode 100644 examples/master.procmail create mode 100644 po4a/Makefile create mode 100644 po4a/add_fr/translator_dbk.add create mode 100644 po4a/add_fr/translator_man.add create mode 100644 po4a/add_fr/translator_pod.add create mode 100644 po4a/devscripts-po4a.conf create mode 100644 po4a/fr/translator_man.add create mode 100644 po4a/po/devscripts.pot create mode 100644 po4a/po/fr.po create mode 100644 scripts/Makefile create mode 100644 scripts/annotate-output.1 create mode 100755 scripts/annotate-output.sh create mode 100644 scripts/archpath.1 create mode 100755 scripts/archpath.sh create mode 100755 scripts/bts.pl create mode 100755 scripts/build-rdeps.pl create mode 100644 scripts/chdist.bash_completion create mode 100755 scripts/chdist.pl create mode 100644 scripts/checkbashisms.1 create mode 100755 scripts/checkbashisms.pl create mode 100644 scripts/cowpoke.1 create mode 100755 scripts/cowpoke.sh create mode 100644 scripts/cvs-debc.1 create mode 100644 scripts/cvs-debi.1 create mode 100755 scripts/cvs-debi.sh create mode 100644 scripts/cvs-debrelease.1 create mode 100755 scripts/cvs-debrelease.sh create mode 100644 scripts/cvs-debuild.1 create mode 100755 scripts/cvs-debuild.pl create mode 100644 scripts/dcmd.1 create mode 100755 scripts/dcmd.sh create mode 100755 scripts/dcontrol.pl create mode 100644 scripts/dd-list.1 create mode 100755 scripts/dd-list.pl create mode 100644 scripts/deb-reversion.dbk create mode 100755 scripts/deb-reversion.sh create mode 100644 scripts/debc.1 create mode 100644 scripts/debchange.1 create mode 100755 scripts/debchange.pl create mode 100755 scripts/debcheckout.pl create mode 100644 scripts/debclean.1 create mode 100755 scripts/debclean.sh create mode 100755 scripts/debcommit.pl create mode 100644 scripts/debdiff.1 create mode 100755 scripts/debdiff.pl create mode 100644 scripts/debi.1 create mode 100755 scripts/debi.pl create mode 100644 scripts/debpkg-wrapper.c create mode 100644 scripts/debpkg.1 create mode 100755 scripts/debpkg.pl create mode 100644 scripts/debrelease.1 create mode 100755 scripts/debrelease.sh create mode 100644 scripts/debrsign.1 create mode 100755 scripts/debrsign.sh create mode 100644 scripts/debsign.1 create mode 100755 scripts/debsign.sh create mode 100644 scripts/debsnap.1 create mode 100755 scripts/debsnap.pl create mode 100644 scripts/debuild.1 create mode 100755 scripts/debuild.pl create mode 100755 scripts/desktop2menu.pl create mode 100644 scripts/devscripts.1.in create mode 100644 scripts/devscripts.conf.5 create mode 100755 scripts/dget.pl create mode 100644 scripts/diff2patches.1 create mode 100755 scripts/diff2patches.sh create mode 100755 scripts/dpkg-buildpackage-snapshot create mode 100644 scripts/dpkg-depcheck.1 create mode 100755 scripts/dpkg-depcheck.pl create mode 100644 scripts/dpkg-genbuilddeps.1 create mode 100755 scripts/dpkg-genbuilddeps.sh create mode 100644 scripts/dscverify.1 create mode 100755 scripts/dscverify.pl create mode 100644 scripts/getbuildlog.1 create mode 100644 scripts/getbuildlog.sh create mode 100644 scripts/grep-excuses.1 create mode 100755 scripts/grep-excuses.pl create mode 100644 scripts/libvfork.c create mode 100755 scripts/licensecheck.pl create mode 100644 scripts/list-unreleased.1 create mode 100755 scripts/list-unreleased.sh create mode 100644 scripts/manpage-alert.1 create mode 100755 scripts/manpage-alert.sh create mode 100755 scripts/mass-bug.pl create mode 100644 scripts/mergechanges.1 create mode 100755 scripts/mergechanges.sh create mode 100755 scripts/mk-build-deps.pl create mode 100644 scripts/namecheck.pl create mode 100644 scripts/nmudiff.1 create mode 100755 scripts/nmudiff.sh create mode 100644 scripts/pkgnames.bash_completion create mode 100644 scripts/plotchangelog.1 create mode 100755 scripts/plotchangelog.pl create mode 100644 scripts/pts-subscribe.1 create mode 100755 scripts/pts-subscribe.sh create mode 100644 scripts/rc-alert.1 create mode 100755 scripts/rc-alert.pl create mode 100755 scripts/rmadison.pl create mode 100755 scripts/svnpath.pl create mode 100755 scripts/tagpending.pl create mode 100755 scripts/transition-check.pl create mode 100644 scripts/uscan.1 create mode 100755 scripts/uscan.pl create mode 100644 scripts/uupdate.1 create mode 100755 scripts/uupdate.sh create mode 100644 scripts/who-uploads.1 create mode 100755 scripts/who-uploads.sh create mode 100644 scripts/whodepends.1 create mode 100755 scripts/whodepends.sh create mode 100644 scripts/wnpp-alert.1 create mode 100755 scripts/wnpp-alert.sh create mode 100644 scripts/wnpp-check.1 create mode 100755 scripts/wnpp-check.sh diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..c74d291 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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. + + , 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 index 0000000..d4ceefd --- /dev/null +++ b/Devscripts/DB_File_Lock.pm @@ -0,0 +1,366 @@ +# +# DB_File::Lock +# +# by David Harris +# +# 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 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 + +Helpful insight from Stas Bekman + +=head1 SEE ALSO + +DB_File(3). + +=cut diff --git a/Devscripts/Debbugs.pm b/Devscripts/Debbugs.pm new file mode 100644 index 0000000..7e88301 --- /dev/null +++ b/Devscripts/Debbugs.pm @@ -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 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 index 0000000..d3b8bfb --- /dev/null +++ b/Devscripts/PackageDeps.pm @@ -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 +# +# 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 . + +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 () { + 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 . 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 index 0000000..321938d --- /dev/null +++ b/Devscripts/Packages.pm @@ -0,0 +1,275 @@ +#! /usr/bin/perl -w + +# Copyright Bill Allombert 2001. +# Modifications copyright 2002 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 . + +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 () { + 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 () { + # 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() { + 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 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 } ; + + close PKG or croak("Problem reading grep pipe: $!"); + + return \%matches; +} + +1; + +=head1 AUTHOR + +Bill Allombert + +=head1 COPYING + +Copyright 2001 Bill Allombert +Modifications copyright 2002 Julian Gilbey +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 index 0000000..041288e --- /dev/null +++ b/Devscripts/Set.pm @@ -0,0 +1,133 @@ +# Copyright Bill Allombert 2001. +# Modifications copyright 2002 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 . + +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 + +=head1 COPYING + +Copyright 2001 Bill Allombert +Modifications Copyright 2002 Julian Gilbey +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 index 0000000..49a4c7a --- /dev/null +++ b/Devscripts/URI.pm @@ -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 . +# 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 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 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 index 0000000..dbf3bd0 --- /dev/null +++ b/Devscripts/Versort.pm @@ -0,0 +1,56 @@ +# Copyright (C) 1998,2002 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 . + +# 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 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 index 0000000..3ffa4b4 --- /dev/null +++ b/Makefile.common @@ -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 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 + +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 +Modified extensively by Julian Gilbey diff --git a/README.newscripts b/README.newscripts new file mode 100644 index 0000000..67c7676 --- /dev/null +++ b/README.newscripts @@ -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 index 0000000..1bc74ce --- /dev/null +++ b/conf.default.in @@ -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 -/ +# 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//f/foo into the desired layout +# default: make the directory from pool//f/foo to pool/f/foo +# DEBSNAP_CLEAN_REGEX="s@\([^/]*\)/[^/]*/\(.*\)@\1/\2@" +# +# Where the Sources.gz lives, subdirectory of DEBSNAP_BASE_URL// +# default: DEBSNAP_BASE_URL//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 ' -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 index 0000000..7a80a7f --- /dev/null +++ b/cowpoke.conf @@ -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 index 0000000..b22f9d7 --- /dev/null +++ b/debian/NEWS @@ -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 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 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 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 Thu, 13 Mar 2008 19:33:38 +0000 diff --git a/debian/TODO b/debian/TODO new file mode 100644 index 0000000..28ece0c --- /dev/null +++ b/debian/TODO @@ -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 index 0000000..6e30a34 --- /dev/null +++ b/debian/bug/presubj @@ -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 index 0000000..5f2298e --- /dev/null +++ b/debian/bug/script @@ -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 index 0000000..4dd7735 --- /dev/null +++ b/debian/changelog @@ -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 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 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 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 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 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 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 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 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 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 -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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 . (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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 $(& 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 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 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 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 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 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 . + 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 . (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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 ' (Closes: #342883) + * debcommit: handle commit messages for git-based setups (Closes: + #352004) + * uscan: check sanity of downloaded files (Closes: #303958) + + -- Julian Gilbey 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: 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 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 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 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 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 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 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 at the end of the excuses file due + to reformatting. + + -- Julian Gilbey 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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: processing, as the BTS understands + 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 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 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 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 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 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:" (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 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 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 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-). 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 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 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: and src: 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 should not regard the 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 ) + - 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 ' (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 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 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 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 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 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 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 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 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 ) + + -- Julian Gilbey 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 Fri, 20 Apr 2001 17:30:43 +0100 + +devscripts (2.5.26) unstable; urgency=low + + * Fixed debdiff; added wdiff formatting options + + -- Julian Gilbey 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 (closes: #72237) + * Improve forward.exim (master.procmail was already done) (closes: #78474) + + -- Julian Gilbey 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 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 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 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 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 Sun, 25 Feb 2001 14:21:01 +0000 + +devscripts (2.5.19) unstable; urgency=low + + * Quote package name in regexps (closes: #85566) + + -- Julian Gilbey 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 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 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 Mon, 11 Dec 2000 23:07:07 +0000 + +devscripts (2.5.15) unstable; urgency=low + + * Correct debsign typo -- oops! (closes: #79366) + + -- Julian Gilbey 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 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 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 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 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 ) + * Fix debian-test script to work with new version of debian-test + (closes: #51527) + + -- Julian Gilbey 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 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 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 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 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 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 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 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 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 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 Tue, 16 Nov 1999 02:41:57 +0000 + +devscripts (2.4.6) unstable; urgency=low + + * Rebuild with correct Perl paths + + -- Julian Gilbey 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 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 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 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 Sun, 7 Nov 1999 02:24:43 +0000 + +devscripts (2.4.1) unstable; urgency=low + + * Added remote changes file functionality to debsign + + -- Julian Gilbey 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 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 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 Wed, 4 Aug 1999 10:32:39 +0100 + +devscripts (2.3.7) unstable; urgency=low + + * Correct html patch (closes: #41986) + + -- Julian Gilbey 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 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 Fri, 23 Jul 1999 09:24:53 +0100 + +devscripts (2.3.4) unstable; urgency=low + + * Change perl dependency to perl5 dependency + + -- Julian Gilbey 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 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 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 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 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 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 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 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 Wed, 5 May 1999 23:55:15 +0100 + +devscripts (2.2.3) unstable; urgency=low + + * Correct debdiff Perl error and inconsistency + + -- Julian Gilbey 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 Tue, 27 Apr 1999 01:57:57 +0100 + +devscripts (2.2.1) unstable; urgency=low + + * Correct copyright notice in debdiff.1 + + -- Julian Gilbey 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Thu, 7 Jan 1999 02:46:04 +0000 + +devscripts (1.7.1) frozen unstable; urgency=medium + + * Corrected file permissions (Closes: #31447) + + -- Julian Gilbey 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 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 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 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 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 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 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 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 Mon, 20 Oct 1997 21:02:27 -0700 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..1e8b314 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +6 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..38c07c8 --- /dev/null +++ b/debian/control @@ -0,0 +1,133 @@ +Source: devscripts +Section: devel +Priority: optional +Maintainer: Devscripts Devel Team +Uploaders: Julian Gilbey , Joey Hess , Mohammed Adnène Trojette , Christoph Berg , Stefano Zacchiroli , James McCoy , Martin Zobel-Helas , Adam D. Barratt , Luk Claes , Patrick Schoenfeld , Ryan Niebur +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 index 0000000..822b50b --- /dev/null +++ b/debian/copyright @@ -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 + and extensively modified by Julian Gilbey +. + +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 + +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 index 0000000..a0dd7ce --- /dev/null +++ b/debian/dirs @@ -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 index 0000000..e39721e --- /dev/null +++ b/debian/examples @@ -0,0 +1 @@ +examples/* diff --git a/debian/genmanpage.pl b/debian/genmanpage.pl new file mode 100644 index 0000000..806b77b --- /dev/null +++ b/debian/genmanpage.pl @@ -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() { + 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 index 0000000..17f2e34 --- /dev/null +++ b/debian/install @@ -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 index 0000000..4891b68 --- /dev/null +++ b/debian/links @@ -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 index 0000000..646f453 --- /dev/null +++ b/debian/lintian.overrides @@ -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 index 0000000..7f1f3db --- /dev/null +++ b/debian/manpages @@ -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 index 0000000..0227377 --- /dev/null +++ b/debian/postinst @@ -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 <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /etc/devscripts.conf <> /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 -/ +# 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 index 0000000..cc5e5bc --- /dev/null +++ b/debian/postrm @@ -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 index 0000000..d3573fe --- /dev/null +++ b/debian/rules @@ -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 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/svn-deblayout b/debian/svn-deblayout new file mode 100644 index 0000000..d74dbc1 --- /dev/null +++ b/debian/svn-deblayout @@ -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 index 0000000..635f047 --- /dev/null +++ b/examples/bts_autosubscription.procmail @@ -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 $ +* ^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 $ +* ^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 index 0000000..b700197 --- /dev/null +++ b/examples/debian.procmail @@ -0,0 +1,100 @@ +# debian.procmail - Debian mailing list sorting procmail file. +# Copyright (C) 1999 Edward Betts +# +# 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 . +# +# 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: +* $^Subject: Accepted .+ \(($ARCHS )*($ARCHS)\) to .+ +* !$^Subject: Accepted ($PACKAGES) .+ +* ^Subject: Accepted .+ \(\/[-a-zA-Z0-9]+ +$DC_DIR/$MATCH + +:0 +* ^X-Mailing-List: +* $^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: +* ^X-Mailing-List: +# +# 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 . +# +# 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 + +# 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: +* $^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 index 0000000..27f79d6 --- /dev/null +++ b/po4a/Makefile @@ -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 index 0000000..f59812b --- /dev/null +++ b/po4a/add_fr/translator_dbk.add @@ -0,0 +1,27 @@ +PO4A-HEADER:mode=after;position=AUTEUR;endboundary= + + + TRADUCTION + + + Cette page de manuel a été traduite par 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 man. + + + + N'hésitez pas à signaler à l'auteur ou à la liste de traduction + debian-l10-french@lists.debian.org + selon le cas, toute erreur dans cette page de manuel. + + diff --git a/po4a/add_fr/translator_man.add b/po4a/add_fr/translator_man.add new file mode 100644 index 0000000..699deaf --- /dev/null +++ b/po4a/add_fr/translator_man.add @@ -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 index 0000000..bde9eae --- /dev/null +++ b/po4a/add_fr/translator_pod.add @@ -0,0 +1,6 @@ +PO4A-HEADER:mode=after;position=^=head1 NOM;beginboundary=FakePo4aBoundary +=head1 TRADUCTION + +Cyril Brulebois , 2006 + +Thomas Huriaux , 2006 diff --git a/po4a/devscripts-po4a.conf b/po4a/devscripts-po4a.conf new file mode 100644 index 0000000..eae9d1e --- /dev/null +++ b/po4a/devscripts-po4a.conf @@ -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 index 0000000..6cd07f4 --- /dev/null +++ b/po4a/fr/translator_man.add @@ -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 index 0000000..8d85f30 --- /dev/null +++ b/po4a/po/devscripts.pot @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 [I] I [I ...]" +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 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(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(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 was written by Jeroen van Wolffelaar " +"Ejeroen@wolffelaar.nlE 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" +msgstr "" + +#. type: Plain text +#: ../scripts/archpath.1:9 +msgid "B I" +msgstr "" + +#. type: Plain text +#: ../scripts/archpath.1:12 +msgid "B I--I" +msgstr "" + +#. type: Plain text +#: ../scripts/archpath.1:15 +msgid "B 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 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 will output a corresponding package name in the current archive " +"and category, or a plain branch name (without \\(oq--\"), in which case " +"B 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\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\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 was written by" +msgstr "" + +#. type: Plain text +#: ../scripts/archpath.1:59 +msgid "Colin Watson Ecjwatson@debian.orgE." +msgstr "" + +#. type: Plain text +#: ../scripts/archpath.1:63 +msgid "" +"Like B, 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 [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; 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 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 examines the B 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 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 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 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 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, 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" +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:762 +msgid "show [options] [ | | | : ] [opt=val ...]" +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:764 +msgid "show [options] [src: | from:] [opt=val ...]" +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:766 +msgid "show [options] [tag: | usertag: ] [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] [ | | | : ] [opt=val ..]" +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:780 +msgid "bugs [options] [src: | from:] [opt=val ..]" +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:782 +msgid "bugs [options] [tag: | usertag: ] [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 "" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:808 +msgid "Display bug number ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:810 +msgid "" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:812 +msgid "Display the bugs for the package ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:814 +msgid "src:" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:816 +msgid "Display the bugs for the source package ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:818 +msgid "" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:820 +msgid "Display the bugs for the maintainer email address ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:822 +msgid "from:" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:824 +msgid "Display the bugs for the submitter email address ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:826 +msgid "tag:" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:828 +msgid "Display the bugs which are tagged with ." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:830 +msgid "usertag:" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:832 +msgid "" +"Display the bugs which are tagged with usertag . See the BTS " +"documentation for more information on usertags. This will require the use " +"of a users= 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 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 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 [ | file: | fields: | 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 is given, empty fields will also be displayed." +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:1069 +msgid "" +"If B 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 [ ...]" +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 " +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 []" +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:1220 +msgid "Reopen a bug, with optional submitter." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:1231 +msgid "archive " +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 " +msgstr "" + +#. type: textblock +#: ../scripts/bts.pl:1247 +msgid "Unarchive a bug that is currently archived." +msgstr "" + +#. type: =item +#: ../scripts/bts.pl:1257 +msgid "retitle " +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 index 0000000..ff7a6a3 --- /dev/null +++ b/po4a/po/fr.po @@ -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=&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=&download=toto-(.*)\\e.tar\\e.gz\n" +"# \n" +"# E<lt>A href=\"http://toto.titi.org/download/?path=&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=&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 index 0000000..a14479e --- /dev/null +++ b/scripts/Makefile @@ -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 index 0000000..9cb6b72 --- /dev/null +++ b/scripts/annotate-output.1 @@ -0,0 +1,59 @@ +.TH ANNOTATE-OUTPUT 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +annotate-output \- annotate program output with time and stream +.SH SYNOPSIS +\fBannotate\-output\fR [\fIoptions\fR] \fIprogram\fR [\fIargs\fR ...] +.SH DESCRIPTION +\fBannotate\-output\fR will execute the specified program, while +prepending every line with the current time and O for stdout and E for +stderr. + +.SH OPTIONS +.TP +\fB+FORMAT\fR +Controls the timestamp format, as per \fBdate\fR(1). Defaults to +"%H:%M:%S". +.TP +\fB\-h\fR, \fB\-\-help\fR +Display a help message and exit successfully. + +.SH EXAMPLE + +.nf +$ annotate-output make +21:41:21 I: Started make +21:41:21 O: gcc \-Wall program.c +21:43:18 E: program.c: Couldn't compile, and took me ages to find out +21:43:19 E: collect2: ld returned 1 exit status +21:43:19 E: make: *** [all] Error 1 +21:43:19 I: Finished with exitcode 2 +.fi + +.SH BUGS +Since stdout and stderr are processed in parallel, it can happen that +some lines received on stdout will show up before later-printed stderr +lines (and vice-versa). + +This is unfortunately very hard to fix with the current annotation +strategy. A fix would involve switching to PTRACE'ing the process. +Giving nice a (much) higher priority over the executed program could +however cause this behaviour to show up less frequently. + +The program does not work as well when the output is not linewise. In +particular, when an interactive program asks for input, the question +might not be shown until after you have answered it. This will give +the impression that the annotated program has hung, while it has not. + +.SH "SEE ALSO" +\fBdate\fR(1) + +.SH SUPPORT +This program is community-supported (meaning: you'll need to fix it +yourself). Patches are however appreciated, as is any feedback +(positive or negative). + +.SH AUTHOR +\fBannotate-output\fR was written by Jeroen van Wolffelaar +<jeroen@wolffelaar.nl> This manpage comes under the same copyright as +annotate-output itself, read /usr/bin/annotate-output (or wherever +you install it) for the details. diff --git a/scripts/annotate-output.sh b/scripts/annotate-output.sh new file mode 100755 index 0000000..35aa1fc --- /dev/null +++ b/scripts/annotate-output.sh @@ -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 index 0000000..d0bd4dd --- /dev/null +++ b/scripts/archpath.1 @@ -0,0 +1,63 @@ +.TH ARCHPATH 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +archpath \- output arch (tla/Bazaar) archive names, with support for branches +.SH SYNOPSIS +.B archpath +.br +.B archpath +.I branch +.br +.B archpath +.IR branch -- version +.SH DESCRIPTION +.B archpath +is intended to be run in an arch (tla or Bazaar) working copy. +.PP +In its simplest usage, +.B archpath +with no parameters outputs the package name +(archive/category--branch--version) associated with the working copy. +.PP +If a parameter is given, it may either be a branch--version, in which case +.B archpath +will output a corresponding package name in the current archive and +category, or a plain branch name (without \(oq--\(dq), in which case +.B archpath +will output a corresponding package name in the current archive and +category and with the same version as the current working copy. +.PP +This is useful for branching. +For example, if you're using Bazaar and you want to create a branch for a +new feature, you might use a command like this: +.PP +.RS +.nf +.ft CW +baz branch $(archpath) $(archpath new-feature) +.ft R +.fi +.RE +.PP +Or if you want to tag your current code onto a \(oqreleases\(cq branch as +version 1.0, you might use a command like this: +.PP +.RS +.nf +.ft CW +baz branch $(archpath) $(archpath releases--1.0) +.ft R +.fi +.RE +.PP +That's much easier than using \(oqbaz tree-version\(cq to look up the +package name and manually modifying the result. +.SH AUTHOR +.B archpath +was written by +.na +Colin Watson <cjwatson@debian.org>. +.ad +Like +.BR archpath , +this manual page is released under the GNU General Public License, +version 2 or later. diff --git a/scripts/archpath.sh b/scripts/archpath.sh new file mode 100755 index 0000000..54e8da3 --- /dev/null +++ b/scripts/archpath.sh @@ -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 index 0000000..30ffa3b --- /dev/null +++ b/scripts/bts.pl @@ -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>>%<a href="$2.html">$3</a>> (<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 index 0000000..bdff6dc --- /dev/null +++ b/scripts/build-rdeps.pl @@ -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 index 0000000..b725c1a --- /dev/null +++ b/scripts/chdist.bash_completion @@ -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 index 0000000..c04d94e --- /dev/null +++ b/scripts/chdist.pl @@ -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 index 0000000..f9f05bf --- /dev/null +++ b/scripts/checkbashisms.1 @@ -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 index 0000000..5c3252c --- /dev/null +++ b/scripts/checkbashisms.pl @@ -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 index 0000000..bf6b2b3 --- /dev/null +++ b/scripts/cowpoke.1 @@ -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 index 0000000..b5fe70f --- /dev/null +++ b/scripts/cowpoke.sh @@ -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 index 0000000..37f0b55 --- /dev/null +++ b/scripts/cvs-debc.1 @@ -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 index 0000000..70bcc13 --- /dev/null +++ b/scripts/cvs-debi.1 @@ -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 index 0000000..65c284a --- /dev/null +++ b/scripts/cvs-debi.sh @@ -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 index 0000000..3debec0 --- /dev/null +++ b/scripts/cvs-debrelease.1 @@ -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 index 0000000..97e7f72 --- /dev/null +++ b/scripts/cvs-debrelease.sh @@ -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 index 0000000..d4fbf74 --- /dev/null +++ b/scripts/cvs-debuild.1 @@ -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 index 0000000..79eee88 --- /dev/null +++ b/scripts/cvs-debuild.pl @@ -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 index 0000000..bd0d8cd --- /dev/null +++ b/scripts/dcmd.1 @@ -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 index 0000000..63d56c6 --- /dev/null +++ b/scripts/dcmd.sh @@ -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 index 0000000..e18909e --- /dev/null +++ b/scripts/dcontrol.pl @@ -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 index 0000000..3f78758 --- /dev/null +++ b/scripts/dd-list.1 @@ -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 index 0000000..4991dd5 --- /dev/null +++ b/scripts/dd-list.pl @@ -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 index 0000000..1d5c1d5 --- /dev/null +++ b/scripts/deb-reversion.dbk @@ -0,0 +1,320 @@ +<?xml version='1.0' encoding='ISO-8859-1'?> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" +"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ + +<!-- + +Process this file with an XSLT processor: `xsltproc \ +-''-nonet /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\ +manpages/docbook.xsl manpage.dbk'. A manual page +<package>.<section> will be generated. You may view the +manual page with: nroff -man <package>.<section> | less'. A +typical entry in a Makefile or Makefile.am is: + +DB2MAN=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh/\ +manpages/docbook.xsl +XP=xsltproc -''-nonet + +manpage.1: manpage.dbk + $(XP) $(DB2MAN) $< + +The xsltproc binary is found in the xsltproc package. The +XSL files are in docbook-xsl. Please remember that if you +create the nroff version in one of the debian/rules file +targets (such as build), you will need to include xsltproc +and docbook-xsl in your Build-Depends control field. + +--> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>martin f.</firstname>"> + <!ENTITY dhsurname "<surname>krafft</surname>"> + <!ENTITY dhmaintfirstname "<firstname>Julian</firstname>"> + <!ENTITY dhmaintsurname "<surname>Gilbey</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Feb 13, 2006</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>madduck@debian.org</email>"> + <!ENTITY dhmaintemail "<email>jdg@debian.org</email>"> + <!ENTITY dhusername "martin f. krafft"> + <!ENTITY dhmaintusername "Julian Gilbey"> + <!ENTITY dhucpackage "<refentrytitle>deb-reversion</refentrytitle>"> + <!ENTITY dhpackage "deb-reversion"> + <!ENTITY dhcommand "deb-reversion"> + + <!ENTITY debian "<productname>Debian</productname>"> + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhcommand;</refname> + + <refpurpose>simple script to change the version of a .deb file.</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhcommand;</command> + <arg choice="opt"> + <replaceable>options</replaceable> + </arg> + <replaceable> .deb-file</replaceable> + <arg choice="opt" rep="repeat">log message</arg> + </cmdsynopsis> + </refsynopsisdiv> + + <refsect1> + <title>DESCRIPTION + + + &dhcommand; unpacks the specified .deb file, changes the version + number in the relevant locations, appends a Debian + changelog entry with the specified + contents, and creates a new .deb file with the updated version. + + + + 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 , the version + number can be specified directly. On the other hand, the + simply calculates the new version number but + does not generate a new package. + + + + 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 + &dhcommand; as root or running under + fakeroot + 1, as 'fakeroot + &dhcommand; foo.deb'. + + + + With , 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 'dch -a -- your message'. + (Alternatively, do not give a changelog entry on the + &dhcommand; command line and + dch will be called automatically.) The hook + command must be placed in quotes if it has more than one word; + it is called via sh -c. + + + + + OPTIONS + + + new-version + new-version + + + Specifies the version number to be used for the new + version. Passed to + dch + 1 + . + + + + + + old-version + old-version + + + Specifies the version number to be used as the old + version instead of the version stored in the .deb's + control file. + + + + + + + + + + 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 . + + + + + + string + string + + + Instead of using 'LOCAL.' as the version string to append + to the old version number, use string instead. + + + + + + hook-command + hook-command + + + 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. + + + + + + + + + + Pass to + + dpkg-deb + 1 + . + + + + + + + + + + Pass to + + dch + 1 + + + + + + + + + + + Display usage information. + + + + + + + + + + Display version information. + + + + + + + + SEE ALSO + + + dch + 1 + , + + fakeroot + 1 + , + + dpkg-deb + 1 + . + + + + + DISCLAIMER + + &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. + + + + 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. + + + 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. + + + + + AUTHOR + + + &dhpackage; is Copyright 2004-5 by &dhusername; &dhemail; and + modifications are Copyright 2006 by &dhmaintusername; &dhmaintemail;. + + + + Permission is granted to copy, distribute and/or modify this document + under the terms of the Artistic License: + http://www.opensource.org/licenses/artistic-license.php + On Debian systems, the complete text of the Artistic License can be + found + in /usr/share/common-licenses/Artistic. + + + + This manual page was written by &dhusername; &dhemail; and + modified by &dhmaintusername; &dhmaintemail;. + + + + + + diff --git a/scripts/deb-reversion.sh b/scripts/deb-reversion.sh new file mode 100755 index 0000000..1b1d381 --- /dev/null +++ b/scripts/deb-reversion.sh @@ -0,0 +1,221 @@ +#!/bin/bash +# +# deb-reversion -- a script to bump a .deb file's version number. +# +# Copyright © martin f. krafft +# 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 -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 index 0000000..ba0c6dd --- /dev/null +++ b/scripts/debc.1 @@ -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 , based on an original script by +Christoph Lameter . diff --git a/scripts/debchange.1 b/scripts/debchange.1 new file mode 100644 index 0000000..cb81bad --- /dev/null +++ b/scripts/debchange.1 @@ -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 ", +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 . +Many substantial changes and improvements were made by Julian Gilbey +. diff --git a/scripts/debchange.pl b/scripts/debchange.pl new file mode 100755 index 0000000..b9d6d57 --- /dev/null +++ b/scripts/debchange.pl @@ -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 +# Modified extensively by Julian Gilbey +# +# 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 . + +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 , --newversion= + 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 + 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 + 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 + Use the specified distribution in the changelog entry being edited + -u, --urgency + Use the specified urgency in the changelog entry being edited + -c, --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 + 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 () { + 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 () { + 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 - + 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 = ); + 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\" (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 () { + 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() { + 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 - + 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 - 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 ; + } +} +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 () { + $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 ; +} +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 () { $line++; last if /^ --/; } + # Slurp the rest... + local $/ = undef; + print O ; + + # 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 = ; +} + +# 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 () { + 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 index 0000000..f8a2328 --- /dev/null +++ b/scripts/debcheckout.pl @@ -0,0 +1,977 @@ +#!/usr/bin/perl -w +# +# debcheckout: checkout the development repository of a Debian package +# Copyright (C) 2007-2009 Stefano Zacchiroli +# +# 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 . +# + +# 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 [I] I [I] + +=item B [I] I [I] + +=item B B<--help> + +=back + +=head1 DESCRIPTION + +B retrieves the information about the Version Control System used +to maintain a given Debian package (the I 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 +directory; this can be overridden by providing the I argument. + +The information about where the repository is available is expected to be found +in B fields available in the source package record. For example, the vim +package exposes such information with a field like S, you can see it by grepping through +C. + +If more than one source package record containing B fields is available, +B 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=I. + +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 + +=over + +=item B<-a>, B<--auth> + +Work in authenticated mode; this means that for known repositories (mainly those +hosted on S) 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 will be used instead of +S. + +=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, B<--type> I + +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, B<--user> I + +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 + +I + +=over + +=item B<--git-track> I + +Specify a list of remote branches which will be set up for tracking +(as in S, 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 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 + +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 +(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 + +=head1 AUTHOR + +debcheckout and this manpage have been written by Stefano Zacchiroli + + +=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 + +# +# +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; +# + +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 = ) { + $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 = ) { + $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 = ; + 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 = ; + 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 = ) { + 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 <>', "$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 = ; + 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 index 0000000..858560c --- /dev/null +++ b/scripts/debclean.1 @@ -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 ; +modifications by Julian Gilbey . diff --git a/scripts/debclean.sh b/scripts/debclean.sh new file mode 100755 index 0000000..fa82018 --- /dev/null +++ b/scripts/debclean.sh @@ -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 index 0000000..799aeb2 --- /dev/null +++ b/scripts/debcommit.pl @@ -0,0 +1,849 @@ +#!/usr/bin/perl + +=head1 NAME + +debcommit - commit changes to a package + +=head1 SYNOPSIS + +B [B<--release>] [B<--release-use-changelog>] [B<--message=>I] [B<--noact>] [B<--diff>] [B<--confirm>] [B<--edit>] [B<--changelog=>I] [B<--all> | I] + +=head1 DESCRIPTION + +B generates a commit message based on new text in B, +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, B, B (mercurial), B, B (subversion), +B, B, B (arch), B. + +=head1 OPTIONS + +=over 4 + +=item B<-c> B<--changelog> I + +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 B<--message> I + +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 + +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 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 + +If this is set to I, then it is the same as the --no-strip-message +command line parameter being used. The default is I. + +=item B + +If this is set to I, then it is the same as the --sign-tags command +line parameter being used. The default is I. + +=item B + +If this is set to I, then it is the same as the --release-use-changelog +command line parameter being used. The default is I. + +=item B + +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 / B + +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 + +If only a single change is detected in the changelog, B 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 will then spawn an +editor so that the message may be fine-tuned before committing. + +=item B / B + +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 + +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 , 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=; + 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 () { + 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] "; + $_ = ; + 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() { + $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 , 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 + +=head1 SEE ALSO + +svnpath(1). + +=cut diff --git a/scripts/debdiff.1 b/scripts/debdiff.1 new file mode 100644 index 0000000..b6d65b0 --- /dev/null +++ b/scripts/debdiff.1 @@ -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 + and rewritten in Perl with many more features by +Julian Gilbey . 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 index 0000000..6da8162 --- /dev/null +++ b/scripts/debdiff.pl @@ -0,0 +1,1084 @@ +#! /usr/bin/perl -w + +# Original shell script version: +# Copyright 1998,1999 Yann Dirson +# Perl version: +# Copyright 1999,2000,2001 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, 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 , +based on original code which is copyright 1998,1999 by +Yann Dirson +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() { + 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 () { + 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() { + 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( ) { + 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() { + 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 index 0000000..534f689 --- /dev/null +++ b/scripts/debi.1 @@ -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 +. The now-defunct script \fBdebit\fR was +originally written by James R. Van Zandt . They +have been moulded into one script together with \fBdebc\fR(1) and +parts extensively modified by Julian Gilbey . diff --git a/scripts/debi.pl b/scripts/debi.pl new file mode 100755 index 0000000..cb1b903 --- /dev/null +++ b/scripts/debi.pl @@ -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 +# Copyright Christoph Lameter +# The now defunct debit originally by Jim Van Zandt +# Copyright 1999 Jim Van Zandt +# Modifications by Julian Gilbey , 1999-2003 +# 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 . + +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 Search for .changes file made for Debian build + -t Search for .changes file made for GNU 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 Search for changes file made for Debian build + -t Search for changes file made for GNU 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 , +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 index 0000000..4a4d48f --- /dev/null +++ b/scripts/debpkg-wrapper.c @@ -0,0 +1,17 @@ +/* Wrapper for debpkg so that we don't have to use suidperl any longer + (it's deprecated as of Perl 5.8.0) */ + +#include +#include +#include +#include + +#define REAL_PATH "/usr/share/devscripts/debpkg" + +int main(int ac, char **av) +{ + execv(REAL_PATH, av); + + fprintf(stderr, "Error executing debpkg: %s\n", strerror(errno)); + return 1; +} diff --git a/scripts/debpkg.1 b/scripts/debpkg.1 new file mode 100644 index 0000000..77df022 --- /dev/null +++ b/scripts/debpkg.1 @@ -0,0 +1,25 @@ +.TH DEBPKG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +debpkg \- wrapper for dpkg +.SH SYNOPSIS +\fBdebpkg\fP \fIdpkg-options\fP +.SH DESCRIPTION +\fBdebpkg\fR simply invokes \fBdpkg\fP(1) but first becomes superuser +so that \fBdpkg\fP is able to install and remove packages. It also +cleans the environment and resets PATH to a sane default: +"/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11" so that local versions of +programs are not run by accident. +.SH REQUIREMENTS +\fBdebpkg\fP must be given superuser privileges in some way to +function properly. \fBAccess to debpkg with those privileges is the +same as having superuser access to your machine.\fP \fBdebpkg\fP will +abort if it finds that it neither being run by root nor setuid root. +.PP +The \fBdevscripts\fR package has been designed to allow \fBdebpkg\fR +to be made setuid root. This works by using a compiled wrapper +script, which means that \fBsuidperl\fR is not required. See +\fBdpkg-statoverride\fR(8) if you wish to make this program setuid +root. \fBsudo\fR or \fBsuper\fR could also conceivably be used. +.SH AUTHOR +Christoph Lameter ; minor modifications made by +Julian Gilbey . diff --git a/scripts/debpkg.pl b/scripts/debpkg.pl new file mode 100755 index 0000000..9fcee6b --- /dev/null +++ b/scripts/debpkg.pl @@ -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 . + + +# 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 index 0000000..521c52d --- /dev/null +++ b/scripts/debrelease.1 @@ -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 , based on the original \fBrelease\fR +script by Christoph Lameter . diff --git a/scripts/debrelease.sh b/scripts/debrelease.sh new file mode 100755 index 0000000..c7b9d84 --- /dev/null +++ b/scripts/debrelease.sh @@ -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 +# Based on the original 'release' script by +# Christoph Lameter +# +# 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 . + +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 Search for .changes file made for Debian build + -t Search for .changes file made for GNU 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 </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 index 0000000..b41e5a3 --- /dev/null +++ b/scripts/debrsign.1 @@ -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 and is +copyright under the GPL, version 2 or later. diff --git a/scripts/debrsign.sh b/scripts/debrsign.sh new file mode 100755 index 0000000..5133dae --- /dev/null +++ b/scripts/debrsign.sh @@ -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 Sign using key of +# -k The PGP/GPG key ID to use; overrides -m +# -p 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 Debian architecture +# -t 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 , +# 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 . + +# 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 Sign using key of (takes precedence over -m) + -m The same as -e + -k The key to use for signing + -S Use changes file made for source-only upload + -a Use changes file made for Debian target architecture + -t Use changes file made for GNU target architecture + --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 index 0000000..39c5c21 --- /dev/null +++ b/scripts/debsign.1 @@ -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 and is +copyright under the GPL, version 2 or later. diff --git a/scripts/debsign.sh b/scripts/debsign.sh new file mode 100755 index 0000000..52bf7e5 --- /dev/null +++ b/scripts/debsign.sh @@ -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 Sign using key of (takes precedence over -m) +# -m Sign using key of +# -k The PGP/GPG key ID to use; overrides -m +# -p 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 Debian architecture +# -t 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 . + +# 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 The key to use for signing + -p The command to use for signing + -sgpg The sign-command is called like GPG + -spgp The sign-command is called like PGP + -e Sign using key of (takes precedence over -m) + -m The same as -e + -S Use changes file made for source-only upload + -a Use changes file made for Debian target architecture + -t Use changes file made for GNU target architecture + --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 + 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 index 0000000..c7b249f --- /dev/null +++ b/scripts/debsnap.1 @@ -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\-\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 + +.SH COPYRIGHT +Copyright \(co 2010 David Paleino + +Permission is granted to copy, distribute and/or modify this document under +the terms of the GNU General Public License, Version 3 or (at your option) +any later version published by the Free Software Foundation. + +On Debian systems, the complete text of the GNU General Public License can +be found in \fI/usr/share/common\-licenses/GPL\fP. + +.SH BUGS +.SS Reporting bugs +The program is part of the devscripts package. Please report bugs using +`\fBreportbug devscripts\fP` + diff --git a/scripts/debsnap.pl b/scripts/debsnap.pl new file mode 100755 index 0000000..eb4ee46 --- /dev/null +++ b/scripts/debsnap.pl @@ -0,0 +1,253 @@ +#!/usr/bin/perl -w + +# Copyright © 2010, David Paleino , +# +# 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 . + +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 . +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 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 , + --destdir= Directory for retrieved packages + Default is ./source- + -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 index 0000000..40d41c2 --- /dev/null +++ b/scripts/debuild.1 @@ -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../__.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 ' \-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 +. The current version has been written by Julian +Gilbey . diff --git a/scripts/debuild.pl b/scripts/debuild.pl new file mode 100755 index 0000000..7c2a786 --- /dev/null +++ b/scripts/debuild.pl @@ -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 +# +# 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 . + +# We will do simple option processing. The calling syntax of this +# program is: +# +# debuild [] binary|binary-arch|binary-indep|clean ... +# or +# debuild [] [] +# [--lintian-opts ] +# +# 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 [] 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=, -r + Command used to become root if $progname + not setuid root; default=fakeroot + + --preserve-envvar=, -e + Preserve environment variable + + --preserve-env Preserve all environment vars (except PATH) + + --set-envvar==, -e= + Set environment variable to + + --prepend-path= Prepend 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 [] [] + [--lintian-opts ] + 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 , +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 = ; + 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 = ; + 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 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 () { + 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 = ; + 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 = ; + 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 = ; + 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"; + ; + } + + 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 index 0000000..c5a8b41 --- /dev/null +++ b/scripts/desktop2menu.pl @@ -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 +# Modifications by Adam D. Barratt +# Copyright 2007 Sune Vuorela +# Modifications Copyright 2007 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 + +desktop2menu - create a menu file skeleton from a desktop file + +=head1 SYNOPSIS + +B B<--help|--version> + +B I [I] + +=head1 DESCRIPTION + +B 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 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 . It +was modified by Adam D. Barratt 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 with modifications by Adam D. Barratt + + +=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 . +Modifications copyright (C) 2007 by Adam D. Barratt + +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 index 0000000..75044fe --- /dev/null +++ b/scripts/devscripts.1.in @@ -0,0 +1,30 @@ +.TH DEVSCRIPTS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +devscripts \- scripts to ease the lives of Debian developers +.SH DESCRIPTION +The \fBdevscripts\fR package provides a collection of scripts which +may be of use to Debian developers and others wishing to build Debian +packages. For a summary of the available scripts, please see the file +\fI/usr/share/doc/devscripts/README.gz\fR, and for full details, please +see the individual manpages. They are contributed by multiple +developers; for details of the authors, please see the code or +manpages. + +Also, the directory \fI/usr/share/doc/devscripts/examples\fR contains +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 index 0000000..cfe7757 --- /dev/null +++ b/scripts/devscripts.conf.5 @@ -0,0 +1,60 @@ +.TH DEVSCRIPTS.CONF 5 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +devscripts.conf \- configuration file for the devscripts package +.SH DESCRIPTION +The \fBdevscripts\fR package provides a collection of scripts which +may be of use to Debian developers and others wishing to build Debian +packages. Many of these have options which can be configured on a +system-wide and per-user basis. +.PP +Every script in the \fBdevscripts\fR package which makes use of values +from these configuration files describes the specific settings +recognised in its own manpage. (For a list of the scripts, either see +\fI/usr/share/doc/devscripts/README.gz\fR or look at the output of +\fIdpkg \-L devscripts | grep /usr/bin\fR.) +.PP +The two configuration files are \fI/etc/devscripts.conf\fR for +system-wide defaults and \fI~/.devscripts\fR for per-user settings. +They are written with \fBbash\fR(1) syntax, but should only have +comments and simple variable assignments in them; they are both +sourced (if present) by many of the \fBdevscripts\fR scripts. +Variables corresponding to simple switches should have one of the +values \fIyes\fR and \fIno\fR; any other setting is regarded as +equivalent to the default setting. +.PP +All variable names are written in uppercase, and begin with the script +name. Package-wide variables begin with "DEVSCRIPTS", and are listed +below, as well as in the relevant manpages. +.PP +For a list of all of the available options variables, along with their +default settings, see the example configuration file +\fI/usr/share/doc/devscripts/devscripts.conf.ex\fR. This is copied to +\fI/etc/devscripts.conf\fR when the \fBdevscripts\fR package is first +installed. Information about configuration options introduced in +newer versions of the package will be appended to +\fI/etc/devscripts.conf\fR when the package is upgraded. +.PP +Every script which reads the configuration files can be forced to +ignore them by using \fB\-\-no-conf\fR as the \fIfirst\fR command-line +option. +.SH "PACKAGE-WIDE VARIABLES" +The currently recognised package-wide variables are: +.TP +.BR DEVSCRIPTS_CHECK_DIRNAME_LEVEL ", " DEVSCRIPTS_CHECK_DIRNAME_REGEX +These 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 . diff --git a/scripts/dget.pl b/scripts/dget.pl new file mode 100755 index 0000000..d69e4ac --- /dev/null +++ b/scripts/dget.pl @@ -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 +# Modifications Copyright (C) 2005-06 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, 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 . +Modifications copyright 2005-06 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. +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 [I] I ... + +=item B [I] I[=I] + +=back + +=head1 DESCRIPTION + +B downloads Debian packages. In the first form, B fetches +the requested URLs. If this is a .dsc or .changes file, then B +acts as a source-package aware form of B: it also fetches any +files referenced in the .dsc/.changes file. The downloaded source is +then checked with B and, if successful, unpacked by +B. + +In the second form, B downloads a I package (i.e., a +I<.deb> file) from the Debian mirror configured in +/etc/apt/sources.list(.d). Unlike B, 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, +you will need to have configured B to use a packages file for +I/I). + +Before downloading files listed in .dsc and .changes files, and before +downloading binary packages, B 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 also +looks for matching files in I 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. Download backends +used are B and B, looked for in that order. + +B was written to make it easier to retrieve source packages from +the web for sponsor uploads. For checking the package with +B, the last binary version is available via B +I, the last source version via B I. + +=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/B non-error output. + +=item B<-d>, B<--download-only> + +Do not run B on the downloaded source package. This can +only be used with the first method of calling B. + +=item B<-x>, B<--extract> + +Run B 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. + +=item B<-u>, B<--allow-unauthenticated> + +Do not attempt to verify the integrity of downloaded source packages +using B. + +=item B<--build> + +Run B on the downloaded source package. + +=item B<--path> DIR[:DIR...] + +In addition to I, B 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 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 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. 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 I should be implemented in B. + +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 . +Modifications are Copyright (C) 2005-06 by Julian Gilbey . + +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(1), B(1), B(1), B(1), B(1). diff --git a/scripts/diff2patches.1 b/scripts/diff2patches.1 new file mode 100644 index 0000000..bd91637 --- /dev/null +++ b/scripts/diff2patches.1 @@ -0,0 +1,50 @@ +.TH "diff2patches" "1" "" "Raphael Geissert " "" +.SH "NAME" +.LP +diff2patches \- Extract non\-debian/ patches from .diff.gz files +.SH "SYNTAX" +.LP +diff2patches \fI\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 diff --git a/scripts/diff2patches.sh b/scripts/diff2patches.sh new file mode 100755 index 0000000..a26964c --- /dev/null +++ b/scripts/diff2patches.sh @@ -0,0 +1,91 @@ +#!/bin/bash -e + +#################### +# Copyright (C) 2007, 2008 by Raphael Geissert +# +# 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 . +# +# 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 index 0000000..b7af2e0 --- /dev/null +++ b/scripts/dpkg-buildpackage-snapshot @@ -0,0 +1,267 @@ +#!/bin/sh + +set -e + +version="1.13.17"; # This line modified by Makefile + +progname="`basename \"$0\"`" +usageversion () { + cat >&2 < + -p + -d do not check build dependencies and conflicts + -D check build dependencies and conflicts + -k 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 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 set GNU system type } passed to dpkg-architecture + -v changes since version } + -m maintainer for package is } + -e maintainer for release is } only passed + -C changes are described in } 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[] ignore diffs of files matching regex } only passed + -I 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 index 0000000..5cae524 --- /dev/null +++ b/scripts/dpkg-depcheck.1 @@ -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 . +Modifications copyright 2002,2003 Julian Gilbey . +\fBdpkg-depcheck\fR is free software, covered by the GNU General +Public License, version 2 or (at your option) any later version, +and you are welcome to change it and/or distribute copies of it under +certain conditions. There is absolutely no warranty for +\fBdpkg-depcheck\fR. diff --git a/scripts/dpkg-depcheck.pl b/scripts/dpkg-depcheck.pl new file mode 100755 index 0000000..7b99f59 --- /dev/null +++ b/scripts/dpkg-depcheck.pl @@ -0,0 +1,552 @@ +#! /usr/bin/perl -w + +# Copyright Bill Allombert 2001. +# Modifications copyright 2002-2005 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 . + +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 +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] +Run and then output packages used to do this. +Options: + Which packages to report: + -a, --all Report all packages used to run + -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 + instead of a temporary file + -I, --strace-input=FILE Get strace output from FILE instead of tracing + ; 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 2001. +Modifications copyright 2002, 2003 Julian Gilbey +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 () { + # 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 index 0000000..2f2f321 --- /dev/null +++ b/scripts/dpkg-genbuilddeps.1 @@ -0,0 +1,40 @@ +.TH DPKG-GENBUILDDEPS 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +dpkg-genbuilddeps \- generate a list of packages used to build this package +.SH SYNOPSIS +\fBdpkg-genbuilddeps\fR [\fIarg\fR ...] +.SH DESCRIPTION +This program is a wrapper around \fBdpkg-depcheck\fR(1). It should be +run from the top of a Debian build tree. It calls +\fBdpkg-buildpackage\fR with any arguments given on the command line, +and by tracing the execution of this, it determines which +non-essential packages were used during the package building. This +can be useful in determining what the \fIBuild-Depends\fR control +fields should contain. It does not determine which packages were used +for the arch independent parts of the build and which for the arch +dependent parts, not does it attempt to determine which versions of +packages are required. It should be able to run under \fBfakeroot\fR +rather than being run as root, as \fBfakeroot dpkg-genbuilddeps\fR, or +\fBdpkg-genbuilddeps \-rfakeroot\fR. +.PP +This program requires the build-essential package to be installed. If +it is not, please use \fBdpkg-depcheck\fR directly, with a command +such as +.nf + dpkg-depcheck \-\-all dpkg-buildpackage \-us \-uc \-b \-rfakeroot ... +.fi +All this program itself does is essentially to run the command: +.nf + dpkg-depcheck \-b dpkg-buildpackage \-us \-uc \-b \-rfakeroot [arg ...] +.fi +.SH "SEE ALSO" +.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 +. The current version is a simple wrapper around +\fBdpkg-depcheck\fR written by Bill Allombert . +This manual page was written by Julian Gilbey . diff --git a/scripts/dpkg-genbuilddeps.sh b/scripts/dpkg-genbuilddeps.sh new file mode 100755 index 0000000..858cade --- /dev/null +++ b/scripts/dpkg-genbuilddeps.sh @@ -0,0 +1,40 @@ +#! /bin/bash -e + +PROGNAME=`basename $0` + +if [ $# -gt 0 ]; then + case $1 in + -h|--help) + cat < ...] +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 index 0000000..cc5849d --- /dev/null +++ b/scripts/dscverify.1 @@ -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 +and posted on the debian-devel@lists.debian.org mailing list, +with several modifications by Julian Gilbey . diff --git a/scripts/dscverify.pl b/scripts/dscverify.pl new file mode 100755 index 0000000..35f5a7b --- /dev/null +++ b/scripts/dscverify.pl @@ -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 +# Modifications copyright 1999,2000,2002 Julian Gilbey +# 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 . + +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 + Add 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 +Modifications are copyright 1999, 2000, 2002 Julian Gilbey +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 $/; }; + 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 index 0000000..1f6ee43 --- /dev/null +++ b/scripts/getbuildlog.1 @@ -0,0 +1,42 @@ +.TH GETBUILDLOG 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +getbuildlog \- download build logs from Debian auto\-builders +.SH SYNOPSIS +\fBgetbuildlog\fR \fIpackage\fR +[\fIversion\-pattern\fR] +[\fIarchitecture\-pattern\fR] +.SH DESCRIPTION +\fBgetbuildlog\fR downloads build logs of \fIpackage\fR from Debian +auto\-builders. It downloads build logs of all versions and for all +architectures if \fIversion\-pattern\fR and \fIarchitecture\-pattern\fR are +not specified or empty, otherwise only build logs whose versions match +\fIversion-pattern\fR and build logs whose architectures match +\fIarchitecture-pattern\fR will be downloaded. The version and architecture +patterns are interpreted as extended regular expressions as described in +\fBgrep\fR(1). +.PP +If \fIversion-pattern\fR is "last" then only the logs for the most +recent version of \fIpackage\fR found on buildd.debian.org will be +downloaded. +.PP +If \fIversion-pattern\fR is "last-all" then the logs for the most recent +version found on each build log index will be downloaded. +.SH OPTIONS +.TP +\fB\-h\fR, \fB\-\-help\fR +Show usage information and examples. +.TP +\fB\-V\fR, \fB\-\-version\fR +Show version and copyright information. +.SH EXAMPLES +.TP +getbuildlog hello 2\\.2\-1 amd64 +Download amd64 build log for hello version 2.2\-1. +.TP +getbuildlog glibc "" mips.* +Download mips(el) build logs of all glibc versions. +.TP +getbuildlog wesnoth .*bpo.* +Download all build logs of backported wesnoth versions. +.SH AUTHOR +Written by Frank S. Thomas . diff --git a/scripts/getbuildlog.sh b/scripts/getbuildlog.sh new file mode 100644 index 0000000..3f7963f --- /dev/null +++ b/scripts/getbuildlog.sh @@ -0,0 +1,142 @@ +#!/bin/sh +# +# getbuildlog: download package build logs from Debian auto-builders +# +# Copyright © 2008 Frank S. Thomas +# +# 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 < [] [] + Downloads build logs of from Debian auto-builders. + If or are given, only build logs + whose versions and architectures, respectively, matches the given patterns + are downloaded. + + If is "last" then only the logs for the most recent + version of found on buildd.debian.org will be downloaded. + + If 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 </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 index 0000000..a03ae87 --- /dev/null +++ b/scripts/grep-excuses.1 @@ -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 . 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 ; +modifications by Julian Gilbey . diff --git a/scripts/grep-excuses.pl b/scripts/grep-excuses.pl new file mode 100755 index 0000000..67f0b6f --- /dev/null +++ b/scripts/grep-excuses.pl @@ -0,0 +1,235 @@ +#! /usr/bin/perl -w +# Grep debian testing excuses file. +# +# Copyright 2002 Joey Hess +# Small mods Copyright 2002 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 . + +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] [|] + Grep the Debian update_excuses file to find out about the packages + of or . 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 . 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 , +and modifications are copyright 2002 by Julian Gilbey +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 () { + if (! $mainlist) { + # Have we found the start of the actual content? + next unless /^\s*
    \s*$/; + $mainlist=1; + next; + } + # Have we reached the end? + if (! $sublist and m%
%) { + $mainlist=0; + next; + } + next unless $mainlist; + # Strip hyperlinks + my $saveline=$_; + s%]*>%%g; + s%%%g; + s%>%>%g; + s%<%<%g; + # New item? + if (! $sublist and /^\s*
  • /) { + s%
  • %%; + $item = $_; + } + elsif (! $sublist and /^\s*
      /) { + $sublist=1; + } + elsif ($sublist and m%
    %) { + $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
  • tags + $item =~ s%
  • %\n %g; + print $item; + } + } + elsif ($sublist and /^\s*
  • /) { + s%
  • % %; + $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 index 0000000..bdc330e --- /dev/null +++ b/scripts/libvfork.c @@ -0,0 +1,8 @@ +#include +#include + +#undef vfork + +pid_t vfork(void){ + return fork(); +} diff --git a/scripts/licensecheck.pl b/scripts/licensecheck.pl new file mode 100755 index 0000000..7d8140c --- /dev/null +++ b/scripts/licensecheck.pl @@ -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 . + +=head1 NAME + +licensecheck - simple license checker for source files + +=head1 SYNOPSIS + +B B<--help|--version> + +B [B<--no-conf>] [B<--verbose>] [B<--copyright>] +[B<-l|--lines=N>] [B<-i|--ignore=regex>] [B<-c|--check=regex>] +[B<-r|--recursive>] I + +=head1 DESCRIPTION + +B 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 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 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 + +If this is set to I, then it is the same as the --verbose command +line parameter being used. The default is I. + +=item B + +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 , +all rights reserved; based on a script of the same name from the KDE +SDK, which is copyright by . +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 + +=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 () { + 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 () { + 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 ; based +on a script of the same name from the KDE SDK by . + +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 index 0000000..824df4f --- /dev/null +++ b/scripts/list-unreleased.1 @@ -0,0 +1,23 @@ +.TH LIST-UNRELEASED 1 "Debian Utilities" "DEBIAN" \" -*- nroff -*- +.SH NAME +list-unreleased \- display UNRELEASED packages +.SH SYNOPSIS +\fBlist-unreleased\fR [\fIarg\fR ...] [\fIpath\fR ...] +.SH DESCRIPTION +Searches for packages whose changelogs indicate there are pending changes +(UNRELEASED) and either lists them or displays the relevant changelog entry. +.PP +By default it searches for packages under the current directory. If a path +is specified it will look for packages under that directory instead. +.SH OPTIONS +.TP +.B -c +Display pending changes. +.TP +.B -R +Don't recurse into subdirectories looking for packages. +.SH "SEE ALSO" +.BR debchange (1) +.SH AUTHOR +\fBlist-unreleased\fR was written by Frans Pop . +This manual page was written by Joey Hess . diff --git a/scripts/list-unreleased.sh b/scripts/list-unreleased.sh new file mode 100755 index 0000000..7a1466c --- /dev/null +++ b/scripts/list-unreleased.sh @@ -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 , 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 index 0000000..7c2bec8 --- /dev/null +++ b/scripts/manpage-alert.1 @@ -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 and Adam D. Barratt + (who also wrote this manpage) for the +devscripts package. +.P +This manpage and the associated program are licensed under the terms of +the GPL, version 2 or later. + diff --git a/scripts/manpage-alert.sh b/scripts/manpage-alert.sh new file mode 100755 index 0000000..0e2acac --- /dev/null +++ b/scripts/manpage-alert.sh @@ -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 <&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 index 0000000..e125e31 --- /dev/null +++ b/scripts/mass-bug.pl @@ -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 +# +# 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 . + +=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 examines the B 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 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\"