diff options
author | Manoj Srivastava <srivasta@debian.org> | 2014-05-26 16:16:43 -0700 |
---|---|---|
committer | Manoj Srivastava <srivasta@debian.org> | 2014-05-26 16:16:43 -0700 |
commit | 773de339676ee789c45741a195e1005bdbc8595e (patch) | |
tree | cc6b650a76b717b20a829e373819df1bb805cf27 |
ucf (3.0030) unstable; urgency=low
* Updated german translations. (Closes: #748975).
* Bug fix: #748975: "[L10N,DE] ucf: updated german debconf translation",
thanks to Holger Wansing
# imported from the archive
50 files changed, 9445 insertions, 0 deletions
@@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA + 02111-1307, 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 + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..982c380 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,211 @@ +2008-02-21 Manoj Srivastava <srivasta@debian.org> + + * ucfq (process): + srivasta@debian.org--lenny/ucf--devel--3.0--patch-2 Niko + Tyni says ucfq /path/to/file never gives any output. It + looks like the problem is that ^/ is matched twice with + the global option (m//g) on the filename in + ucf::process(), so the second one fails looking for the + next match. I don't see the need for global match here, + and removing the /g fixesthis for me. + (report): srivasta@debian.org--lenny/ucf--devel--3.0--patch-2 + Major changes to ensure that the modified column + actually contains a valid value. This whole script needs + a rewrite. + +2007-11-30 Manoj Srivastava <srivasta@debian.org> + + * ucf (newsum): + srivasta@debian.org--lenny/ucf--devel--3.0--patch-1 For + "keep current" and "threeway merge", ucf expects answers + from debconf which differ from what is specified in the + template master. Frans Pop suggested using the Choices-C + feature of debconf, which is relatively new, but defines + a fixed alias for each option which Debconf will then + use in db_get and db_set operations -- so no more + matching the template in the code. + +2007-09-19 Manoj Srivastava <srivasta@debian.org> + + * ucf (choice_keep_current): + srivasta@debian.org--lenny/ucf--devel--3.0--base-0 + Change the name to fit the changed template + +2007-05-05 Manoj Srivastava <srivasta@debian.org> + + * ucf (show_diff): + srivasta@debian.org--lenny/ucf--devel--2.0--patch-1 + Users using a Graphical frontend are surprised when the + display apparently just blocks when they ask to see a + diff (or 3-way diff) of the configuration file being + handled, when actually the diff is displayed on the + terminal window ucf was run on. Until the debconf-escape + utility and the escape CAPB support, db_subst ran into + newline and line length issues. Patch from Michael Vogt. + +2007-04-17 Manoj Srivastava <srivasta@debian.org> + + * ucf.1: srivasta@debian.org--lenny/ucf--devel--2.0--base-0 + Document that ucf now tries to preserve owner/permission + bits for the file. + + * ucf: srivasta@debian.org--lenny/ucf--devel--2.0--base-0 As far + as possible, preserve file attributes like ownership and + permission by using cp -pf instead of just cp -f. + +2007-02-25 Manoj Srivastava <srivasta@debian.org> + + * ucfr (safe_conf_file): + srivasta@debian.org--etch/ucf--devel--2.0--versionfix-4 + Reincorporate the fix from the NMU. Add a space before + the echo. + +2007-02-24 Manoj Srivastava <srivasta@debian.org> + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-3 + Add documentation clarifying the primary use for ucf. + + * ucfr (safe_conf_file): + srivasta@debian.org--etch/ucf--devel--2.0--versionfix-2 + Add $progname: prefix to all error messages. + +2007-01-18 Manoj Srivastava <srivasta@debian.org> + + * ucfr.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1 + Emphasize that the full path to the configuration file + is expected. + + * ucfq.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1 + Ditto. + + * ucfr (safe_conf_file): + srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1 + Issue a diagnostic, and exit gracefully if the + registration request has not provided a full path to the + configuration file. For lenny, the graceful exit shall + be changed into die with a error message. + + * ucfq (process): + srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1 + Issue a diagnostic, and exit gracefully if the query has + not provided a full path to the configuration file. For + lenny, the graceful exit shall be changed into die with + a error message. + + * ucf: srivasta@debian.org--etch/ucf--devel--2.0--patch-20 Typo + fix. + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-20 Typo + fix. + +2006-11-16 Manoj Srivastava <srivasta@debian.org> + + * ucfr.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo + fixes: cofiguration -> configuration, asociating -> + associating, mutiple -> multiple + + * ucfq.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo + Fix: modfied -> modified + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo + fix: "witht he" -> "with the" + +2006-10-23 Manoj Srivastava <srivasta@debian.org> + + * ucf (TEMP): srivasta@debian.org--etch/ucf--devel--2.0--patch-17 + Use readlink to canonicalize the path names presented to + ucf. This ensures that we keep track of information + about the correct file in ucf, even if it is referred to + differently (like, multiple ///s, or a/../a/) + + * ucfq: srivasta@debian.org--etch/ucf--devel--2.0--patch-16 The + package name is ucf, not Ucf. Fixes the usage help + output. + +2006-09-11 Manoj Srivastava <srivasta@debian.org> + + * ucf.1 (needed): + srivasta@debian.org--etch/ucf--devel--2.0--patch-15 Typo fix. + +2006-08-20 Manoj Srivastava <srivasta@debian.org> + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-14 + Document various extensions optionally used by ucf to + store copies of versions of configuration files ucf is + working with. + +2006-06-16 Manoj Srivastava <srivasta@debian.org> + + * ucf (safe_dest_file): + srivasta@debian.org--etch/ucf--devel--2.0--patch-12 + Improve the handling of finding a sensible pager. This + now handles a messed up /etc/alternatives/paper + setting. Also included sensible pager as an + alternative, and fall back to /bin/more if + needed. Also, allow for readlink failures. + +2006-04-11 Manoj Srivastava <srivasta@debian.org> + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-8 Added + documentation for the --state-dir option. + + * ucfr.1: Documentation for the new command ucfr + + * ucfr: New file. Associates, and disassociates, a package name + with configuration files. + + * Makefile (check): + srivasta@debian.org--etch/ucf--devel--2.0--patch-8 Added + a check for ucfr + (install): + srivasta@debian.org--etch/ucf--devel--2.0--patch-8 + Install ucfr and manual page as well + + * ucf (NEW_SUFFIX): + srivasta@debian.org--etch/ucf--devel--2.0--patch-7 Added + new variables to hold the suffix we use todenote the + {maintainers, old, new} versions of a file. Used to be + dpkg-{dist,old,new}, now it is ucf-{dist,old,new}. + +2005-09-20 Manoj Srivastava <srivasta@debian.org> + + * ucf (newsum): srivasta@debian.org--etch/ucf--devel--2.0--patch-4 + Added support for side-by-side diffs, This is very + similar to doing a standard diff, apart from calling + sdiff instead (and change the option switches around as + needed. + +2005-09-01 Manoj Srivastava <srivasta@debian.org> + + * examples/postrm: + srivasta@debian.org--etch/ucf--devel--2.0--patch-2 only + use ucf if it is available + +2005-08-08 Manoj Srivastava <srivasta@debian.org> + + * ucf: srivasta@debian.org--etch/ucf--devel--2.0--patch-1 Add code + to determine the value of UCF_FORCE_CONFFMISS, looking + at the command line, env variable, config file, or + default (the default being unset). No command line + option is currently available, but the underpinning are + there. Replace the destination file, if missing, and iff + the variable is set. + + * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-1 + Document UCF_FORCE_CONFFMISS. This environment variable + is only applicable when the installed destination file + does not exist (perhaps due to user removal),and forces + ucf to recreate the missing file (the default behaviour + is to honor the users wishes and not recreate the + locally deleted file). + +2005-06-25 Manoj Srivastava <srivasta@debian.org> + + * ucf (safe_dest_file): + srivasta@debian.org--etch/ucf--devel--0.1--base-0 Well, + setting VERBOSE to 0 is the same as being quiet, + according to the man page. Unfortunately, the code + actually looked to see if VERBOSE was set (even if set + to 0). Now, we unset VERBOSE if the user had set it to + 0, making everyone happy. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0c8723a --- /dev/null +++ b/Makefile @@ -0,0 +1,72 @@ +############################ -*- Mode: Makefile -*- ########################### +## Makefile<ucf> --- +## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +## Created On : Tue Nov 18 22:00:27 2003 +## Created On Node : glaurung.green-gryphon.com +## Last Modified By : Manoj Srivastava +## Last Modified On : Sun Apr 16 16:32:23 2006 +## Last Machine Used: glaurung.internal.golden-gryphon.com +## Update Count : 6 +## Status : Unknown, Use with caution! +## HISTORY : +## Description : +## +############################################################################### +prefix = $(DESTDIR) +package = ucf + +ETCDIR = $(prefix)/etc +BINDIR = $(prefix)/usr/bin +DEBLIBDIR = $(prefix)/var/lib/$(package) +DEBDOCDIR = $(prefix)/usr/share/doc/$(package) +MANDIR = $(prefix)/usr/share/man/ +MAN1DIR = $(MANDIR)/man1 +MAN5DIR = $(MANDIR)/man5 + +# install commands +install_file := /usr/bin/install -p -o root -g root -m 644 +install_program := /usr/bin/install -p -o root -g root -m 755 +make_directory := /usr/bin/install -p -d -o root -g root -m 755 + +all build: check + +check: + bash -n ucf + bash -n ucfr + perl -wc ucfq + bash -n debian/ucf.preinst + bash -n debian/ucf.postinst + bash -n debian/ucf.postrm + +install: + $(make_directory) $(BINDIR) + $(make_directory) $(ETCDIR) + $(make_directory) $(MAN1DIR) + $(make_directory) $(MAN5DIR) + $(make_directory) $(DEBLIBDIR) + $(make_directory) $(DEBDOCDIR)/examples + $(install_program) ucf $(BINDIR) + $(install_file) ucf.1 $(MAN1DIR) + gzip -9fq $(MAN1DIR)/ucf.1 + $(install_program) ucfr $(BINDIR) + $(install_file) ucfr.1 $(MAN1DIR) + gzip -9fq $(MAN1DIR)/ucfr.1 + $(install_program) ucfq $(BINDIR) + $(install_file) ucfq.1 $(MAN1DIR) + gzip -9fq $(MAN1DIR)/ucfq.1 + $(install_program) lcf $(BINDIR) + $(install_file) lcf.1 $(MAN1DIR) + gzip -9fq $(MAN1DIR)/lcf.1 + $(install_file) ucf.conf.5 $(MAN5DIR) + gzip -9fq $(MAN5DIR)/ucf.conf.5 + $(install_file) ucf.conf $(ETCDIR) + $(install_file) debian/changelog $(DEBDOCDIR)/changelog + gzip -9frq $(DEBDOCDIR) +# make sure the copyright file is not compressed + $(install_file) debian/copyright $(DEBDOCDIR)/copyright + $(install_file) examples/postinst $(DEBDOCDIR)/examples/ + $(install_file) examples/postrm $(DEBDOCDIR)/examples/ + +clean distclean: + @echo nothing to do for clean + diff --git a/debian/ChangeLog b/debian/ChangeLog new file mode 100644 index 0000000..05ca07f --- /dev/null +++ b/debian/ChangeLog @@ -0,0 +1,84 @@ +2007-11-30 Manoj Srivastava <srivasta@debian.org> + + * control (Depends): + srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-5 + Update the dependency on debconf version, since we use + the Choices-C feature. + +2007-05-05 Manoj Srivastava <srivasta@debian.org> + + * templates.master (Template): + srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1 + Added a note (ucf/show_diff) to help showthe diff + between files. + + * templates (Template): + srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1 + Added Russian translation + + * control (Depends): + srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1 + Updated the version of the debconf dependency, since we + now use CAPB escape. Left in the debconf-2.0 as is, + since I am assuming anything that provides debconf-2.0 + should be a drop in replacement, or that should be + considered a bug. + +2006-11-16 Manoj Srivastava <srivasta@debian.org> + + * postrm (package_name): + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-30 + Only remove /var/lib/ucf/cache and stuff when it exists + during purge + +2006-04-11 Manoj Srivastava <srivasta@debian.org> + + * copyright: + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18 + Updated the years for copyright. + +2006-03-12 Manoj Srivastava <srivasta@debian.org> + + * postrm (package_name): + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-16 + it is -type f, not -type -f + +2006-03-05 Manoj Srivastava <srivasta@debian.org> + + * postrm (package_name): + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-15 + Make sure we get rid of all cached files also when + purged + +2006-01-23 Manoj Srivastava <srivasta@debian.org> + + * postrm (package_name): + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-14 + Also remove backups of hash files on purge + +2005-08-31 Manoj Srivastava <srivasta@debian.org> + + * templates (Template): + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-5 + Added Vietnamese translation. + + * po/vi.po: + srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-5 + Added new Vietnamese translation for UCF. + +2005-06-25 Manoj Srivastava <srivasta@debian.org> + + * templates (Template): + srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0 + Added polish translation + + * po/pl.po: srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0 + New translation + + * debian/postrm (package_name): + srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0 + Also remove /var/lib/ucf/cache if it is empty. The + problem was that since the cache directory existed, ucf + was leaving /var/lib/ucf behind on purge, which was + bad. Thanks to Lars Wirzenius for noticing. + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..2ed5083 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,1316 @@ +ucf (3.0030) unstable; urgency=low + + * Updated german translations. (Closes: #748975). + * Bug fix: #748975: "[L10N,DE] ucf: updated german debconf translation", + thanks to Holger Wansing + + -- Manoj Srivastava <srivasta@debian.org> Mon, 26 May 2014 16:16:43 -0700 + +ucf (3.0029) unstable; urgency=medium + + * When asking how to handle an upodate to a locally modified + configuration file, ucf does not tell the user where the new version + of the configuration file lives. This makes it hard to take action + when opening a new shell. This commit updates the debconf templates to + include that information. (Closes: #616486, #747295, #747299) + (Closes: #747310, #747312, #747335, #747346, #747371, #747450) + (Closes: #747533, #748148, #748178, #748371). + * ucf uses getopt(1) to process command line arguments. The debug + options take a an optional level. For short options, If the option has + an optional argument, it must be written directly after the option + character if present. For long options, the optional argument must be + written directly after the long option name, separated by `=', if + present. This is now documented in the manual page. + * Document that ucf --purge can be used to make ucf forget about the + state of the previous decisions for a configuration file, so that when + the package is updated or reinstalled, ucf will ask again about + disposition, (Closes: #566277). + * Bug fix #616486: "The start a shell option gives user no clue about + the location of maintainer version of config file", thanks to Robert + Luberda + * Bug fix #747295: "[INTL:sv] Swedish strings for ucf debconf", thanks + to Martin Bagge + * Bug fix #747299: "[l10n:eu] ucf 3.0028: updated Basque translation", + thanks to Iñaki Larrañaga Murgoitio + * Bug fix #747310: "[INTL:fr] French debconf templates translation + update", thanks to Christian Perrier + * Bug fix #747312: "[INTL:pt] Portuguese translation for debconf + messages (update)", thanks to Américo Monteiro + * Bug fix #747335: "[INTL:ru] Russian debconf templates translation + update", thanks to Yuri Kozlov + * Bug fix #747346: "[INTL:fi] Updated Finnish translation of the debconf + templates", thanks to Esko Arajärvivim Portuguese + * Bug fix #747371: "[INTL:ja] update Japanese debconf translation", + thanks to Kenshi Muto. + * Bug fix #747450: "[INTL:da] Danish translation of the debconf + templates ucf", thanks to Joe Dalton + * Bug fix #747533: "[INTL:sk] Slovak po-debconf translation", thanks to + Slavko + * Bug fix #566277: "no renewed question b/c changed config files", + thanks to arne anka + * Bug fix #748148: "[INTL:pl] Updated Polish debconf translation", + thanks to Michał Kułach + * Bug fix #748178: "[INTL:pt_BR] Brazilian Portuguese debconf templates + translation", thanks to Adriano Rafael Gomes + * Bug fix #748371: "[l10n] Updated Czech translation of ucf debconf + messages", thanks to Miroslav Kure + + -- Manoj Srivastava <srivasta@debian.org> Sat, 17 May 2014 16:00:42 -0700 + +ucf (3.0028) unstable; urgency=medium + + * Ack the NMU. + * Bug fix: "Should not claim files differ if $newsum and $destsum are + identical", thanks to Frank Küster (Closes: #633391). + * Differentiate between the file being registered in the registry and + the RE used to look it up. Account for the fact that the file being + registered might be a s symlink, so follow links for the + registry. Since registering symlinks is broken already, and we should + be registering files and not symlinks anyway. ucf already did follow + the symbolic links, it is only ucfr that needed changing. + * Bug fix: "database corruption if ucfr is used on symlinks instead of + files", thanks to Andreas Beckmann (Closes: #724457). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 26 Apr 2014 15:45:35 -0700 + +ucf (3.0027+nmu1) unstable; urgency=medium + + [ Andreas Beckmann ] + * Non-maintainer upload. + * Set urgency to medium for RC bugfix. + * Fix VCS-Git URL to not point to an outdated repository. + + [ Mathieu Parent ] + * Put the Cwd at the right place. (Closes: #711055) + + -- Andreas Beckmann <anbe@debian.org> Mon, 01 Jul 2013 02:59:15 +0200 + +ucf (3.0027) unstable; urgency=low + + * Use dpkg-query --control-path instead of hard-coding a path to our + debconf templates file, for compatibility with multiarch. The patch + had apparently gotten reverted somewhere. + * Now that wheezy has been released, moving to unstable. + + -- Manoj Srivastava <srivasta@debian.org> Sat, 18 May 2013 16:26:58 -0700 + +ucf (3.0026) experimental; urgency=low + + * Acknowledge NMUs. Thanks, bubulle. + * Bug fix: "starting a new shell fails from console", thanks to EmaRsk + (Closes: #574266). The fix was provided by Aaron Hope <asbestos@xemed.com> + * Bug fix: "$PAGER ignored", thanks to David Fries (Closes: #596452). + * Bug fix: "ucf fails when VERBOSE is set to 1 in /etc/ucf.conf", thanks + to Aljoscha Lautenbach (Closes: #577127). The same bug was also + repprted as "--verbose option changes return code", thanks to Frank + Küster (Closes: #631231). + * Bug fix: "Small typo in ucf help", thanks to Tomasz Muras + (Closes: #577582). + * Bug fix: "ucfr exits successfully despite syntax error", thanks to + Sven Joachim (Closes: #573455). + * Bug fix: "ucfr should collapse duplicate slashes in paths", thanks to + Olivier Berger (Closes: #638187). + * Bug fix: "should be tagged Multi-Arch: foreign", thanks to + hriase1@post-ist-da.de (Closes: #670711). + + -- Manoj Srivastava <srivasta@debian.org> Wed, 24 Apr 2013 03:10:05 -0700 + +ucf (3.0025+nmu3) unstable; urgency=low + + * Non-maintainer upload. + * No longer hardcode debconf templates file location + Closes: #615931 + * Fix pending l10n issues. Debconf translations: + - Slovak (Slavko). Closes: #639443 + - Polish (Michał Kułach). Closes: #661480 + + -- Christian Perrier <bubulle@debian.org> Thu, 05 Apr 2012 08:25:42 +0200 + +ucf (3.0025+nmu2) unstable; urgency=low + + * Non-maintainer upload. + * Fix pending l10n issues. Debconf translations: + - Brazilian Portuguese (Flamarion Jorge). Closes: #594786 + - Dutch; (Jeroen Schot). Closes: #622789 + + -- Christian Perrier <bubulle@debian.org> Fri, 15 Apr 2011 08:27:12 +0200 + +ucf (3.0025+nmu1) unstable; urgency=low + + * Non-maintainer upload. + * Fix pending l10n issues. Debconf translations: + - Italian (Luca Bruno). Closes: #559554 + - Catalan (Jordi Mallach). Closes: #588304 + - Danish (Joe Hansen). Closes: #588369 + - Portuguese (Américo Monteiro). Closes: #588980 + - Spanish (Javier Fernandez-Sanguino). Closes: #592174 + + -- Christian Perrier <bubulle@debian.org> Sat, 28 Aug 2010 08:55:44 +0200 + +ucf (3.0025) unstable; urgency=low + + * [ucf 39603a0] Added russian translation. + Bug fix: "[INTL:ru] Russian debconf templates translation update", + thanks to Yuri Kozlov (Closes: #551163). + * Bug fix: "[INTL:fr] French debconf templates translation update", + thanks to Christian Perrier (Closes: #551650). + * Bug fix: "[INTL:eu] ucf Basque translation", thanks to Piarres Beobide + (Closes: #552804). + * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to + Erik Schanze (Closes: #553398). + * Bug fix: "[INTL:gl] ucf debconf translation update", thanks to marce + (Closes: #554630). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 20 Nov 2009 14:48:08 -0600 + +ucf (3.0024) unstable; urgency=low + + * Bug fix: "[INTL:ja] updated Japanese debconf translation", thanks to + Kenshi Muto (Closes: #551080). + * Bug fix: "[INTL:sv] Swedish strings for ucf3 debconf", thanks to + Martin Bagge (Closes: #550869). + * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages", + thanks to Miroslav Kure (Closes: #550870). + * Bug fix: "[INTL:fi] Updated Finnish translation of the debconf + templates", thanks to Esko Arajärvi (Closes: #550878). + * Bug fix: "[INTL:vi] Vietnamese debconf templates translation update", + thanks to Clytie Siddall (Closes: #550944). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 15 Oct 2009 13:40:46 -0500 + +ucf (3.0023) unstable; urgency=low + + * Bug fix: "[INTL:vi] Vietnamese debconf templates translation update", + thanks to Clytie Siddall (Closes: #548014). + * Bug fix: "Missleading dialogue text", thanks to Christian Meyer + (Closes: #546711). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 13 Oct 2009 01:42:27 -0500 + +ucf (3.0022) unstable; urgency=low + + * Bug fix: "[INTL:ja] updated Japanese debconf translation", thanks to + Kenshi Muto (Closes: #544048). + * Bug fix: "[INTL:eu] ucf debconf templates Basque translation update", + thanks to Piarres Beobide (Closes: #544142). + * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages", + thanks to Miroslav Kure (Closes: #544326). + * Bug fix: "[INTL:sv] Swedish strings for ucf debconf", thanks to Martin + Bagge (Closes: #544595). + * Bug fix: "[INTL:ru] Russian debconf templates translation update", + thanks to Yuri Kozlov (Closes: #544735). + * Updated Catalan translation, thanks to Jordi Mallach Pérez + * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to + Erik Schanze (Closes: #546243). + * Bug fix: "[INTL:fr] French debconf templates translation update", + thanks to Christian Perrier (Closes: #546309). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 14 Sep 2009 10:35:59 -0500 + +ucf (3.0021) unstable; urgency=low + + * [f70b2c6]: Handle errors in three way merges This fix is one that + was first implemented in Ubuntu, and has only been lightly modified. + The problem was the handling of merge failures in three way merges, + ucf used to just pass the error through to the maintainer script, + and so a merge failure resulted in a maintainer script failure, + which could cascade in a upgrade. However, trapping the error, and + showing it via debconf, and then returning to the ucf debconf menu + allows users to resolve this issue as they please. This patch + implements that. + Bug fix: "three-way-merge errors cause upgrade pains", thanks to Steve + Langasek (Closes: #543593). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 27 Aug 2009 00:23:16 -0500 + +ucf (3.0020) unstable; urgency=low + + * [cdeb86b]: Sleep for 3 seconds after emitting warning + When there is no tty present (which means we cannot attach to the + keyboard), and there is no DISPLAY set, which means we cannopt fire + off another window, we cannot fork off a shell. This is not a bug, + really, but merely a reality. This patch sleeps for a couple of + seconds so that the error message we dump on STDERR can be read. + Bug fix: "ucf can't start subshell", thanks to Matthew Gabeler-Lee + (Closes: #543367). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 24 Aug 2009 13:47:48 -0500 + +ucf (3.0019) unstable; urgency=low + + * Disable invalid Italian translation that collides with the translation + for another string, thanks to Steve Langasek. This was pointed out by + an Ubuntu user, and the fix comes from Ubuntu. + Bug fix: "Italian translation fails to distinguish between two + options", thanks to Steve Langasek (Closes: #543161). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 22 Aug 2009 23:08:03 -0500 + +ucf (3.0018) unstable; urgency=low + + * Update the package priority, it is now standard, not optional. + * [d984e79]: Do not restore $@ until after sanity checks. + Bug fix: "Need exactly two arguments, got 3", thanks to Kurt Roeckx + (Closes: #520626). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Mar 2009 23:39:48 -0500 + +ucf (3.0017) unstable; urgency=low + + * [989de4e]: No longer use a non debconf method to prompt the user + Also, only run bash directly is the script has a terminal backend. + Failing that, if DISPLAY is set, try to start a terminal emulator. + If there is no tty and no DISPLAY, gibber and do nothing. + * [6e5ba1b]: Save and restore command line arguments after parsing + This way, when the script is called again under debconf, the command + line arguments are still around, and have not been eliminated during + parsing. And no, getopt was not to blame, ucf was nuking the + commandline itself. + Bug fix: "ucf was run from a maintainer script that uses debconf + [...]", thanks to Michael Prokop (Closes: #512832). + * [ea1c15d]: Stash any configuration file less than 25KB in size + Also, allow the three way merge options whenever there is a stashed + version of the file, whether or not the package maintainer has + explicitly asked for a three way capability. This way, are closer to + making three way capabilities the default, except for large + configuration files, where large is defined as 25 KB. + + -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Mar 2009 00:02:03 -0500 + +ucf (3.0016) unstable; urgency=low + + * [bd1dfcb]: Substitute the ucf/show_diff DIFF variable contents to + protect sensitive data. The previous fix said "reset diff question + after use so contents are not written to disk". Unfortunately this is + not enough (or even needed): the sensitive data is not stored in the + value of ucf/show_diff, but in the DIFF variable associated with it. + Bug fix: "ucf stores diff (of private files) in debconf (world readable)" + Closes: Bug#511893 Author: Niko Tyni <ntyni@debian.org> + * [f5cbbdf]: Show the differences on the first try + Until 3.0012, ucf/show_diff was reset just before showing it to the + user. This would unset the 'seen' flag properly. However, moving the + db_reset call after db_input made the latter skip the note on the + first time if the 'seen' flag was already set. To make things worse, + Debconf::ConfModule::finish() sets the 'seen' flag for all the + questions it has handled before exiting, so the flag was always true + after debconf exited. Simply unsetting the flag before db_input fixes + this. + Bug fix: "skips differences on the first try", thanks to Niko Tyni + (Closes: #514071). + * [debiandir:dce60af]: Update the location of the copyright file + Since I have not elected to license this under later versions of the + GPL, the license link in the copyright fle must change. + * Updated lintian overrides to shut lintian up. + + -- Manoj Srivastava <srivasta@debian.org> Fri, 06 Feb 2009 13:48:44 -0600 + +ucf (3.0015) unstable; urgency=low + + * [e63973f]: Use which, not type -a -p + + Although the 'type' command is used by /usr/bin/ucf, a 'type' built-in + command cannot be used by posh. It is safer to use '/bin/which' + contained in debianutils. + + Bug fix: "Shell which cannot use the type command", thanks to Jonny + Closes: Bug#513755 + + -- Manoj Srivastava <srivasta@debian.org> Tue, 03 Feb 2009 10:13:20 -0600 + +ucf (3.0014) unstable; urgency=low + + * [bd4d0af]: Short circuit if we are purging (no need to invoke debconf) + Also, since we do not have two arguments when we are purging, move the + new file processing to after the point where we exit in purge + mode. + Bug fix: "subprocess post-removal script returned error exit status + 20", thanks to Bastian Blank (Closes: #512903). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Jan 2009 11:05:52 -0600 + +ucf (3.0013) unstable; urgency=low + + * [99736cc]: Move the debconf stuff _after_ command line parsing + If it is done earlier, the DEBCONF_OK flag is not set yet. This is + majorly bad. Closes: Bug#512905 + Bug fix: "ucf was run from a maintainer script that uses debconf + [...]", thanks to Michael Prokop (Closes: #512832). + * [67e17f1]: Load confmodule to define db_* commands even when !DEBCONF_OK + It is OK to load confmodule, which allows db_* commands to be defined, + since this is not what was causing the previous failure. We should + not, however, try to load the template files, which _did_ actually + cause the failure. + Bug fix: "command not found", thanks to Michael Prokop (Closes: #512833). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Jan 2009 01:48:09 -0600 + +ucf (3.0012) unstable; urgency=low + + * [29fbb69]: reset diff question after use so contents are not written to disk + Debconf does not use world readable "temporary internal + files" as Manoj hypothesises. Data is only written to disk if it is + left in the debconf database when the frontend (ucf) exits. + Tightening the permissions on the debconf database would break + several things including use of debconf-show in reportbug. + + From 27b3c41c531016ffa506987bf4a856345992a204 + Mon Sep 17 00:00:00 2001 + From: Joey Hess <joey@gnu.kitenet.net> + Date: Wed, 21 Jan 2009 13:03:55 -0500 + Subject: [PATCH] reset diff question after use so contents are not + written to disk + Closes: Bug#511893 + * [9eb5118]: ucf uses debconf even if called without --debconf-ok and hangs + ucf, even if is called without --debconf-ok, uses debconf and + hangs if db_stop had been already called, since it tries to load + /usr/share/debconf/confmodule and loads the ucf debconf templates. + This is a minimal change, and just moves the test of DEBCONF_OK + earlier. Thanks to Robert Luberda for the report and suggested fix. + Closes: Bug#511031 + * [26a61b8]: Start issueing a diagnostic if ucf is forced to not use debconf + If ucf is called without the --debconf-ok switch, and + debconf is started, issue a diagnostic, and use old style promping + on the command line. This is a policy violation, and soon the non- + debconf prompting shall be removed. + * [3ce2104]: Rearrange code for readability, and add comment blocks + Signed-off-by: Manoj Srivastava <srivasta@debian.org> + + -- Manoj Srivastava <srivasta@debian.org> Fri, 23 Jan 2009 11:48:09 -0600 + +ucf (3.0011) unstable; urgency=low + + * [debiandir:8949365] Fix VCS-Browser URL + * [debiandir:ede9c73] Do not depend on cdebconf as an alternative + ucf relies heavily on debconf to do its job, and thus depends on it. Way + back when, it was told to me that we arte going to move to cdebconf, + which at some point will be the preferred way. In the meantime, to + facilitate the future transition, we should all depend on + debconf | cdebconf + to make life in the future easier. + + Now, as of version 3.005, ucf started using a feaure that has long been a + part of cdebconf, but was only ported to debconf in version 1.5.19, so + now ucf started depending on: + debconf (>= 1.5.19) | cdebconf + and this is where trouble beings. + + Suppose a machine running stable has cdebconf installed. It also has an + old version of debconf installed, say, one that is older than + 1.5.19. Since cdebconf was installed, the dependency requirements are + fully satisfied, so debconf was not updated. + + Now, ucf follows the instructions in debconf-devel(7) -- and that just + uses debconf, the older version which does nothave support for the + feature ucf needs. Boom, there goes the update. + + This is a grave bug. + + Bug fix: "ucf fails on db_x_loadtemplatefile", thanks to Wichert + Akkerman (Closes: #507043). + * Bug fix: "typo in changelog.gz ucf ", thanks to Paul Menzel (Closes: #497762). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 29 Nov 2008 11:43:53 -0600 + +ucf (3.0010) unstable; urgency=low + + * Fix a typo in the fix for the important bug in the last release, so + arguably this too is an important fix. This is a one character patch, + thanks to Niko Tyni. Closes: #497658 + + -- Manoj Srivastava <srivasta@debian.org> Wed, 03 Sep 2008 09:17:58 -0500 + +ucf (3.009) unstable; urgency=low + + * There was an issue that using the sdiff or diff options of ucf would + either error out, or would hang due to a communication snafu with + debconf. This fix handles exceptional sizes of diff output, correcting + both issues. This is an important bug fix meant for Lenny. + Closes: #486702, #490034 + * The current Catalan translation of UCF has a few usability problems, + namely the same translation for all 3 different diff options. The + result is that you are presented with the same option twice in many + cases, and can't tell the difference between them. This i18n update + fixes that issue. Closes: #497391 + * Updated Standards-Version: No changes. + + -- Manoj Srivastava <srivasta@debian.org> Tue, 02 Sep 2008 21:24:53 -0500 + +ucf (3.008) unstable; urgency=low + + * Updated ucf man page. Fixes: "ucf(1) incorrectly claims that ucf has + bug". Documentation bug. Closes: #496489 + * ucf: [INTL:fi] Updated Finnish translation of the debconf templates + Closes: #489174 + + -- Manoj Srivastava <srivasta@debian.org> Sat, 30 Aug 2008 03:19:44 -0500 + +ucf (3.007) unstable; urgency=low + + * Move to the new make -j friendly targets in debian/rules + * Bug fix: "man ucf typo: the times interaction", thanks to A. Costa + (Closes: #480064). + * Recorded the new VCS repository location for this package (moved to a + public git repository) + + -- Manoj Srivastava <srivasta@debian.org> Fri, 30 May 2008 10:47:51 -0500 + +ucf (3.006) unstable; urgency=low + + * Bug fix: "ucf: fails to catch conflicts on three-way merging", thanks + to Niko Tyni. Closes: #473473 + + -- Manoj Srivastava <srivasta@debian.org> Wed, 02 Apr 2008 22:13:21 -0500 + +ucf (3.005) unstable; urgency=low + + * Bug fix: "ucfq /path/to/file is broken", thanks to Niko Tyni. Applied + the patch provided in the report. Closes: #460868 + * Of course, this did not mean that the modified column was actually + filled with valid values: A number of places we were not using the + proper accessor methods, which added to the confusion. Fixed. + Closes: #464238 + * Add a new --debconf-template option to specify an alternate + caller-provided debconf template for the user prompt. Heavy lifting + done by Steve Langasek. This was apparently done to allow grub in + Ubuntu to manage partial file fragments. Closes: #456241. + * Use db_x_loadtemplatefile instead of debconf-loadtemplates for template + loading, and depend on debconf (>= 1.5.19) | cdebconf for the + implementation. Thanks to Steve Langasek. Closes: #424926 + * Drop the Recommends: debconf-utils now that it's no longer used. + * Instead of proceeding merrily on our way if the three way merge fails, + we now leave the dest file unchanged, leave the mess in the new file + (foo.ucf-new), tell the user about it, and abort the upgrade by + exiting with exit 3. We still psit out an error about conflicts. + Hopefully, this adequately resolves the bug. Closes: #456245 + + + -- Manoj Srivastava <srivasta@debian.org> Thu, 21 Feb 2008 01:10:57 -0600 + +ucf (3.004) unstable; urgency=high + + * For "keep current" and "threeway merge", ucf expects answers from + debconf which differ from what is specified in the template + master. Frans Pop suggested using the Choices-C feature of debconf, + which is relatively new, but defines a fixed alias for each option + which Debconf will then use in db_get and db_set operations -- so no + more matching the template in the code. He also kindly provided a + working patch. Updated versioned dependency on debconf to reflect the + need for a new version. Closes: #443179, #449274, #453084 + * Bug fix: "[INTL:fi] Finnish translation of the debconf templates", + thanks to Esko Arajärvi . Closes: Bug#448634 + + -- Manoj Srivastava <srivasta@debian.org> Fri, 30 Nov 2007 03:29:24 -0600 + +ucf (3.004~fjp) UNRELEASED; urgency=low + + * Use Choices-C in changeprompt templates to simplify interaction with + debconf. + + -- Frans Pop <fjp@debian.org> Mon, 01 Oct 2007 17:56:54 +0200 + +ucf (3.003) unstable; urgency=low + + * Bug fix: "ucf: expects the wrong answers from debconf", thanks to + Björn Steinbrink. For "keep current" and "threeway merge", ucf expects + answers from debconf which differ from what is specified in the + template master, which had been changed in the review process. This + fixes that bug; which made ucf mostly useless. (Closes: #443179). + + -- Manoj Srivastava <srivasta@debian.org> Wed, 19 Sep 2007 09:58:39 -0500 + +ucf (3.002) unstable; urgency=low + + * Bug fix: "Polish translation for ucf", thanks to Wojciech Zareba + (Closes: #430834). + * Bug fix: "ucf : [INTL:pt] Updated Portuguese translation for debconf + messages", thanks to Traduz - Portuguese Translation Team + (Closes: #439691). + * Bug fix: "ucf: [INTL:fr] French debconf templates translation update", + thanks to Christian Perrier (Closes: #432286). + * Bug fix: "Fwd: PACOTE: [INTL:pt] Updated Portuguese translation for + debconf messages", thanks to Miguel Figueiredo (Closes: #431621). + * Bug fix: "[INTL:ru] Russian debconf templates translation update", + thanks to Yuri Kozlov (Closes: #431261). + * Bug fix: "ucf: [INTL:sv] Swedish debconf templates translation + update", thanks to Daniel Nylander (Closes: #430540). + * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages", + thanks to Miroslav Kure (Closes: #430344). + * Bug fix: "ucf: [INTL:es] Updated spanish translation", thanks to + Javier Fernández-Sanguino Peña (Closes: #429942). + * Bug fix: "ucf: [INTL:ja] updated Japanese debconf translation", thanks + to Kenshi Muto (Closes: #429892). + * Bug fix: "[INTL:gl] Galician debconf template translation for ucf", + thanks to Jacobo Tarrio (Closes: #429831). + * Bug fix: "[INTL:eu] ucf debconf basque translation", thanks to Piarres + Beobide (Closes: #429816). + * Bug fix: "ucf: [INTL:da] Updated Danish debconf translation", thanks + to Claus Hindsgaul (Closes: #426787). + * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to + Erik Schanze (Closes: #431342). + * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to + Erik Schanze. I actually used th translations from the bug 431342 + (Closes: #428717). + * Bug fix: "ucf: [INTL:vi] Vietnamese debconf templates translation + update", thanks to Clytie Siddall (Closes: #429909). + * Bug fix: "ucf: [INTL:vi] Vietnamese debconf templates translation + update", thanks to Clytie Siddall (Closes: #426998). + * Bug fix: "ucf: [debconf_rewrite] Debconf templates review", thanks to + Christian Perrier (Closes: #426491). + + -- Manoj Srivastava <srivasta@debian.org> Wed, 19 Sep 2007 00:26:58 -0500 + +ucf (3.001) unstable; urgency=low + + * Bug fix: "ucf: [INTL:ru] Russian debconf template translation", thanks + to Yuri Kozlov (Closes: #421141). + * Bug fix: "ucf: should use debconf to display the diff results", thanks + to Gustavo Noronha Silva. Users using a Graphical frontend are + surprised when the display apparently just blocks when they ask to see + a diff (or 3-way diff) of the configuration file being handled, when + actually the diff is displayed on the terminal window ucf was run + on. Until the debconf-escape utility and the escape CAPB support, + db_subst ran into newline and line length issues. Patch from Michael + Vogt. (Closes: #325576). + * From Michael Vogt's patch: use a debconf note for the diff. updated + dependency of debconf to 1.4.72 (this is the version that supports the + "escape" capability) + * Left in the debconf-2.0 as is, since I am assuming anything that + provides debconf-2.0 should be a drop in replacement, or that should + be considered a bug. This is a change from Michael Vogt's patch. + + -- Manoj Srivastava <srivasta@debian.org> Sat, 5 May 2007 11:59:20 -0500 + +ucf (2.0021) unstable; urgency=low + + * Bug fix: "ucf: does not transfer mode changes to conffile", thanks to + Marc Haber. We now use cp -pf to preserve ownership and permissions. + (Closes: #406476). + * Bug fix: "shouldn't .ucf-dist and .ucf-old be included in example + code?", thanks to Marc Haber (Closes: #418240). + * Bug fix: "possible typo in ucfq(1)", thanks to Marc Haber + (Closes: #418241). + * Bug fix: "ucf : [INTL:pt] Updated Portuguese translation for debconf + messages", thanks to Traduz - Portuguese Translation Team + (Closes: #418280). + * Added XS-VCS-Arch and XS-VCS-Browse to debian/control + + -- Manoj Srivastava <srivasta@debian.org> Tue, 17 Apr 2007 18:56:32 -0500 + +ucf (2.0020) unstable; urgency=low + + * Bug fix: "Syntax error in /usr/bin/ucfr", thanks to Emmanuel Bouthenot + Aaargh. Reincorporate change from the NMU. I thought I had done this, + but I apparently did not. (Closes: #407963). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Feb 2007 13:27:36 -0600 + +ucf (2.0019) unstable; urgency=medium + + * Bug fix: ""ucfr: should prepend it's name to error + messages/warnings"", thanks to Vincent Lönngren. This was already + the case, for the most part, but a few places had been missed. + (Closes: #408540). + * Bug fix: "ucf : [INTL:pt] Portuguese translation for debconf + messages", thanks to Traduz ML (Closes: #410266). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 24 Feb 2007 20:02:07 -0600 + +ucf (2.0018) unstable; urgency=high + + * Bug fix: "ucf: [INTL:pt_BR] Please consider updating the Brazilian + Portuguese debconf template translation", thanks to André Luís Lopes + (Closes: #403817). + * Bug fix: "ucf: Typo in man page: packagr should be package", thanks to + per.bojsen@bojsen.us. Simple typo fix. (Closes: #400839). + * Bug fix: "ucf: Duplicated phrase in ucf message", thanks to Robert + Luberda. Simple typo fix. (Closes: #406053). + * Bug fix: "ucf: [ucfq] strange behavior when querying filenames", + thanks to Frank Küster. Modified ucfq/ucfr man pages to emphasize that + the scripts need a *full* path name to the file. Added sanity checks + such that not providing a full path would result in a diagnostic, but + for etch just exit gracefully. For lenny, these scripts shall die + with an error. Clarify all over that <path to configuration file> + means a full path. (Closes: #401899). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 18 Jan 2007 16:09:18 -0600 + +ucf (2.0017) unstable; urgency=low + + * Bug fix: "ucf: spelling errors", thanks to Matt Taggart (Closes: #395444). + * Bug fix: "ucf: should be silent when it's being purged", thanks to + Santiago Vila (Closes: #397112). + * Bug fix: "please document package registry better", thanks to Frank + Küster. The package registry is documented in a manual page. Any + enhancements to the manual page would be gratefully accepted. The ucf + manual page now has a reference to ucfr and ucfq. I d not think, + however, that this merits a NEWS file: the vast majority of users who + install ucf do so since it is pulled in as a dependency, and they + don't care a white about ucfr being added. The only people who might + care are people who use ucf to manage configuration files, and that is + a very small number. NEWS items should be relegated to important + information that may affect the majority of installations; and this + does not fit the bill. + (Closes: #395011). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 16 Nov 2006 12:00:03 -0600 + +ucf (2.0016) unstable; urgency=low + + * Bug fix: "ucfq --help does not work", thanks to arno. The package name + is ucf, not Ucf, fixed. (Closes: #394269). + * Bug fix: "ucf: Does not handle pathnames with '//' properly", thanks + to Frank Küster. We now use readlink -q -m to canonicalize the path + names presented to ucf. (Closes: #392070). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 23 Oct 2006 11:17:50 -0500 + +ucf (2.0015) unstable; urgency=low + + * Bug fix: "ucf: Man page path error: /usr/share/doc/examples", thanks + to Thijs Kinkhorst (Closes: #384126). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 11 Sep 2006 14:27:35 -0500 + +ucf (2.0014) unstable; urgency=low + + * Bug fix: "ucf: please document the files that should be removed", + thanks to Torsten Werner (Closes: #381736). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 20 Aug 2006 13:26:29 -0500 + +ucf (2.0013) unstable; urgency=low + + * Bug fix: "ucf: missing versioned dependency on coreutils", thanks to + Steinar H. Gunderson (Closes: #378334). + * Bug fix: "ucf: Broken manpage for ucfq", thanks to Benjamin A. Okopnik + (Closes: #377980). + + -- Manoj Srivastava <srivasta@debian.org> Wed, 9 Aug 2006 02:13:38 -0500 + +ucf (2.0012) unstable; urgency=low + + * Bug fix: "ucf takes not enough care using readlink -f", thanks to + Matthew Vernon. While this is not a grave bug (emitting better + diagnostics is nice, but hardly critical), I did go through and fixed + all readlink failing issues. I also improved the pager determination + code, while I was at it, so ucf is more likely to find a sensible + pager. The new code should also handle a messed up /etc/alternatives + setup now. (Closes: #372303). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 16 Jun 2006 12:53:50 -0500 + +ucf (2.0011) unstable; urgency=low + + * Bug fix: "ucf: [INTL:ja] Japanese debconf translation ", thanks to + Kenshi Muto (Closes: #369187). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 6 Jun 2006 09:58:22 -0500 + +ucf (2.0010) unstable; urgency=low + + * Bug fix: "[INTL:gl] Galician debconf templates translation", thanks to + Jacobo Tarrio (Closes: #362135). + * Bug fix: "[INTL:nl] (new|updated) dutch po-debconf translation", + thanks to Kurt De Bree (Closes: #363037). + * Bug fix: "ucf can not handle files with regex ex characters", thanks + to Sean Finney. Well. We now protect against perl's regexp syntax, + which ought to be good enough for grep. (Closes: #364668). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 2 May 2006 22:15:58 -0500 + +ucf (2.009) unstable; urgency=low + + * Added a new script to query the data kept by ucf, including the + package registry that ucfr maintains. + * Bug fix: "ucf: Could provide a method to query changed state", thanks + to Frank Küster (Closes: #342252). + * Bug fix: "please add an option to list all ucf-managed files + associated with a package", thanks to Marc Haber (Closes: #357837). + * Bug fix: "ucf: please provide infrastructure to remove deleted + conffiles", thanks to Marc Haber (Closes: #358552). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 16 Apr 2006 16:40:13 -0500 + +ucf (2.008) unstable; urgency=low + + * Bug fix: "ucf: Could use ucf-{old,dist} instead of dpkg-{old,dist}", + thanks to Frank Küster (Closes: #336055). + * Bug fix: "ucf: Please register information about the package that + installed a configuration file", thanks to Frank K (Closes: #296598). + * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages", + thanks to Miroslav Kure (Closes: #356534). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 11 Apr 2006 15:03:25 -0500 + +ucf (2.007) unstable; urgency=low + + * Bug fix: "wrong call to find: invalid argument `-f' to `-type'", + thanks to Martin Michlmayr (Closes: #356498). + * Bug fix: "ucf: [INTL:pl] Update of the Polish debconf template + translation", thanks to Robert Luberda (Closes: #356119). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 12 Mar 2006 08:52:58 -0600 + +ucf (2.006) unstable; urgency=low + + * Make sure we get rid of all cached files also when purged. + * Bug fix: "does not purge cached configuration files in + /var/lib/ucf/cache", thanks to Bart Martens (Closes: #354441). + * Bug fix: "tetex-base: purge incomplete", thanks to Bart Martens + (Closes: #354442). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 5 Mar 2006 10:32:20 -0600 + +ucf (2.005) unstable; urgency=low + + * Bug fix: "[l10n:de] Updated German translation of the debconf + templates", thanks to Erik Schanze (Closes: #346293). + * Bug fix: "ucf: Leaves files behind after remove/purge", thanks to JP + Sugarbroad (Closes: #348415). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 23 Jan 2006 11:46:20 -0600 + +ucf (2.004) unstable; urgency=low + + * Bug fix: "ucf: [INTL:da] Danish debconf template translation", thanks + to Claus Hindsgaul (Closes: #337038). + + -- Manoj Srivastava <srivasta@debian.org> Sat, 3 Dec 2005 20:23:50 -0600 + +ucf (2.003) unstable; urgency=low + + * Bug fix: "ucf: Update of the french translation of the debconf + templates", thanks to Eric (Closes: #331290). + * Bug fix: "ucf: [INTL:sv] Swedish debconf templates translation", + thanks to Daniel Nylander (Closes: #334800). + * Bug fix: "ucf: Needs root access to display the help message", thanks + to Frédéric Bothamy. Allow ucf to be run as non-root. This entailed + not loading debconf related stuff, since that seems to require root + privileges. Instead, we just emit a diagnostic and go on. Hopefully + this is enough to let the user know when debconf does not work as + expected. Also, if ucf is not running as root, automatically + transition into the no-action mode, so a non-root user can still be + able run ucf in diagnostic mode. (Closes: #332239). + * Added a note to the man page that --purge does not touch the + configuration file on disk -- cleaning that up is still the calling + package's responsibility. + + -- Manoj Srivastava <srivasta@debian.org> Thu, 20 Oct 2005 15:12:58 -0500 + +ucf (2.002) unstable; urgency=low + + * Bug fix: "INTL:vi Vietnamese translation for ucf", thanks to Clytie + Siddall (Closes: #323951). + * Bug fix: "Please document that ucf may not exist when the postrm + script is called" (Closes: #326085). + * Bug fix: "Please include sdiff in the menu options", thanks to Tobias + Toedter (Closes: #323989). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 20 Sep 2005 14:52:26 -0500 + +ucf (2.001) unstable; urgency=low + + * Bug fix: "ucf: missing UCF_FORCE_CONFFMISS option", thanks to Goswin + Brederlow (Closes: #321702). + * Add a dependency on debconf. + + -- Manoj Srivastava <srivasta@debian.org> Mon, 8 Aug 2005 15:17:13 -0500 + +ucf (2.000) unstable; urgency=low + + * Also remove /var/lib/ucf/cache if it is empty. The problem was that + since the cache directory existed, ucf was leaving /var/lib/ucf + behind on purge, which was bad. Thanks to Lars Wirzenius for noticing. + * Bug fix: "ucf: [INTL:pl] Polish translation of debconf templates", + thanks to Robert Luberda (Closes: #312716). + * Bug fix: "ucf: prints verbose info even with VERBOSE=0 set in the + config file", thanks to Robert Luberda (Closes: #312727). + * Bug fix: "ucf: [INTL:it] Italian debconf translation", thanks to Luca + Bruno (Closes: #316913). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 7 Jul 2005 12:25:13 -0500 + +ucf (1.18) unstable; urgency=low + + * Bug fix: "ucf: [INTL:ja] initial debconf Japanese translation", thanks + to Kenshi Muto (Closes: #307007). + * Bug fix: "'man ucf' typo: "awlays"", thanks to A Costa + (Closes: #306736). + * Bug fix: "'man lcf' typos: "algoriothm" and + "directrory"", thanks to A Costa (Closes: #306735). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 2 May 2005 01:27:15 -0500 + +ucf (1.17) unstable; urgency=low + + * Bug fix: "ucf: assumes that debconf-loadtemplates is always there", + thanks to Miles Bader (Closes: #300159). + * Added a recommendation for debconf-utils for debconf-loadtemplate (not + templates). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Mar 2005 18:26:01 -0600 + +ucf (1.16) unstable; urgency=low + + * Bug fix: "Typo on line 55 of /usr/bin/ucf", thanks to Troy Arnold + (Closes: #300136). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 17 Mar 2005 16:55:42 -0600 + +ucf (1.15) unstable; urgency=low + + * Bug fix: "ucf: spelling error in manpage", thanks to Sean Finney + (Closes: #296088). + * Bug fix: "ucf: new configuration file appear two times", thanks to + Martin Lohmeier. In three way merges, remove the generated .dpkg-new + file created during the merge (Closes: #296186). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 17 Mar 2005 02:46:36 -0600 + +ucf (1.14) unstable; urgency=low + + * Bug fix: "/usr/share/doc/ucf/examples/postinst refers /usr/man", + thanks to Marc Haber (Closes: #294558). + * Bug fix: "[l10n] Initial Czech translation of ucf debconf messages", + thanks to Miroslav Kure (Closes: #287302). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 11 Feb 2005 01:36:25 -0600 + +ucf (1.13) unstable; urgency=low + + * Bug fix: ""The cache file is $cached_file" should be printed + only in verbose mode", thanks to Florent Rougon (Closes: #279350). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 2 Nov 2004 11:24:13 -0600 + +ucf (1.12) unstable; urgency=medium + + * Bug fix: "ucf creates Destination on "registration" if it + does not exist", thanks to Florent Rougon (Closes: #279259). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 1 Nov 2004 19:44:00 -0600 + +ucf (1.11) unstable; urgency=medium + + * Bug fix: "ucf creates Destination on "registration" if it + does not exist", thanks to Florent Rougon. Now, even if there are no + mentions of the file in the database, and there is no destination + file, as long as historical md5sum dirs of files exist, the + destination is not recreated. (Closes: #279259). + * Bug fix: "ucf leaves files in the cache after --purge", thanks to + Florent Rougon. The purge action is now moved to a point after the + cache file name is canclulated. (Closes: #279262). + * Bug fix: "Error messages when ucf-managed files are deleted", thanks + to Florent Rougon (Closes: #279261). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 1 Nov 2004 15:22:51 -0600 + +ucf (1.10) unstable; urgency=high + + * Urgency high since the package was mostly useless when used with + command line arguments and debconf. + * Bug fix: "--three-way does not put the file into the cache", thanks to + Florent Rougon . This is because the threeway option was lost when ucf + was re-executed under debconf. (Closes: #278089). + * Bug fix: "Typos in the manual pages and default configuration file", + thanks to Florent Rougon. Much appreciated. (Closes: #278091). + + -- Manoj Srivastava <srivasta@debian.org> Thu, 28 Oct 2004 13:52:22 -0500 + +ucf (1.09) unstable; urgency=medium + + * Urgency medium since it does close an important bug that made + prompting, err, bork for German users + * Bug fix: "ucf: German translation of the debconf templates is borked", + thanks to Michael Piefel (Closes: #269031). + * Bug fix: "Please document that "--debconf-ok"; works also if + debconf is not running", thanks to Frank Küster (Closes: #266807). + + -- Manoj Srivastava <srivasta@debian.org> Wed, 22 Sep 2004 13:05:01 -0500 + +ucf (1.08) unstable; urgency=low + + * Bug fix: "ucf file dest is buggy if dest contains egrep metachars", + thanks to Hagen von Eitzen (Closes: #262134). + * Bug fix: "ucf: Please add German translation of the debconf + templates", thanks to Erik Schanze (Closes: #264432). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 13 Aug 2004 21:07:45 -0500 + +ucf (1.07) unstable; urgency=low + + * Bug fix: "[l10:ca] orville-write catalan debconf templates", thanks to + Aleix Badia i Bosch (Closes: #248754). + * Bug fix: "ucf: debconf spanish translation", thanks to Lucas Wall + (Closes: #253244). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 22 Jun 2004 17:51:35 -0500 + +ucf (1.06) unstable; urgency=low + + * Bug fix: "ucf tries to show diff of non-existent file", thanks to + Frank Küster. Darn. Applied the fix to the three way merge the last + time, not to the simple diff stanza. (Closes: #243953). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 26 Apr 2004 16:28:39 -0500 + +ucf (1.05) unstable; urgency=low + + * The patch for the optiopn added in the last version was provided by + Matthew Palmer <mpalmer@debian.org>. Much appreciated. + * Bug fix: "manpage incorrect for --sum-file", thanks to Matthew Palmer + Also fixed a typo in ucf reported in the same report, and, while I was + at it, I escaped all hyphens in ucf.1. (Closes: #244853). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 20 Apr 2004 15:18:02 -0500 + +ucf (1.04) unstable; urgency=low + + * Bug fix: "ucf tries to show diff of non-existent file", thanks to + Frank Küster. This is still the correct behaviour, as long as a + diff is show, which should be the case now. (Closes: #243953). + * Added an option to specify where the old md5sum can be found for + historical versions. + + -- Manoj Srivastava <srivasta@debian.org> Mon, 19 Apr 2004 12:17:19 -0500 + +ucf (1.03) unstable; urgency=low + + * Bug fix: "Hangs on waiting for user input _sometimes_", thanks to + Peter Gervai (Closes: #242445). + * Bug fix: "ucf: Minor description typo", thanks to Jeroen van + Wolffelaar (Closes: #243482). + + -- Manoj Srivastava <srivasta@debian.org> Mon, 19 Apr 2004 02:37:52 -0500 + +ucf (1.02) unstable; urgency=low + + * Bug fix: "ucf: --debconf-ok option useless", thanks to Roger So + Applied patch; we should only set DEBCONF_OK if it is not set. + (Closes: #242434). + + -- Manoj Srivastava <srivasta@debian.org> Tue, 6 Apr 2004 13:20:12 -0500 + +ucf (1.01) unstable; urgency=low + + * Bug fix: "fontconfig: postinst script fails (2)", thanks to Frederic + Briere (Closes: #241846). + * Bug fix: "Does not handle invalid PAGER gracefully", thanks to + J.H.M. Dassen (Ray) (Closes: #241890). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 4 Apr 2004 16:09:58 -0500 + +ucf (1.00) unstable; urgency=low + + * Shut off withecho, since we should be fairly stable now. Bump version + number to reflect that. + * Bug fix: "ucf creates superfluous dpkg-dist files", thanks to Frank + Küster (Closes: #238730). + * Bug fix: "ucf: diff is not displayed with DEBIAN_FRONTEND=dialog and + more as sensible-pager", thanks to Frank Küster. This was nasty. Now + ucf thinks like sensible-pager, looking at $PAGER, + /etc/alternatives/pager, and, failing that, ensuring /bin/more exists + -- and then, if the pager is more, it pauses after displaying the + diff, so that the diff is not whisked away by debconf looping back to + ask for what's next. (Closes: #239319). + * Thanks to extensive patches from Fabio Massimo Di Nitto + <fabbione@fabbione.net>, ucf should now be able to handle file names + with spaces in them. Touch wood. + + -- Manoj Srivastava <srivasta@debian.org> Fri, 2 Apr 2004 02:10:48 -0600 + +ucf (0.33) unstable; urgency=low + + * Bug fix: "ucf: Variable errors in ucf script breaks lm-sensors + installation", thanks to Frédéric Bothamy (Closes: #237944). + * Bug fix: "apache-common: /etc/apache/modules.conf is not modified", + thanks to Oliver Zimmermann (Closes: #237946). + + -- Manoj Srivastava <srivasta@debian.org> Sun, 14 Mar 2004 11:14:21 -0600 + +ucf (0.32) unstable; urgency=low + + * Fixed debconf handling -- POTFILES.in needs t9o have the master + template, not the generated one. + + -- Manoj Srivastava <srivasta@debian.org> Sat, 13 Mar 2004 12:22:11 -0600 + +ucf (0.31) unstable; urgency=low + + * Moved to the new debconf mechanism is skeleton-make-rules, which shall + allow ucf to be backported to older debconf versions. + * Bug fix: "ucf: Please add the attached Brazilian Portuguese debconf + template translation", thanks to Andre Luis Lopes (Closes: #235489). + * Bug fix: "ucf: French debconf templates translation", thanks to Eric + (Closes: #236715). + * Bug fix: "ucf: Option --debug exists only in manpage, but is not + recognized", thanks to Frank KKüster (Closes: #237114). + * Bug fix: "ucf: please consider adding symlink support", thanks to Marc + Haber. Actually, Fabio Massimo Di Nitto <fabbione@fabbione.net> did + the heavy lifting on this one and sent in a tested, working patch. + (Closes: #213080). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 12 Mar 2004 14:48:31 -0600 + +ucf (0.30) unstable; urgency=low + + * Convert to po-debconf, also thanks to Joey Hess. + + -- Manoj Srivastava <srivasta@debian.org> Sun, 22 Feb 2004 15:22:29 -0600 + +ucf (0.29) unstable; urgency=low + + * Thanks to Joey Hess for noticing that the debconf support in ucf was + not complete. Added the template to the control archive, source the + confmodule in postinst, and purge debconf db on purge. + + -- Manoj Srivastava <srivasta@debian.org> Sun, 22 Feb 2004 09:49:20 -0600 + +ucf (0.28) unstable; urgency=low + + Joey Hess <joeyh@debian.org> + * Added debconf support to ucf. It will use debconf for prompting. + * Since some badly behaved maintainer scripts use debconf, then cripple it + (by calling STOP, redirecting stdio, etc), and then call ucf, ucf must + take care to not use debconf if called from such a script. In this case it + will fall back to prompting without using debconf, unless a --debconf-ok + parameter is given, to let ucf know that the maintainer script + promises it has not screwed up debconf. + * Update ucf.1 + * Since the above hack means that ucf retains the ability to prompt + on its own, I made it not depend on debconf at all; if debconf is not + present then ucf will fall back to its internal prompter. closes: Bug#234151 + Manoj: + * Changed the rules file to handle permissions better in face of strange + umasks. Many thanks to Joey Hess, who essentially did all the work for + this update in functionality. + + -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Feb 2004 23:35:01 -0600 + +ucf (0.27) unstable; urgency=low + + * Bug fix: "minor typo in /etc/ucf.conf comment", thanks to Leonardo + Rochael Almeida (Closes: #225633). + + -- Manoj Srivastava <srivasta@debian.org> Fri, 6 Feb 2004 01:53:24 -0600 + +ucf (0.26) unstable; urgency=low + + * When ucf replaces a configuration file, it always leaves the old + version behind as "conffile.dpkg-old", and then installed the + "distributed" file as "conffile", just *like dpkg* does. Now, also made + it so that when ucf asks the user a question, and they respond by + opting not to replace the configuration file, ucf creates + "conffile.dpkg-dist", as dpkg would have created. + + -- Manoj Srivastava <srivasta@debian.org> Thu, 13 Nov 2003 03:02:32 -0600 + +ucf (0.25) unstable; urgency=low + + * when the old md5sum is not found in the file, the return value of the + grep is non-zero and the program exits. closes: Bug#216115 + + -- Manoj Srivastava <srivasta@debian.org> Sat, 18 Oct 2003 21:31:28 -0500 + +ucf (0.24) unstable; urgency=low + + * Fix a series of typos that prevented old md5sums from working. Thanks + to Josselin Mouette for the patch. closes: Bug#215244 + + -- Manoj Srivastava <srivasta@debian.org> Wed, 15 Oct 2003 13:53:50 -0500 + +ucf (0.23) unstable; urgency=low + + * Fix a corner case when ucf is reinstalled after being removed, but not + purged, for a while, in this case all the data is out of + date. Rotating the dataset would have ucf asking questions all over, + but that is better than silently ignoring files of packages that were + purged while ucf was removed, and are being reinstalled. Correct + behaviour trumps the user being asked questions again. closes: Bug#215077 + + -- Manoj Srivastava <srivasta@debian.org> Fri, 10 Oct 2003 12:44:19 -0500 + +ucf (0.22) unstable; urgency=low + + * .TT in the man page did not produce tt font. Use .I instead. + closes: Bug#213077 + * se -> see. ofered -> offered in man page. closes: Bug#213079, Bug#213083 + + -- Manoj Srivastava <srivasta@debian.org> Sun, 28 Sep 2003 18:28:52 -0500 + +ucf (0.21) unstable; urgency=low + + * the --state-dir option to ucf had no effect, since it set the wrong + internal variable. Thanks to Colin Watson for noticing, and providing + a patch. closes: Bug#210788 + + -- Manoj Srivastava <srivasta@debian.org> Sat, 13 Sep 2003 16:13:09 -0500 + +ucf (0.20) unstable; urgency=high + + * Fixed usage of chown root.root in the rules files. + * The 3 way merge support was broekn; it kept track of the md5sum of the + wrong version. Thanks Nicolas Boullis for noticing this. closes: Bug#20706 + + -- Manoj Srivastava <srivasta@debian.org> Sun, 24 Aug 2003 20:26:06 -0500 + +ucf (0.19) unstable; urgency=low + + * Added some examples to the doc directory. Added examples to man + pages. Clarified man page. + + -- Manoj Srivastava <srivasta@debian.org> Thu, 7 Aug 2003 18:48:35 -0500 + +ucf (0.18) unstable; urgency=low + + * No longer save conffiler.dpkg-old unless conffile had been + modified. This should prevent the buildup of .dpkg-old cruft over + time. closes: Bug#189520 + * Document the fact that --three-way first appeared in version 0.8 of + ucf, which was the first version to hit sarge. The woody version of + ucf shall not understand the --thre-way option. closes: Bug#202431 + + -- Manoj Srivastava <srivasta@debian.org> Thu, 31 Jul 2003 12:02:17 -0500 + +ucf (0.17) unstable; urgency=low + + * Fixed a typo. closes: Bug#191833 + * Fixed eiher -> either in the man page. closes: Bug#200048 + * If the file that is already in place has the same md5sum as the new + file created by the maintainer, nothing needs be done. closes: Bug#199233 + * Fix prompting for actoin such that we offer choices for 3 way merging + or diffs where appropriate closes: Bug#199162 + + -- Manoj Srivastava <srivasta@debian.org> Sun, 13 Jul 2003 15:28:46 -0500 + +ucf (0.16) unstable; urgency=high + + * A thinko in the logic for moving a old, locally modified configuration + file to ucf could cause data loss. + + -- Manoj Srivastava <srivasta@debian.org> Fri, 2 May 2003 21:47:48 -0500 + +ucf (0.15) unstable; urgency=medium + + * Clean up some of the new file handling to pave the way for + /etc/conffiles/blah functionality + + -- Manoj Srivastava <srivasta@debian.org> Fri, 25 Apr 2003 14:55:17 -0500 + +ucf (0.14) unstable; urgency=low + + * Another occurence of the missing \. Additional patches from Tore + Anderson to fix a flaw in the md5sum storage. closes: Bug#189517 + * patch from Tore Anderson to fix problems with diff3 closes: Bug#189617 + * Finally get all the miising \. closes: Bug#189514 + + -- Manoj Srivastava <srivasta@debian.org> Sat, 19 Apr 2003 23:11:36 -0500 + +ucf (0.13) unstable; urgency=medium + + * A missing \ at the ned of the line caused a syntax error.closes: Bug#189514 + + -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Apr 2003 13:27:29 -0500 + +ucf (0.12) unstable; urgency=low + + * Finally document the --three-way option. This has been in the code for + a while now, and seems to be working, but was not documented so far. + + -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Apr 2003 02:42:56 -0500 + +ucf (0.11) unstable; urgency=low + + * Test for a old file before trying to copy it as backup. + closes: Bug#168727, Bug#168729 + + -- Manoj Srivastava <srivasta@debian.org> Mon, 11 Nov 2002 18:55:48 -0600 + +ucf (0.10) unstable; urgency=low + + * Urk. Major breakage in ucf on upgrade; one loses + /var/lib/ucf/hashfile, due to a major thinko. The downside is that the + currently installed file shall be trated as the old version, and a + wquestion shall be asked if the upstream file is different. This bad, + but there is no real data loss; only a potential question asked on the + next upgrade of packages using ucf. + + -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 23:09:22 -0600 + +ucf (0.09) unstable; urgency=low + + * Umm. use egrep when you mean egrep. + + -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 22:57:57 -0600 + +ucf (0.08) unstable; urgency=high + + * Add a --purge option to ucf, to remove all hints about a configuration + file from the hashfile. This fixes what happened if a package was + purged, and reinstalled -- on purge the configuration file was + removed, but it was still in ucf's database. On reinstall, since the + upstream file had not changed, ucf did not copy it to the destination + -- even though the destination file no longer existed. This is a major + bugfix. closes: Bug#159015 + * Fix use of md5sum files, and manpage typo, thanks to a patch from + Henrique de Moraes Holschuh <hmh@debian.org>. closes: Bug#163229 + * ucf now has a rudimentary, experimental, and undocumented diff3 + capability. So, optionally, people can see a diff3 diff between the + current file, the old file, and the new upstream version. Also, they + can have the changes made in the upstream versions merged into the + current file. This can be dangerous. + + -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 21:22:00 -0600 + +ucf (0.07) unstable; urgency=low + + * Fix a few missing grep trigger set -e failures. + + -- Manoj Srivastava <srivasta@debian.org> Wed, 6 Mar 2002 01:14:57 -0600 + +ucf (0.06) unstable; urgency=high + + * Added the ionformational script lcf and the associated man page. + * Fixed a major thinko in ucf that could potentially trash the hashfile + + -- Manoj Srivastava <srivasta@debian.org> Tue, 26 Feb 2002 14:30:59 -0600 + +ucf (0.05) unstable; urgency=low + + * /etc/ucf.conf and ucf.conf(5) disagreed due to a typo in the man + page. Fixed. closes: Bug#135691 + * Added the ability for the developer to specify a single file with + historical md5sums, instead of having to ship a directory populated + with single line files for every configuration file in the + package. This is now beginning to get reasonably complex ;-) + + -- Manoj Srivastava <srivasta@debian.org> Mon, 25 Feb 2002 12:03:43 -0600 + +ucf (0.04) unstable; urgency=high + + * Hmm. Failed to replace the configuration file if the old file was a + symbolic link to the new file (happened for gnus users). Thanks go to + wsheets@sbcglobal.net for pointing this out. + + -- Manoj Srivastava <srivasta@debian.org> Wed, 20 Feb 2002 20:21:42 -0600 + +ucf (0.03) unstable; urgency=low + + * Fixed typo in the long description + * Fixed the fact that the script was always verbose + * Fixed a spelling error in a diagnostic + + -- Manoj Srivastava <srivasta@debian.org> Wed, 13 Feb 2002 23:02:29 -0600 + +ucf (0.02) unstable; urgency=low + + * Fixed typo in long desc. + * Changed section to utils. + + -- Manoj Srivastava <srivasta@debian.org> Tue, 12 Feb 2002 04:17:38 -0600 + +ucf (0.01) unstable; urgency=low + + * New version of the package. + + -- Manoj Srivastava <srivasta@debian.org> Tue, 5 Feb 2002 22:25:42 -0600 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..9fc175f --- /dev/null +++ b/debian/control @@ -0,0 +1,40 @@ +Source: ucf +VCS-Git: git://anonscm.debian.org/users/srivasta/debian/ucf.git +VCS-Browser: http://anonscm.debian.org/gitweb/?p=users/srivasta/debian/ucf.git +Section: utils +Priority: standard +Maintainer: Manoj Srivastava <srivasta@debian.org> +Build-Depends-Indep: po-debconf, gettext, debhelper (>= 9.0.0) +Standards-Version: 3.9.5 + +Package: ucf +Architecture: all +Multi-Arch: foreign +Depends: debconf (>= 1.5.19), coreutils (>= 5.91), ${misc:Depends} +Description: Update Configuration File(s): preserve user changes to config files + Debian policy mandates that user changes to configuration files must be + preserved during package upgrades. The easy way to achieve this behavior + is to make the configuration file a 'conffile', in which case dpkg + handles the file specially during upgrades, prompting the user as + needed. + . + This is appropriate only if it is possible to distribute a default + version that will work for most installations, although some system + administrators may choose to modify it. This implies that the + default version will be part of the package distribution, and must + not be modified by the maintainer scripts during installation (or at + any other time). + . + This script attempts to provide conffile-like handling for files that + may not be labelled conffiles, and are not shipped in a Debian package, + but handled by the postinst instead. This script allows one to + maintain files in /etc, preserving user changes and in general + offering the same facilities while upgrading that dpkg normally + provides for 'conffiles'. + . + Additionally, this script provides facilities for transitioning a + file that had not been provided with conffile-like protection to come + under this schema, and attempts to minimize questions asked at + installation time. Indeed, the transitioning facility is better than the + one offered by dpkg while transitioning a file from a non-conffile to + conffile status. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..047ada6 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,24 @@ +This is the Debian GNU/Linux packa for ucf. + +ucf is Copyright (C) 2002, 2003, 2003, 2004, 2005, 2006 Manoj +Srivastava <srivasta@debian.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 dated June, 1991. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +On Debian GNU/Linux systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2'. + + A copy of the GNU General Public License is also available at + <URL:http://www.gnu.org/copyleft/gpl.html>. You may also obtain + it by writing to the Free Software Foundation, Inc., 51 Franklin + St, Fifth Floor, Boston, MA 02110-1301 USA + +Manoj Srivastava <srivasta@debian.org> +arch-tag: d4250e44-a0e0-4ee0-adb9-2bd74f6eeb27 diff --git a/debian/po/ChangeLog b/debian/po/ChangeLog new file mode 100644 index 0000000..c317e8a --- /dev/null +++ b/debian/po/ChangeLog @@ -0,0 +1,10 @@ +2006-04-11 Manoj Srivastava <srivasta@debian.org> + + * cs.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18 + New translation + +2006-01-23 Manoj Srivastava <srivasta@debian.org> + + * de.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-14 + New translation + diff --git a/debian/po/POTFILES.in b/debian/po/POTFILES.in new file mode 100644 index 0000000..cef83a3 --- /dev/null +++ b/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] templates diff --git a/debian/po/ca.po b/debian/po/ca.po new file mode 100644 index 0000000..5f63ff3 --- /dev/null +++ b/debian/po/ca.po @@ -0,0 +1,146 @@ +# ucf (debconf) translation to Catalan. +# Copyright © 2004, 2008, 2009, 2010 Free Software Foundation, Inc. +# Aleix Badia i Bosch <abadia@ica.es>, 2004. +# Jordi Mallach <jordi@debian.org>, 2008, 2009, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0025+nmu1\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2010-07-07 09:53+0200\n" +"Last-Translator: Jordi Mallach <jordi@debian.org>\n" +"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Fitxer de configuració modificat" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instal·la la versió del mantenidor del paquet" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "mantín la versió instal·lada actualment" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "mostra les diferències entre les versions" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "mostra les diferències en paral·lel entre les versions" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "mostra les diferències a 3 bandes entre les versions" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "fes una fusió a 3 bandes entre les versions disponibles (experimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "inicia un nou intèrpret d'ordres per examinar la situació" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"Què voleu fer respecte al fitxer de configuració modificat ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Hi ha una nova versió del fitxer de configuració ${FILE}, però la vostra " +"versió s'ha modificat localment." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Diferències línia a línia entre les versions" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "S'han trobat conflictes en la fusió a tres bandes" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"S'han trobat conflictes durant la fusió a tres bandes! Editeu «${dest_file}» " +"i solucioneu-los manualment." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"El fitxer «${dest_file}.${ERR_SUFFIX}» té un registre de la fusió fallida " +"del fitxer de configuració." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Hi ha una nova versió del fitxer de configuració ${FILE}, però la vostra " +#~ "versió s'ha modificat localment." diff --git a/debian/po/cs.po b/debian/po/cs.po new file mode 100644 index 0000000..707db1e --- /dev/null +++ b/debian/po/cs.po @@ -0,0 +1,149 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-16 17:47+0200\n" +"Last-Translator: Miroslav Kure <kurem@debian.cz>\n" +"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Změněný konfigurační soubor" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalovat verzi od správce balíku" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "ponechat aktuálně instalovanou lokální verzi" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "zobrazit rozdíly mezi verzemi" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "zobrazit rozdíly mezi verzemi vedle sebe" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "zobrazit třícestný rozdíl mezi dostupnými verzemi" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "provést třícestné sloučení dostupných verzí (experimentální)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "spustit nový shell a prozkoumat situaci" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Co chcete provést se změněným konfiguračním souborem ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"K dispozici je novější verze (${NEW}) konfiguračního souboru ${FILE}, avšak " +"nainstalovaná verze obsahuje lokální úpravy." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Rozdíly mezi verzemi řádek po řádku" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Co chcete udělat s ${BASENAME}?" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Během třícestného sloučení byly nalezeny konflikty! Upravte prosím soubor " +"„${dest_file}“ a opravte je ručně." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Soubor „${dest_file}.${ERR_SUFFIX}“ obsahuje záznam nepodařeného sloučení " +"konfiguračního souboru." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "K dispozici je novější verze konfiguračního souboru ${FILE}, avšak " +#~ "nainstalovaná verze obsahuje lokální úpravy." diff --git a/debian/po/da.po b/debian/po/da.po new file mode 100644 index 0000000..403ca0b --- /dev/null +++ b/debian/po/da.po @@ -0,0 +1,141 @@ +# Danish translation ucf. +# This file is distributed under the same license as the ucf package. +# Copyright (C) 2014 ucf & nedenstående oversættere. +# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2005, 2007. +# Joe Hansen <joedalton2@yahoo.dk>, 2010, 2014. +# +# configuration file -> opsætningsfil (normalt konfigurationsfil, men tidligere +# havde opsætningsfil så har beholdt den). +# +msgid "" +msgstr "" +"Project-Id-Version: ucf debconf template\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-08 17:34+0000\n" +"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" +"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Ændret opsætningsfil" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "installer pakkevedligeholderens udgave" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "bevar din aktuelt installerede udgave" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "vis forskellene mellem udgaverne" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "vis forskellene mellem versionerne overfor hinanden" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "vis 3-vejs forskelle mellem de tilgængelige udgaver af filen" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "" +"udfør en 3-vejs fletning mellem tilgængelige versioner (eksperimentelt)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "start en ny skal for at undersøge situationen" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Hvad vil du gøre med ændret opsætningsfil ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"En ny version (${NEW}) af opsætningsfilen ${FILE} er tilgængelig, men den " +"installerede version er blevet ændret lokalt." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "vis forskellene mellem udgaverne" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Konflikter fundet i trevejssammenføjning" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Konflikter fundet under trevejssammenføjning! Rediger venligst `" +"${dest_file}' og ret dem manuelt." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Filen `${dest_file}.${ERR_SUFFIX}' har en post over den mislykkede " +"sammenføjning af opsætningsfilen." + + diff --git a/debian/po/de.po b/debian/po/de.po new file mode 100644 index 0000000..6ee3d22 --- /dev/null +++ b/debian/po/de.po @@ -0,0 +1,145 @@ +# translation of ucf debconf templates to German +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans# +# Developers do not need to manually edit POT or PO files. +# +# Erik Schanze <eriks@debian.org>, 2004-2009. +# Holger Wansing <linux@wansing-online.de>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0028\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-22 20:42+0200\n" +"Last-Translator: Holger Wansing <linux@wansing-online.de>\n" +"Language-Team: German <debian-l10n-german@lists.debian.org>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Geänderte Konfigurationsdatei" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "Version des Paketbetreuers installieren" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "aktuell lokal installierte Version beibehalten" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "Unterschiede zwischen den Versionen anzeigen" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "Unterschiede zwischen den Versionen nebeneinander anzeigen" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "3-Wege-Unterschiede verfügbarer Versionen anzeigen" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "3-Wege-Vereinigung verfügbarer Versionen [experimentell]" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "die Angelegenheit in einer neu gestarteten Shell untersuchen" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"Wie wollen Sie mit der geänderten Konfigurationsdatei ${BASENAME} verfahren?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Eine neue Version (${NEW}) der Konfigurationsdatei ${FILE} ist verfügbar, " +"aber die installierte Version wurde verändert." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Unterschiede zwischen den Versionen zeilenweise anzeigen" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Konflikte bei der 3-Wege-Vereinigung" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Es wurden Konflikte bei der 3-Wege-Vereinigung festgestellt! Bitte passen " +"Sie die Datei »${dest_file}« selbst an, um die Konflikte zu beseitigen." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Die Datei »${dest_file}.${ERR_SUFFIX}« enthält eine Aufzeichnung der " +"fehlgeschlagenen Vereinigung der Konfigurationsdateien." + diff --git a/debian/po/es.po b/debian/po/es.po new file mode 100644 index 0000000..8452bf6 --- /dev/null +++ b/debian/po/es.po @@ -0,0 +1,176 @@ +# ucf translation to spanish +# Copyright (C) 2004-2007 Software in the Public Interest +# This file is distributed under the same license as the ucf package. +# +# Changes: +# - Initial translation +# Lucas Wall <kthulhu@usa.net>, 2004 +# - Updated +# Javier Fernandez-Sanguino <jfs@debian.org>, 2007, 2010 +# +# +# Traductores, si no conoce el formato PO, merece la pena leer la +# documentación de gettext, especialmente las secciones dedicadas a este +# formato, por ejemplo ejecutando: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Equipo de traducción al español, por favor lean antes de traducir +# los siguientes documentos: +# +# - El proyecto de traducción de Debian al español +# http://www.debian.org/intl/spanish/coordinacion +# especialmente las notas de traducción en +# http://www.debian.org/intl/spanish/notas +# +# - La guía de traducción de po's de debconf: +# /usr/share/doc/po-debconf/README-trans +# o http://www.debian.org/intl/l10n/po-debconf/README-trans +# +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0025\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2010-08-08 01:53+0200\n" +"Last-Translator: Javier Fernandez-Sanguino <jfs@debian.org>\n" +"Language-Team: Debian Spanish <debian-l10n-spanish@lists.debian.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: BASENAME destfile ERRSUFFIX\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Fichero de configuración modificado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalar la versión del responsable del paquete" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "conservar la versión local actualmente instalada" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "mostrar las diferencias entre las versiones" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "mostrar las diferencias entre las versiones lado a lado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "mostrar las diferencias entre las tres versiones" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "fusionar las tres versiones disponibles (experimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "ejecutar un nuevo intérprete para examinar la situación" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"¿Qué desea hacer con el fichero de configuración modificado ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Hay una nueva versión del fichero de configuración ${FILE}, pero la versión " +"que está instalada ha sido modificada localmente." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Mostrar las diferencias línea a línea entre las versiones" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Se encontraron conflictos al intentar integrar a tres bandas" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"¡Se encontraron conflictos al intentar la integración a tres bandas! Por " +"favor, edite «${dest_file}» y ordénelos manualmente." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"El fichero «${dest_file}.${ERR_SUFFIX}» tiene el registro del fallo de " +"integración del fichero de configuración." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Hay una nueva versión del fichero de configuración ${FILE}, pero la " +#~ "versión que está instalada ha sido modificada localmente." + +#, fuzzy +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "¿Qué desea hacer con ${BASENAME}?" diff --git a/debian/po/eu.po b/debian/po/eu.po new file mode 100644 index 0000000..16da34f --- /dev/null +++ b/debian/po/eu.po @@ -0,0 +1,151 @@ +# Basque translation for ucf_3.0024_eu.po +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Piarres Beobide <pi@beobide.net>, 2007, 2009. +# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2009, 2014. +msgid "" +msgstr "" +"Project-Id-Version: ucf_3.0024_eu\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 12:11+0200\n" +"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n" +"Language-Team: Basque <debian-l10n-basque@lists.debian.org>\n" +"Language: eu\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.4\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Aldatutako konfigurazio-fitxategia" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalatu mantentzailearen bertsioaren paketea" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "mantendu lokalean unean instalatutako bertsioa" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "erakutsi bertsioen arteko desberdintasunak" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "erakutsi bertsioen arteko desberdintasunak aldez-alde" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "erakutsi bertsioen arteko desberdintasunak 3-moduan" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "egin bertsio eskuragarrien 3-moduko batura (esperimentala)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "abiarazi shell berri bat egoera aztertzeko" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"Zer egitea nahi duzu aldatutako ${BASENAME} konfigurazioko fitxategiarekin?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"${FILE} konfigurazioko fitxategiaren bertsio berri bat (${NEW}) dago " +"eskuragarri, baina instalatutako bertsioa lokalki aldatua izan da." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Bertsioen arteko desberdintasunak lerroz lerro" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Gatazkak aurkitu dira 3-moduko baturan" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Gatazkak aurkitu dira 3-moduko baturan. Editatu '${dest_file}' eta ordenatu " +"eskuz." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"'${dest_file}.${ERR_SUFFIX}' fitxategiak erregistro bat du konfigurazioko " +"fitxategiak batzean huts egin duten sarrerekin." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "${FILE} konfigurazioko fitxategiaren bertsio berri bat dago eskuragarri, " +#~ "baina instalatutako bertsioa lokalki aldatua izan da." + +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "" +#~ "Zer egitea nahi duzu aldatutako ${BASENAME} konfigurazioko " +#~ "fitxategiarekin?" diff --git a/debian/po/fi.po b/debian/po/fi.po new file mode 100644 index 0000000..00efd65 --- /dev/null +++ b/debian/po/fi.po @@ -0,0 +1,139 @@ +# Esko Arajärvi <edu@iki.fi>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: ucf_3.003\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 18:38+0200\n" +"Last-Translator: Esko Arajärvi <edu@iki.fi>\n" +"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Muokattu asetustiedosto" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "Asenna paketin ylläpitäjän versio" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "Säilytä tämän hetkinen paikallinen versio" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "Näytä versioiden väliset erot" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "Näytä versioiden väliset erot rinnakkain" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "Näytä versioiden välinen kolmisuuntainen erotus" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "Tee kolmisuuntainen versioiden yhdistys (kokeellinen)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "Käynnistä uusi komentotulkki tilanteen tutkimiseksi" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Miten muokattu asetustiedosto ${BASENAME} käsitellään?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Asetustiedostosta ${FILE} on tarjolla uusi versio (${NEW}), mutta nykyistä " +"versiota on muokattu paikallisesti." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Versioiden väliset erot rivi riviltä" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Kolmisuuntaisessa yhdistyksessä ilmeni ristiriitoja" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Kolmesta yhdistettävästä tiedostosta löytyi ristiriitoja. Muokkaa tiedostoa " +"”${dest_file}” ja ratkaise ne käsin." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Tiedostossa ”${dest_file}.${ERR_SUFFIX}” on tiedot asetustiedoston " +"epäonnistuneesta yhdistämisestä." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Asetustiedostosta ${FILE} on tarjolla uusi versio, mutta nykyistä " +#~ "versiota on muokattu paikallisesti." diff --git a/debian/po/fr.po b/debian/po/fr.po new file mode 100644 index 0000000..19d3f21 --- /dev/null +++ b/debian/po/fr.po @@ -0,0 +1,152 @@ +# Translation of ucf debconf templates to French +# Copyright (C) 2007-2009 Debian French l10n team <debian-l10n-french@lists.debian.org> +# This file is distributed under the same license as the ucf package. +# +# Translators: +# +# Eric Madesclair <eric-m@wanadoo.fr>, 2007. +# Christian Perrier <bubulle@debian.org>, 2009, 2014. +msgid "" +msgstr "" +"Project-Id-Version: fr\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 13:44+0200\n" +"Last-Translator: Christian Perrier <bubulle@debian.org>\n" +"Language-Team: French <debian-l10n-french@lists.debian.org>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Fichier de configuration modifié" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "Installer la version du responsable du paquet" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "Garder la version actuellement installée" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "Montrer les différences entre les versions" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "Montrer côte à côte les différences entre les versions" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "Montrer les différences entre les trois versions du fichier" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "Fusionner les trois versions (« 3-way merge » : expérimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "Lancer un shell pour examiner la situation" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"Action souhaitée pour le fichier de configuration modifié ${BASENAME} :" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Une nouvelle version (${NEW}) du fichier de configuration ${FILE} est " +"disponible mais la version actuellement utilisée a été modifiée localement." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Montrer, ligne par ligne, les différences entre les versions" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Conflits pendant la fusion des 3 versions" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Des conflits ont été trouvés pendant la fusion des trois versions (« 3-way " +"merge »). Veuillez ouvrir « ${dest_file} » et les corriger vous-même." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Le fichier « ${dest_file}.${ERR_SUFFIX} » contient une trace de la fusion " +"qui a échoué." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Une nouvelle version du fichier de configuration ${FILE} est disponible " +#~ "mais la version actuellement utilisée a été modifiée localement." + +#, fuzzy +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "Action souhaitée pour ${BASENAME} :" diff --git a/debian/po/gl.po b/debian/po/gl.po new file mode 100644 index 0000000..bb7e1de --- /dev/null +++ b/debian/po/gl.po @@ -0,0 +1,152 @@ +# Galician translation of ucf's debconf templates. +# This file is distributed under the same license as the ucf package. +# +# Jacobo Tarrio <jtarrio@debian.org>, 2006, 2007. +# Marce Villarino <mvillarino@gmail.com>, 2009. +msgid "" +msgstr "" +"Project-Id-Version: ucf\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2009-11-05 20:38+0100\n" +"Last-Translator: Marce Villarino <mvillarino@gmail.com>\n" +"Language-Team: Galician <proxecto@trasno.net>\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Ficheiro de configuración modificado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalar a versión do mantenedor do paquete" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "conservar a versión local instalada actualmente" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "mostrar as diferenzas entre as versións" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "mostrar unha comparación entre as versións" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "mostrar unha diferenza a tres entre as versións dispoñíbeis" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "fusionar a tres as versións dispoñibles (experimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "iniciar unha shell para examinar a situación" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Que desexa facer co ficheiro de configuración modificado ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Hai dispoñíbel unha nova versión do ficheiro de configuración ${FILE}, pero " +"a versión actualmente instalada ten modificacións locais." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Diferenzas liña por liña entre as versións" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Atopáronse conflitos na fusión a tres bandas" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Atopáronse conflitos durante a fusión a tres bandas! Edite «${dest_file}» e " +"ordéneos manualmente." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"O ficheiro «${dest_file}.{ERR_SUFFIX}» contén un rexistro da fusión " +"fracasada do ficheiro de configuración." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Hai dispoñíbel unha nova versión do ficheiro de configuración ${FILE}, " +#~ "pero a versión actualmente instalada ten modificacións locais." + +#, fuzzy +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "¿Que quere facer con ${BASENAME}?" diff --git a/debian/po/it.po b/debian/po/it.po new file mode 100644 index 0000000..3a45a26 --- /dev/null +++ b/debian/po/it.po @@ -0,0 +1,142 @@ +# translation of ucf_1.18_templates.po to italian +# Copyright Luca Bruno <lucab@debian.org>, 2005-2010. +msgid "" +msgstr "" +"Project-Id-Version: ucf_1.18_templates\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2007-09-19 01:10-0500\n" +"Last-Translator: Luca Bruno <lucab@debian.org>\n" +"Language-Team: Italian <tp@lists.linux.it>\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "File di configurazione modificato" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "installare la versione del manutentore del pacchetto" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "mantenere la propria versione attualmente installata" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "mostrare le differenze tra le versioni" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "mostrare affiancate le differenze tra le versioni" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "mostrare le differenze tra le 3 versioni del file disponibili" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "integrare le differenze tra le 3 versioni (sperimentale)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "eseguire una nuova shell per esaminare la situazione" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Cosa si vuol fare del file di configurazione modificato ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Una nuova versione del file di configurazione ${FILE} è disponibile, ma la " +"propria versione è stata modificata localmente." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Differenze riga per riga tra le versioni" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Conflitto nell'integrazione delle 3 versioni" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Si sono verificati conflitti nell'integrazione delle 3 versioni! Modificare " +"il file «${dest_file}» e risolvere manualmente la situazione." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Il file «${dest_file}.${ERR_SUFFIX}» contiene il resoconto della tentata " +"integrazione del file di configurazione." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Una nuova versione del file di configurazione ${FILE} è disponibile, ma " +#~ "la propria versione è stata modificata localmente." diff --git a/debian/po/ja.po b/debian/po/ja.po new file mode 100644 index 0000000..d64171e --- /dev/null +++ b/debian/po/ja.po @@ -0,0 +1,140 @@ +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-08 08:47+0900\n" +"Last-Translator: Kenshi Muto <kmuto@debian.org>\n" +"Language-Team: Japanese <debian-japanese@lists.debian.org>\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "変更された設定ファイル" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "パッケージメンテナのバージョンをインストール" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "現在インストールされているローカルバージョンを保持" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "バージョン間の差異を表示" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "バージョン間の差異を並行表示" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "利用可能なバージョン間の 3 ウェイ差分を表示" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "利用可能なバージョン間での 3 ウェイマージを行う (実験的)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "状況を検討するための新しいシェルを起動" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "変更された設定ファイル ${BASENAME} について何を行いたいですか?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "設定ファイル ${FILE} の新しいバージョン (${NEW}) が利用可能ですが、現在インストールされているバージョンは、ローカルで変更されています。" + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "バージョン間の行ごとの差異" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "3 ウェイマージ中に競合を発見しました" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"3 ウェイマージ中に競合を発見しました! `${dest_file}' を編集して手動でそれらを" +"整理してください。" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"ファイル `${dest_file}.${ERR_SUFFIX}' に設定ファイルのマージに失敗した記録が" +"保持されています。" diff --git a/debian/po/nl.po b/debian/po/nl.po new file mode 100644 index 0000000..91be9d8 --- /dev/null +++ b/debian/po/nl.po @@ -0,0 +1,146 @@ +# Dutch translation of ucf debconf templates. +# Copyright (C) 2006-2011 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the ucf package. +# Kurt De Bree <kdebree@telenet.be>, 2006. +# Jeroen Schot <schot@a-eskwadraat.nl>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf_3.0025\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2011-04-14 11:43+0200\n" +"Last-Translator: Jeroen Schot <schot@a-eskwadraat.nl>\n" +"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Gewijzigd configuratiebestand" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "installeer de versie van de pakketbeheerder" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "behoud de reeds geïnstalleerde versie" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "toon de verschillen tussen de versies" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "toon de verschillende versies zij-aan-zij" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "toon een 3-voudig verschil tussen de beschikbare versies" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "doe een 3-voudige samenvoeging tussen beschikbare versies (test)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "start een nieuwe shell om de situatie te onderzoeken" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Wat wilt u met het aangepaste configuratiebestand ${BASENAME} doen?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Een nieuwe versie van het configuratiebestand ${FILE} is beschikbaar, maar " +"de geïnstalleerde versie is lokaal gewijzigd." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Toon de verschillen tussen de versies" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Conflicten gevonden in de drievoudige samenvoeging" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Conflicten gevonden tijdens de drievoudige samenvoeging! Wijzig alstublieft `" +"${dest_file}` handmatig om dit op te lossen." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Het bestand `${dest_file}.${ERR_SUFFIX}' bevat een verslag van de mislukte " +"samenvoeging van het configuratiebestand." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Een nieuwe versie van het configuratiebestand ${FILE} is beschikbaar, " +#~ "maar de geïnstalleerde versie is lokaal gewijzigd." diff --git a/debian/po/pl.po b/debian/po/pl.po new file mode 100644 index 0000000..08dab0c --- /dev/null +++ b/debian/po/pl.po @@ -0,0 +1,164 @@ +# translation of ucf3002.po to Polish +# +# Translators, if you are not familiar with the PO format, gettext +# documentation is worth reading, especially sections dedicated to +# this format, e.g. by running: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Some information specific to po-debconf are available at +# /usr/share/doc/po-debconf/README-trans +# or http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# Developers do not need to manually edit POT or PO files. +# +# Wojciech Zaręba <wojtekz@comp.waw.pl>, 2007. +# Michał Kułach <michal.kulach@gmail.com>, 2012, 2014. +msgid "" +msgstr "" +"Project-Id-Version: ucf3002\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-10 16:20+0200\n" +"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n" +"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n" +"Language: pl\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.4\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Zmodyfikowany plik konfiguracyjny" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "zainstalowanie wersji przygotowanej przez opiekuna pakietu" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "zachowanie lokalnie zainstalowanej wersji" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "pokazanie różnic pomiędzy wersjami" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "pokazanie różnic - obok siebie - pomiędzy wersjami" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "pokazanie różnic pomiędzy trzema dostępnymi wersjami" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "scalenie zmian pomiędzy 3 dostępnymi wersjami (eksperymentalne)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "uruchomienie powłoki w celu zbadania sytuacji" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"Jakie działanie ma zostać wykonane w związku z modyfikacją pliku ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Dostępna jest nowa wersja (${NEW}) pliku konfiguracyjnego ${FILE}, ale obecna " +"wersja " +"została lokalnie zmodyfikowana." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Różnice pomiędzy wersjami - wiersz po wierszu" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Znaleziono konflikt podczas scalania pomiędzy trzema wersjami" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Wystąpił konflikt podczas scalania pomiędzy trzema wersjami! Proszę dokonać " +"edycji \"${dest_file}\" i rozwiązać problem samodzielnie." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Plik \"${dest_file}.${ERR_SUFFIX}\" posiada wpis o niepoprawnym scalaniu " +"pliku konfiguracyjnego." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Dostępna jest nowa wersja pliku konfiguracyjnego ${FILE}, ale obecna " +#~ "wersja została lokalnie zmodyfikowana." + +#, fuzzy +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "Proszę wybrać akcję do wykonania na pliku ${BASENAME}:" diff --git a/debian/po/pt.po b/debian/po/pt.po new file mode 100644 index 0000000..85de385 --- /dev/null +++ b/debian/po/pt.po @@ -0,0 +1,143 @@ +# Portuguese translation of ucf's debconf messages. +# Copyright (C) 2007 the ucf's copyright holder +# This file is distributed under the same license as the ucf package. +# +# 2007, Pedro Ribeiro <p.m42.ribeiro@gmail.com> +# +# Bruno Queiros <brunomiguelqueiros@sapo.pt>, 2007. +# Américo Monteiro <a_monteiro@gmx.com>, 2010, 2014. +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0028\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 13:06+0100\n" +"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n" +"Language-Team: Portuguese <traduz@debianpt.org>\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Ficheiro de configuração modificado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalar a versão do criador do pacote" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "manter a versão actualmente instalada" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "mostrar a diferença entre as versões" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "mostrar uma diferença lado-a-lado entre as versões" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "mostrar uma diferença em 3 vias entre as versões disponíveis" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "" +"fazer uma fusão em 3 vias entre versões disponíveis do ficheiro " +"(experimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "iniciar uma nova consola para examinar a situação" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"O que deseja fazer acerca do ficheiro de configuração modificado ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Está disponível nova versão (${NEW}) do ficheiro de configuração ${FILE}, " +"mas a versão actualmente instalada foi modificada localmente." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Diferenças entre as versões linha por linha" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Conflitos encontrados na fusão de três vias" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Conflitos encontrados na fusão de três vias! Por favor edite '${dest_file}' " +"e organize-os manualmente." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"O ficheiro '${dest_file}.${ERR_SUFFIX}' tem um registo da fusão falhada do " +"ficheiro de configuração." + diff --git a/debian/po/pt_BR.po b/debian/po/pt_BR.po new file mode 100644 index 0000000..33440b4 --- /dev/null +++ b/debian/po/pt_BR.po @@ -0,0 +1,151 @@ +# Debconf translations for ucf. +# Copyright (C) 2014 THE ucf'S COPYRIGHT HOLDER +# This file is distributed under the same license as the ucf package. +# Flamarion Jorge <jorge.flamarion@gmail.com>, 2010. +# Adriano Rafael Gomes <adrianorg@arg.eti.br>, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-14 23:25-0300\n" +"Last-Translator: Adriano Rafael Gomes <adrianorg@arg.eti.br>\n" +"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian." +"org>\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Arquivo de configuração modificado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "instalar a versão do mantenedor do pacote" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "manter a versão local atualmente instalada" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "exibir as diferenças entre as versões" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "exibir as diferenças entre as versões lado-a-lado" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "exibir as diferenças entre as 3 versões disponíveis" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "juntar as 3 versões disponíveis (experimental)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "iniciar um novo shell para examinar a situação" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" +"O que você quer fazer sobre o arquivo de configuração modificado ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Uma nova versão (${NEW}) do arquivo de configuração ${FILE} está disponível, " +"mas a versão atualmente instalada foi modificada localmente." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Diferenças entre as versões linha por linha" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Conflitos encontrados na junção das três versões" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Foram encontrados conflitos durante a junção das três versões! Por favor " +"edite '${dest_file}' e os corrija manualmente." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"O arquivo '${dest_file}.${ERR_SUFFIX}' contém um registro da falha na junção " +"do arquivo de configuração." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Uma nova versão do arquivo de configuração ${FILE} está disponível, mas a " +#~ "versão atualmente instalada foi modificada localmente." + +#~| msgid "What would you like to do about ${BASENAME}?" +#~ msgid "What do you want to do about modified configration file ${BASENAME}?" +#~ msgstr "O que você gostaria de fazer em relação a ${BASENAME}?" diff --git a/debian/po/ru.po b/debian/po/ru.po new file mode 100644 index 0000000..45bb625 --- /dev/null +++ b/debian/po/ru.po @@ -0,0 +1,145 @@ +# translation of ru.po to Russian +# This file is distributed under the same license as the ucf package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# +# Yuri Kozlov <kozlov.y@gmail.com>, 2006, 2007. +# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2014. +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0028\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 19:10+0400\n" +"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" +"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Изменён файл настройки" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "установить версию из пакета" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "сохранить установленную локальную версию" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "показать различия между версиями" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "показать различия между версиями параллельно" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "показать 3-x стороннее различие между доступными версиями" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "3-x стороннее слияние доступных версий (эксперимен. режим)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "запустить новую оболочку для прояснения ситуации" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Что нужно сделать с изменённым файлом настройки ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Доступна новая версия (${NEW}) файла настройки ${FILE}, но версия файла, " +"находящаяся в системе, была изменёна локально." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Различия между версиями построчно" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Проблемы при 3-x стороннем слиянии" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Обнаружены конфликты при 3-x стороннем слиянии! Отредактируйте `" +"${dest_file}' и сопоставьте их вручную." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Файл `${dest_file}.${ERR_SUFFIX}' содержит элементы, которые не дают " +"объединить файлы настройки." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Доступна новая версия файла настройки ${FILE}, но версия файла, " +#~ "находящаяся в системе, была изменёна локально." diff --git a/debian/po/sk.po b/debian/po/sk.po new file mode 100644 index 0000000..852dc0b --- /dev/null +++ b/debian/po/sk.po @@ -0,0 +1,144 @@ +# Slovak translations for ucf package +# Slovenské preklady pre balík ucf. +# Copyright (C) 2011 THE ucf'S COPYRIGHT HOLDER +# This file is distributed under the same license as the ucf package. +# Slavko <linux@slavino.sk>, 2011, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0028\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-09 18:58+0200\n" +"Last-Translator: Slavko <linux@slavino.sk>\n" +"Language-Team: slovenčina <linux@slavino.sk>\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Gtranslator 2.91.6\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Zmenený konfiguračný súbor" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "nainštalovať verziu správcu balíka" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "zachovať aktuálne nainštalovanú lokálnu verziu" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "zobraziť rozdiely medzi verziami" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "zobraziť rozdiely medzi verziami vedľa seba" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "zobraziť trojcestný rozdiel medzi dostupnými verziami" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "urobiť trojcestné zlúčenie dostupných verzií (experimentálne)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "spustiť nový shell na preverenie situácie" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Čo chcete urobiť so zmeneným konfiguračným súborom ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Je dostupná nová verzia (${NEW}) konfiguračného súboru ${FILE}, ale aktuálne " +"nainštalovaná verzia bola lokálne upravená." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Rozdiely medzi verziami, riadok po riadku" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Zistené konflikty pri trojcestnom zlúčení" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Zistené konflikty pri trojcestnom zlúčení! Prosím upravte „${dest_file}” a " +"opravte ich manuálne." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Súbor „${dest_file}.${ERR_SUFFIX}” má záznam o neúspešnom zlúčení " +"konfiguračného súboru." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Je dostupná nová verzia konfiguračného súboru ${FILE}, ale aktuálne " +#~ "nainštalovaná verzia bola lokálne upravená." diff --git a/debian/po/sv.po b/debian/po/sv.po new file mode 100644 index 0000000..4ca5fc6 --- /dev/null +++ b/debian/po/sv.po @@ -0,0 +1,143 @@ +# Swedish translation for ucf. +# Copyright (C) 2009, 2014 Martin Bagge <brother@bsnet.se> +# This file is distributed under the same license as the ucf package. +# +# Martin Bagge <brother@bsnet.se>, 2009, 2014. +# Daniel Nylander <po@danielnylander.se>, 2007. +msgid "" +msgstr "" +"Project-Id-Version: ucf 2.002\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2014-05-07 11:12+0100\n" +"Last-Translator: Martin Bagge / brother <brother@bsnet.se>\n" +"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n" +"Language: Swedish\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Ändrad konfigurationsfil" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "installera paketansvariges version" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "behåll den lokalt installerade version" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "visa skillnaderna mellan versionerna" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "visa skillnaderna sida vid sida mellan versionerna" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "visa en 3-vägs skillnad mellan tillgängliga versioner" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "gör en 3-vägs sammanslagning mellan versionerna (experimentell)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "starta ett nytt skal för att undersöka situationen" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Vad vill du göra med den uppdaterade filen ${BASENAME}?" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"En ny version (${NEW}) av konfigurationsfilen ${FILE} finns tillgänglig, men " +"versionen som är installerad har ändrats lokalt." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Visa skillnaderna rad för rad mellan versionerna" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Konflikter i trevägssammanslagning" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"En eller flera konflikter uppstod vid trevägssammanslagningen! Redigera " +"\"${dest_file}\" och lös konflikterna manuellt." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Filen \"${dest_file}.${ERR_SUFFIX}\" innehåller en notering av den " +"misslyckade sammanslagningen av inställningsfilerna." + +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "En ny version av konfigurationsfilen ${FILE} finns tillgänglig, men " +#~ "versionen som är installerad har ändrats lokalt." diff --git a/debian/po/templates.pot b/debian/po/templates.pot new file mode 100644 index 0000000..f53c455 --- /dev/null +++ b/debian/po/templates.pot @@ -0,0 +1,129 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ucf\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" diff --git a/debian/po/vi.po b/debian/po/vi.po new file mode 100644 index 0000000..02e8742 --- /dev/null +++ b/debian/po/vi.po @@ -0,0 +1,152 @@ +# Vietnamese translation for UCF. +# Copyright © 2009 Free Software Foundation, Inc. +# Clytie Siddall <clytie@riverland.net.au>, 2005-2009. +# +msgid "" +msgstr "" +"Project-Id-Version: ucf 3.0023\n" +"Report-Msgid-Bugs-To: ucf@packages.debian.org\n" +"POT-Creation-Date: 2014-05-07 01:28-0700\n" +"PO-Revision-Date: 2009-10-14 19:51+0930\n" +"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" +"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" + +#. Type: title +#. Description +#: ../templates:2001 +msgid "Modified configuration file" +msgstr "Tập tin cấu hình đã sửa đổi" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "install the package maintainer's version" +msgstr "cài đặt phiên bản của nhà duy trì gói" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "keep the local version currently installed" +msgstr "giữ phiên bản cục bộ được cài đặt hiện thời" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show the differences between the versions" +msgstr "hiển thị khác biệt giữa những phiên bản" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "show a side-by-side difference between the versions" +msgstr "hiển thị khác biệt cạnh nhau giữa những phiên bản" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "show a 3-way difference between available versions" +msgstr "hiển thị khác biệt ba hướng giữa những phiên bản sẵn sàng" + +# do a 3 way merge between available versions of the file [Very +# Experimental] +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#: ../templates:3001 +msgid "do a 3-way merge between available versions (experimental)" +msgstr "hoà trộn ba hướng những phiên bản sẵn sàng (vẫn thực nghiệm)" + +#. Type: select +#. Choices +#. Translators, please keep translations *short* (less than 65 columns) +#. Type: select +#. Choices +#: ../templates:3001 ../templates:4001 +msgid "start a new shell to examine the situation" +msgstr "khởi chạy trình bao mới để khám xét trường hợp" + +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +msgid "What do you want to do about modified configuration file ${BASENAME}?" +msgstr "Đối với tập tin cấu hình bị sửa đổi ${BASENAME} muốn làm gì vậy?" + +# A new version of configuration file ${FILE} is available, but your +# version has been locally modified. +#. Type: select +#. Description +#. Type: select +#. Description +#: ../templates:3002 ../templates:4002 +#, fuzzy +#| msgid "" +#| "A new version of configuration file ${FILE} is available, but the version " +#| "installed currently has been locally modified." +msgid "" +"A new version (${NEW}) of configuration file ${FILE} is available, but the " +"version installed currently has been locally modified." +msgstr "" +"Có sẵn một phiên bản mới của tập tin cấu hình ${FILE}, nhưng phiên bản được " +"cài đặt hiện thời đã bị sửa đổi cục bộ." + +#. Type: note +#. Description +#: ../templates:5001 +msgid "Line by line differences between versions" +msgstr "Khác biệt từng dòng giữa những phiên bản" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "Conflicts found in three-way merge" +msgstr "Xung đột được tìm trong sự hoà trộn ba hướng" + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"Conflicts found during three-way merge! Please edit `${dest_file}' and sort " +"them out manually." +msgstr "" +"Tìm thấy sự xung đột trong khi hoà trộn về ba hướng. Hãy sửa đổi tập tin " +"đích « ${dest_file} » và giải quyết bằng tay." + +#. Type: error +#. Description +#: ../templates:6001 +msgid "" +"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of " +"the configuration file." +msgstr "" +"Tập tin đích « ${dest_file}.${ERR_SUFFIX} » đã ghi lưu tiến trình hoà trộn " +"bị lỗi của tập tin cấu hình." + +# A new version of configuration file ${FILE} is available, but your +# version has been locally modified. +#~ msgid "" +#~ "A new version of configuration file ${FILE} is available, but the version " +#~ "installed currently has been locally modified." +#~ msgstr "" +#~ "Có sẵn một phiên bản mới của tập tin cấu hình ${FILE}, nhưng phiên bản " +#~ "được cài đặt hiện thời đã bị sửa đổi cục bộ." diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..cbe925d --- /dev/null +++ b/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ 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/templates b/debian/templates new file mode 100644 index 0000000..5653cf3 --- /dev/null +++ b/debian/templates @@ -0,0 +1,46 @@ +# These templates have been reviewed by the debian-l10n-english +# team +# +# If modifications/additions/rewording are needed, please ask +# for an advice to debian-l10n-english@lists.debian.org +# +# Even minor modifications require translation updates and such +# changes should be coordinated with translators and reviewers. + +Template: ucf/title +Type: title +_Description: Modified configuration file + +Template: ucf/changeprompt_threeway +Type: select +# Translators, please keep translations *short* (less than 65 columns) +__Choices: install the package maintainer's version, keep the local version currently installed, show the differences between the versions, show a side-by-side difference between the versions, show a 3-way difference between available versions, do a 3-way merge between available versions (experimental), start a new shell to examine the situation +Choices-C: install_new, keep_current, diff, sdiff, diff_threeway, merge_threeway, shell +Default: keep_current +_Description: What do you want to do about modified configuration file ${BASENAME}? + A new version (${NEW}) of configuration file ${FILE} is available, but the version installed + currently has been locally modified. + +Template: ucf/changeprompt +Type: select +__Choices: install the package maintainer's version, keep the local version currently installed, show the differences between the versions, show a side-by-side difference between the versions, start a new shell to examine the situation +Choices-C: install_new, keep_current, diff, sdiff, shell +Default: keep_current +_Description: What do you want to do about modified configuration file ${BASENAME}? + A new version (${NEW}) of configuration file ${FILE} is available, but the version installed + currently has been locally modified. + +Template: ucf/show_diff +Type: note +#flag:translate!:2 +_Description: Line by line differences between versions + ${DIFF} + +Template: ucf/conflicts_found +Type: error +_Description: Conflicts found in three-way merge + Conflicts found during three-way merge! Please edit `${dest_file}' and sort + them out manually. + . + The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of + the configuration file. diff --git a/debian/ucf.lintian-overrides b/debian/ucf.lintian-overrides new file mode 100644 index 0000000..3ec2530 --- /dev/null +++ b/debian/ucf.lintian-overrides @@ -0,0 +1,7 @@ +ucf: no-debconf-config +ucf: debconf-is-not-a-registry usr/bin/ucf +ucf: unused-debconf-template ucf/title +ucf: unused-debconf-template ucf/changeprompt_threeway +ucf: unused-debconf-template ucf/changeprompt +ucf: unused-debconf-template ucf/show_diff +ucf: unused-debconf-template ucf/conflicts_found diff --git a/debian/ucf.postinst b/debian/ucf.postinst new file mode 100755 index 0000000..47e9d47 --- /dev/null +++ b/debian/ucf.postinst @@ -0,0 +1,232 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# postinst --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 11:25:07 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Tue Apr 11 13:20:53 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 14 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 5401e9ef-39cc-4aee-96a4-61dfb8f32cf7 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# + +# Abort if any command returns an error value +set -e + +package_name=ucf + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + +# This script is called as the last step of the installation of the +# package. All the package's files are in place, dpkg has already done +# its automatic conffile handling, and all the packages we depend of +# are already fully installed and configured. +# summary of how this script can be called: +# * <postinst> `configure' <most-recently-configured-version> +# * <old-postinst> `abort-upgrade' <new version> +# * <conflictor's-postinst> `abort-remove' `in-favour' <package> +# <new-version> +# * <deconfigured's-postinst> `abort-deconfigure' `in-favour' +# <failed-install-package> <version> `removing' +# <conflicting-package> <version> +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package +# +# quoting from the policy: +# Any necessary prompting should almost always be confined to the +# post-installation script, and should be protected with a conditional +# so that unnecessary prompting doesn't happen if a package's +# installation fails and the `postinst' is called with `abort-upgrade', +# `abort-remove' or `abort-deconfigure'. + +# The following idempotent stuff doesn't generally need protecting +# against being run in the abort-* cases. + +# Install info files into the dir file +# install-info --quiet --section "section pattern" "Section Title" \ +# --description="Name of the document" /usr/info/${package_name}.info + +# Create stub directories under /usr/local +# if test ! -d /usr/local/lib/${package_name}; then +# if test ! -d /usr/local/lib; then +# if mkdir /usr/local/lib; then +# chown root.staff /usr/local/lib || true +# chmod 2775 /usr/local/lib || true +# fi +# fi +# if mkdir /usr/local/lib/${package_name}; then +# chown root.staff /usr/local/lib/${package_name} || true +# chmod 2775 /usr/local/lib/${package_name} || true +# fi +# fi + +# Ensure the menu system is updated +# [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus + +# Arrange for a daemon to be started at system boot time +# update-rc.d ${package_name} default >/dev/null + +case "$1" in + configure) + # Configure this package. If the package must prompt the user for + # information, do it here. + # Install emacs lisp files + #if [ -x /usr/lib/emacsen-common/emacs-package-install ]; then + # /usr/lib/emacsen-common/emacs-package-install $package_name + #fi + + + # Activate menu-methods script + # chmod a+x /etc/menu-methods/${package_name} + + # Update ld.so cache + # ldconfig + + # Make our version of a program available + # update-alternatives \ + # --install /usr/bin/program program /usr/bin/alternative 50 \ + # --slave /usr/man/man1/program.1.gz program.1.gz \ + # /usr/man/man1/alternative.1.gz + + # Tell ucf that the file in /usr/share/foo is the latest + # maintainer version, and let it handle how to manage the real + # confuguration file in /etc. This is how a static configuration + # file can be handled: + #if which ucf >/dev/null 2>&1; then + # ucf /usr/share/${package_name}/configuration /etc/${package_name}.conf + #fi + + touch /var/lib/ucf/hashfile + touch /var/lib/ucf/registry + + ### We could also do this on the fly. The following is from Tore + ### Anderson: + + # This package uses debconf to ask a question, so source the debconf + # confmodule as early as possible. However, it does not depend on debconf, + # so debconf may not be installed. + if [ -e /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_capb + fi + + + ### find out what the user answered. + # db_get foo/run_on_boot + # run_on_boot=$RET + # db_stop + + ### safely create a temporary file to generate our suggested + ### configuration file. + # tempfile=`tempfile` + # cat << _eof > $tempfile + ### Configuration file for Foo. + + ### this was answered by you, the user in a debconf dialogue + # RUNONBOOT=$run_on_boot + + ### this was not, as it has a sane default value. + # COLOUROFSKY=blue + + #_eof + + ### Note that some versions of debconf do not release stdin, so + ### the following invocation of ucf may not work, since the stdin + ### is never coneected to ucfr. + + ### now, invoke ucf, which will take care of the rest, and ask + ### the user if he wants to update his file, if it is modified. + #ucf $tempfile /etc/foo.conf + + ### done! now we'll just clear up our cruft. + #rm -f $tempfile + + + + # There are three sub-cases: + if test "${2+set}" != set; then + # We're being installed by an ancient dpkg which doesn't remember + # which version was most recently configured, or even whether + # there is a most recently configured version. + : + + elif test -z "$2" || test "$2" = "<unknown>"; then + # The package has not ever been configured on this system, or was + # purged since it was last configured. + : + + else + # Version $2 is the most recently configured version of this + # package. + : + + fi ;; + abort-upgrade) + # Back out of an attempt to upgrade this package FROM THIS VERSION + # to version $2. Undo the effects of "prerm upgrade $2". + : + + ;; + abort-remove) + if test "$2" != in-favour; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to remove this package, which was due to + # a conflict with package $3 (version $4). Undo the effects of + # "prerm remove in-favour $3 $4". + : + + ;; + abort-deconfigure) + if test "$2" != in-favour || test "$5" != removing; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to deconfigure this package, which was + # due to package $6 (version $7) which we depend on being removed + # to make way for package $3 (version $4). Undo the effects of + # "prerm deconfigure in-favour $3 $4 removing $6 $7". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +# Install doc base documentation +#if which install-docs >/dev/null 2>&1; then +# if [ -e /usr/share/doc-base/${package_name} ]; then +# install-docs -i /usr/share/doc-base/${package_name} +# fi +#fi + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/ucf.postrm b/debian/ucf.postrm new file mode 100755 index 0000000..437d6d3 --- /dev/null +++ b/debian/ucf.postrm @@ -0,0 +1,185 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# postrm --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 12:22:20 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Tue Apr 11 13:20:24 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 12 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 56802d51-d980-4822-85c0-28fce19ed430 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +# Abort if any command returns an error value +set -e + +package_name=ucf + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + +# This script is called twice during the removal of the package; once +# after the removal of the package's files from the system, and as +# the final step in the removal of this package, after the package's +# conffiles have been removed. +# summary of how this script can be called: +# * <postrm> `remove' +# * <postrm> `purge' +# * <old-postrm> `upgrade' <new-version> +# * <new-postrm> `failed-upgrade' <old-version> +# * <new-postrm> `abort-install' +# * <new-postrm> `abort-install' <old-version> +# * <new-postrm> `abort-upgrade' <old-version> +# * <disappearer's-postrm> `disappear' <r>overwrit>r> <new-version> +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +# Ensure the menu system is updated +# [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus + +case "$1" in + remove) + # This package is being removed, but its configuration has not yet + # been purged. + : + + # Remove diversion + # dpkg-divert --package ${package_name} --remove --rename \ + # --divert /usr/bin/other.real /usr/bin/other + + # ldconfig is NOT needed during removal of a library, only during + # installation + + ;; + purge) + # This package has previously been removed and is now having + # its configuration purged from the system. + + # we mimic dpkg as closely as possible, so we remove configuration + # files with dpkg backup extensions too: + ### Some of the following is from Tore Anderson: + # for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist; do + # rm -f /etc/${package_name}.conf$ext + # done + + # remove the configuration file itself + # rm -f /etc/${package_name}.conf + + rm -f /var/lib/ucf/hashfile + rm -f /var/lib/ucf/hashfile.* + rm -f /var/lib/ucf/registry + rm -f /var/lib/ucf/registry.* + if [ -d /var/lib/ucf/cache ]; then + find /var/lib/ucf/cache -type f -print0 | xargs -0r /bin/rm -f + rmdir /var/lib/ucf/cache 1>&2 || true + fi + + # and finally clear it out from the ucf database + # ucf --purge /etc/${package_name}.conf + + # Remove symlinks from /etc/rc?.d + # update-rc.d ${package_name} remove >/dev/null + + if [ -e /usr/share/debconf/confmodule ]; then + # Purge this package's data from the debconf database. + . /usr/share/debconf/confmodule + db_purge + fi + + # This package has previously been removed and is now having + # its configuration purged from the system. + # for flavour in emacs20 emacs21; do + # STARTDIR=/etc/$flavour/site-start.d; + # STARTFILE="${package_name}-init.el"; + # if [ -e "$STARTDIR/20$STARTFILE" ]; then + # rm -f "$STARTDIR/20$STARTFILE" + # fi + # done + + ;; + disappear) + if test "$2" != overwriter; then + echo "$0: undocumented call to \`postrm $*'" 1>&2 + exit 0 + fi + # This package has been completely overwritten by package $3 + # (version $4). All our files are already gone from the system. + # This is a special case: neither "prerm remove" nor "postrm remove" + # have been called, because dpkg didn't know that this package would + # disappear until this stage. + : + + ;; + upgrade) + # About to upgrade FROM THIS VERSION to version $2 of this package. + # "prerm upgrade" has been called for this version, and "preinst + # upgrade" has been called for the new version. Last chance to + # clean up. + : + + ;; + failed-upgrade) + # About to upgrade from version $2 of this package TO THIS VERSION. + # "prerm upgrade" has been called for the old version, and "preinst + # upgrade" has been called for this version. This is only used if + # the previous version's "postrm upgrade" couldn't handle it and + # returned non-zero. (Fix old postrm bugs here.) + : + + ;; + abort-install) + # Back out of an attempt to install this package. Undo the effects of + # "preinst install...". There are two sub-cases. + : + + if test "${2+set}" = set; then + # When the install was attempted, version $2's configuration + # files were still on the system. Undo the effects of "preinst + # install $2". + : + + else + # We were being installed from scratch. Undo the effects of + # "preinst install". + : + + fi ;; + abort-upgrade) + # Back out of an attempt to upgrade this package from version $2 + # TO THIS VERSION. Undo the effects of "preinst upgrade $2". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + + +exit 0 diff --git a/debian/ucf.preinst b/debian/ucf.preinst new file mode 100755 index 0000000..846e31a --- /dev/null +++ b/debian/ucf.preinst @@ -0,0 +1,105 @@ +#! /bin/sh +# -*- Mode: Sh -*- +# preinst --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Nov 14 12:12:04 2003 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Tue Nov 18 22:35:57 2003 +# Last Machine Used: glaurung.green-gryphon.com +# Update Count : 4 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: d6a3672d-acb3-4f6c-9984-bad17d8ce0aa +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# + + +# Abort if any command returns an error value +set -e + +package_name=ucf + +if [ -z "$package_name" ]; then + print >&2 "Internal Error. Please report a bug." + exit 1; +fi + + +statedir='/var/lib/ucf'; + +# This script is called before this version of this package is installed. +# When this script is called, the package's files have not been unpacked +# yet. + +case "$1" in + install) + # About to install this package. + : + + # Add a diversion. This is one of the few things which may be done + # before installing any files from the package. + # dpkg-divert --package foo --add --rename \ + # --divert /usr/bin/other.real /usr/bin/other + + echo >&2 "Moving old data out of the way" + for i in $(seq 6 -1 0); do + if [ -e "${statedir}/hashfile.${i}" ]; then + cp -f "${statedir}/hashfile.${i}" \ + "${statedir}/hashfile.$(($i+1))" + fi + done + if [ -e "$statedir/hashfile" ]; then + cp -f "$statedir/hashfile" "$statedir/hashfile.0" + fi + + # There are two sub-cases: + if test "${2+set}" = set; then + # The configuration files from version $2 of this package are + # still on the system. + : + + else + # There is no existing configuration; install from scratch. + : + + fi ;; + upgrade) + # About to upgrade this package from version $2 TO THIS VERSION. + # "prerm upgrade" has already been called for the old version of + # this package. + : + + ;; + abort-upgrade) + # Back out of an attempt to upgrade this package FROM THIS VERSION to + # version $2. Undo the effects of "postrm upgrade $2". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/examples/ChangeLog b/examples/ChangeLog new file mode 100644 index 0000000..3208477 --- /dev/null +++ b/examples/ChangeLog @@ -0,0 +1,6 @@ +2007-04-17 Manoj Srivastava <srivasta@debian.org> + + * postrm: srivasta@debian.org--lenny/ucf--devel--2.0--base-0 Now + ucf creates .ucf-new, .ucf-old, and .ucf-dist suffixes, + so the example is updated to clean the new names. + diff --git a/examples/postinst b/examples/postinst new file mode 100644 index 0000000..7977233 --- /dev/null +++ b/examples/postinst @@ -0,0 +1,153 @@ +#! /bin/sh +# postinst.skeleton +# Skeleton maintainer script showing all the possible cases. +# Written by Charles Briscoe-Smith, March-June 1998. Public Domain. + +# Abort if any command returns an error value +set -e + +# This script is called as the last step of the installation of the +# package. All the package's files are in place, dpkg has already done +# its automatic conffile handling, and all the packages we depend of +# are already fully installed and configured. + +# The following idempotent stuff doesn't generally need protecting +# against being run in the abort-* cases. + +# Install info files into the dir file +: install-info --quiet --section "section pattern" "Section Title" \ +: --description="Name of the document" /usr/info/foo.info + +# Create stub directories under /usr/local +: if test ! -d /usr/local/lib/foo; then +: if test ! -d /usr/local/lib; then +: if mkdir /usr/local/lib; then +: chown root.staff /usr/local/lib || true +: chmod 2775 /usr/local/lib || true +: fi +: fi +: if mkdir /usr/local/lib/foo; then +: chown root.staff /usr/local/lib/foo || true +: chmod 2775 /usr/local/lib/foo || true +: fi +: fi + +# Ensure the menu system is updated +: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus + +# Arrange for a daemon to be started at system boot time +: update-rc.d foo default >/dev/null + +case "$1" in + configure) + # Configure this package. If the package must prompt the user for + # information, do it here. + : + + # Activate menu-methods script + : chmod a+x /etc/menu-methods/foo + + # Update ld.so cache + : ldconfig + + # Make our version of a program available + : update-alternatives \ + : --install /usr/bin/program program /usr/bin/alternative 50 \ + : --slave /usr/share/man/man1/program.1.gz program.1.gz \ + : /usr/share/man/man1/alternative.1.gz + + # Tell ucf that the file in /usr/share/foo is the latest + # maintainer version, and let it handle how to manage the real + # confuguration file in /etc. This is how a static configuration + # file can be handled: + ucf /usr/share/foo/configuration /etc/foo.conf + ucfr foo /etc/foo.conf + + ### We could also do this on the fly. The following is from Tore + ### Anderson: + + #. /usr/share/debconf/confmodule + + ### find out what the user answered. + # db_get foo/run_on_boot + # run_on_boot=$RET + # db_stop + + ### safely create a temporary file to generate our suggested + ### configuration file. + # tempfile=`tempfile` + # cat << _eof > $tempfile + ### Configuration file for Foo. + + ### this was answered by you, the user in a debconf dialogue + # RUNONBOOT=$run_on_boot + + ### this was not, as it has a sane default value. + # COLOUROFSKY=blue + + #_eof + + ### Note that some versions of debconf do not release stdin, so + ### the following invocation of ucf may not work, since the stdin + ### is never coneected to ucfr. + + ### now, invoke ucf, which will take care of the rest, and ask + ### the user if he wants to update his file, if it is modified. + #ucf $tempfile /etc/foo.conf + + ### done! now we'll just clear up our cruft. + #rm -f $tempfile + + + # There are three sub-cases: + if test "${2+set}" != set; then + # We're being installed by an ancient dpkg which doesn't remember + # which version was most recently configured, or even whether + # there is a most recently configured version. + : + + elif test -z "$2" -o "$2" = "<unknown>"; then + # The package has not ever been configured on this system, or was + # purged since it was last configured. + : + + else + # Version $2 is the most recently configured version of this + # package. + : + + fi ;; + abort-upgrade) + # Back out of an attempt to upgrade this package FROM THIS VERSION + # to version $2. Undo the effects of "prerm upgrade $2". + : + + ;; + abort-remove) + if test "$2" != in-favour; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to remove this package, which was due to + # a conflict with package $3 (version $4). Undo the effects of + # "prerm remove in-favour $3 $4". + : + + ;; + abort-deconfigure) + if test "$2" != in-favour -o "$5" != removing; then + echo "$0: undocumented call to \`postinst $*'" 1>&2 + exit 0 + fi + # Back out of an attempt to deconfigure this package, which was + # due to package $6 (version $7) which we depend on being removed + # to make way for package $3 (version $4). Undo the effects of + # "prerm deconfigure in-favour $3 $4 removing $6 $7". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +exit 0 diff --git a/examples/postrm b/examples/postrm new file mode 100644 index 0000000..cfcfe00 --- /dev/null +++ b/examples/postrm @@ -0,0 +1,115 @@ +#! /bin/sh +# postrm.skeleton +# Skeleton maintainer script showing all the possible cases. +# Written by Charles Briscoe-Smith, March-June 1998. Public Domain. + +# Abort if any command returns an error value +set -e + +# This script is called twice during the removal of the package; once +# after the removal of the package's files from the system, and as +# the final step in the removal of this package, after the package's +# conffiles have been removed. + +# Ensure the menu system is updated +: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus + +case "$1" in + remove) + # This package is being removed, but its configuration has not yet + # been purged. + : + + # Remove diversion + : dpkg-divert --package foo --remove --rename \ + : --divert /usr/bin/other.real /usr/bin/other + + # ldconfig is NOT needed during removal of a library, only during + # installation + + ;; + purge) + # This package has previously been removed and is now having + # its configuration purged from the system. + : + + # we mimic dpkg as closely as possible, so we remove configuration + # files with dpkg backup extensions too: + ### Some of the following is from Tore Anderson: + for ext in '~' '%' .bak .ucf-new .ucf-old .ucf-dist; do + rm -f /etc/foo.conf$ext + done + + # remove the configuration file itself + rm -f /etc/foo.conf + + # and finally clear it out from the ucf database + if which ucf >/dev/null; then + ucf --purge /etc/foo.conf + fi + if which ucfr >/dev/null; then + ucfr --purge foo /etc/foo.conf + fi + + # Remove symlinks from /etc/rc?.d + : update-rc.d foo remove >/dev/null + + ;; + disappear) + if test "$2" != overwriter; then + echo "$0: undocumented call to \`postrm $*'" 1>&2 + exit 0 + fi + # This package has been completely overwritten by package $3 + # (version $4). All our files are already gone from the system. + # This is a special case: neither "prerm remove" nor "postrm remove" + # have been called, because dpkg didn't know that this package would + # disappear until this stage. + : + + ;; + upgrade) + # About to upgrade FROM THIS VERSION to version $2 of this package. + # "prerm upgrade" has been called for this version, and "preinst + # upgrade" has been called for the new version. Last chance to + # clean up. + : + + ;; + failed-upgrade) + # About to upgrade from version $2 of this package TO THIS VERSION. + # "prerm upgrade" has been called for the old version, and "preinst + # upgrade" has been called for this version. This is only used if + # the previous version's "postrm upgrade" couldn't handle it and + # returned non-zero. (Fix old postrm bugs here.) + : + + ;; + abort-install) + # Back out of an attempt to install this package. Undo the effects of + # "preinst install...". There are two sub-cases. + : + + if test "${2+set}" = set; then + # When the install was attempted, version $2's configuration + # files were still on the system. Undo the effects of "preinst + # install $2". + : + + else + # We were being installed from scratch. Undo the effects of + # "preinst install". + : + + fi ;; + abort-upgrade) + # Back out of an attempt to upgrade this package from version $2 + # TO THIS VERSION. Undo the effects of "preinst upgrade $2". + : + + ;; + *) echo "$0: didn't understand being called with \`$1'" 1>&2 + exit 0;; +esac + +exit 0 @@ -0,0 +1,260 @@ +#!/bin/bash +# -*- Mode: Sh -*- +# lcf --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Mon Feb 25 12:04:52 2002 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Mon Feb 25 12:06:54 2002 +# Last Machine Used: glaurung.green-gryphon.com +# Update Count : 2 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# + +# make sure we exit on error +set -e + +# set the version and revision +progname="`basename \"$0\"`" +pversion='$Revision: 1.1 $' + +###################################################################### +######## ######### +######## Utility functions ######### +######## ######### +###################################################################### +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 +} + +withecho () { + echo " $@" >&2 + "$@" +} + +usageversion () { + cat >&2 <<END +Debian GNU/Linux $progname $pversion. + Copyright (C) 2002 Manoj Srivastava. +This is free software; see the GNU General Public Licence for copying +conditions. There is NO warranty. + +Usage: $progname [options] dest_file src_dir +Options: + -h, --help print this message + -s foo, --src-dir foo Set the src dir (historical md5sums live here) + -d [n], --debug [n] Set the Debug level to N + -n, --no-action Dry run. No action is actually taken. + -v, --verbose Make the script verbose + +By default, the directory the new_file lives in is assumed to be the src-dir, +which is where we look for any historical md5sums. + +END +} + +###################################################################### +######## ######### +######## Command line args ######### +######## ######### +###################################################################### +# +# Long term variables# +# +docmd='YES' +action='withecho' +DEBUG=0 +VERBOSE='' +statedir='/var/lib/ucf'; + + +# Note that we use `"$@"' to let each command-line parameter expand to a +# separate word. The quotes around `$@' are essential! +# We need TEMP as the `eval set --' would nuke the return value of getopt. +TEMP=`getopt -o hs:d:D::nv -n "$progname" \ + --long help,src-dir:,dest-dir:DEBUG::,no-action,verbose \ + -- "$@"` + +if [ $? != 0 ] ; then + echo "Error handling options.Terminating..." >&2 ; + exit 1 ; +fi + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +while true ; do + case "$1" in + -h|--help) usageversion; exit 0 ;; + -n|--no-action) action='echo'; docmd='NO'; shift ;; + -v|--verbose) VERBOSE=1; shift ;; + -s|--src-dir) + opt_source_dir="$2"; shift 2 ;; + -d|--debug) + # d has an optional argument. As we are in quoted mode, + # an empty parameter will be generated if its optional + # argument is not found. + case "$2" in + "") setq DEBUG 1 "The Debug value"; shift 2 ;; + *) setq DEBUG "$2" "The Debug value"; shift 2 ;; + esac ;; + --) shift ; break ;; + *) echo "Internal error!" ; exit 1 ;; + esac +done + +if [ $# != 2 ]; then + echo >&2 "*** ERROR: Need exactly two arguments, got $#"; + echo >&2 "" + usageversion; + exit 0 ; +fi + +setq dest_file "$1" "The Destination file"; +setq source_dir "$2" "The source directory"; + + +# Load site defaults and over rides. +if [ -f /etc/ucf.conf ]; then + . /etc/ucf.conf +fi + +# Command line, env variable, config file, or default +if [ "X$source_dir" = "X" ]; then + if [ ! "x$opt_source_dir" = "x" ]; then + setq source_dir "$opt_source_dir" "The Source directory" + elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then + setq source_dir "$UCF_SOURCE_DIR" "The Source directory" + elif [ ! "x$conf_source_dir" = "x" ]; then + setq source_dir "$conf_source_dir" "The Source directory" + fi +fi + +if [ ! -d "$source_dir" ]; then + echo >&2 "The source dir does not exist. Stopping now." + exit 2; +fi + +if [ "X$dest_file" = "X" ]; then + echo >&2 "Uknown file to search for. Stopping now." + exit 2; +fi + +old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d"; +old_mdsum_file="$source_dir/"$(basename "${new_file}")".md5sum"; + + +if [ -e "$statedir/hashfile" -a ! -r "$statedir/hashfile" ]; then + echo >&2 "$progname: do not have read privilege to the state data" + if [ "X$docmd" = "XYES" ]; then + exit 1; + fi +fi + +# test and see if this file exists in the database +if [ -e "$statedir/hashfile" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "The hash file exists"; + echo grep "[[:space:]]${dest_file}$" "$statedir/hashfile"; + grep "[[:space:]]${dest_file}$" "$statedir/hashfile" ; + fi + lastsum=$(grep "[[:space:]]${dest_file}$" "$statedir/hashfile" | \ + awk '{print $1;}' ); +fi + +if [ "X$lastsum" = "X" ]; then + echo >&2 "$progname: No record of file in databse. Stopping now." + exit 2; +fi + +if [ $DEBUG -gt 0 ]; then + cat <<EOF +The new start file is \`$new_file\' +The destination is \`$dest_file\' +The history is kept under \'$source_dir\' +EOF + if [ -s "$dest_file" ]; then + echo "The destination file exists, and has md5sum:" + md5sum "$dest_file" + else + echo "The destination file does not exist." + fi + if [ "X$lastsum" != "X" ]; then + echo "The old md5sum exists, and is:" + echo $lastsum + else + echo "The old md5sum does not exist." + fi + if [ -e "$new_file" ]; then + echo "The new file exists, and has md5sum:" + md5sum "$new_file" + else + echo "The new file does not exist." + fi + if [ -d "$old_mdsum_dir" ]; then + echo "The historical md5sum dir $old_mdsum_dir exists" + elif [ -f "$old_mdsum_file" ]; then + echo "The histotical md5sum file $old_mdsum_file exists" + else + echo "Historical md5sums are not available" + fi +fi + +if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then + if [ -d "$old_mdsum_dir" ]; then + for file in ${old_mdsum_dir}/*; do + oldsum=$(cat "$file" | awk '{print $1}'); + if [ "$oldsum" = "$destsum" ]; then +# Bingo! + echo $(cat "$file" | awk '{print $2}'); + exit 0; + fi + done + elif [ -f "$old_mdsum_file" ]; then + oldsum=$(grep "^${destsum}" "$old_mdsum_file") + if [ "X$oldsum" != "X" ]; then +# Bingo + echo $(grep "^${destsum}" "$old_mdsum_file" | awk '{print $2}') + exit 0; + fi + fi +# Well, nothing matched. We now check to see if the +# maintainer has an opinion on how to set the ``md5sum of the +# previously installed version'', since we have no way of +# determining that automatically. Please note that unless +# there are limited number of previously released packages +# (like just one), the maintainer is also making a guess at +# this point by supplying a historical md5sum default file. + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "Histotical md5sums did not match." + fi + if [ -d "$old_mdsum_dir" ]; then + if [ -e "${old_mdsum_dir}/default" ]; then + echo default; + exit 0; + fi + elif [ -f "$old_mdsum_file" ]; then + oldsum=$(grep "[[:space:]]default$" "$old_mdsum_file" | \ + awk '{print $1;}') + if [ "X$oldsum" != "X" ]; then +# Bingo + echo default; + exit 0; + fi + fi +fi + + +exit 0; @@ -0,0 +1,85 @@ +.\" -*- Mode: Nroff -*- +.\" lcf.1 --- +.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com ) +.\" Created On : Fri Feb 1 11:17:32 2002 +.\" Created On Node : glaurung.green-gryphon.com +.\" Last Modified By : Manoj Srivastava +.\" Last Modified On : Mon May 2 01:09:42 2005 +.\" Last Machine Used: glaurung.internal.golden-gryphon.com +.\" Update Count : 28 +.\" Status : Unknown, Use with caution! +.\" HISTORY : +.\" Description : +.\" +.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org> +.\" +.\" This is free documentation; 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. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +.\" 02111-1307, USA. +.\" +.\" $Id: lcf.1,v 1.1 2002/02/26 20:12:06 srivasta Exp $ +.TH LCF 1 "Feb 1 2002" "Debian" "Debian GNU/Linux manual" +.SH NAME +lcf \- Determine which of the historical versions of a config is installed +.SH SYNOPSIS +.B lcf +.I [options] +.I <Destination File Name> +.I <Historical MD5SUM source directory> +.SH DESCRIPTION +This script, given a destination file name, and a directory containing +md5sums of historical versions of the file, attempts to determine if +the installed version corresponds to a historical version. lcf uses +the same algorithm that ucf uses, and should exhibit the same +behaviour. +.PP +The source directory is the place where historical md5sums are +expected to live. Specifically, the historical md5sums are looked for +in either the file +.I ${filename}.md5sum, +or the subdirectory +.I ${filename}.md5sum.d/ +.SH OPTIONS +.TP +.B "-h, --help" +Print a short usage message +.TP +.B "-n, --no-action" +Dry run. Print the actions that would be taken if the script is +invoked, but take no action. +.TP +.B "-d [n], --debug [n]" +Set the debug level to the (optional) level +.I n +(n defaults to 1). This turns on copious debugging information. +.TP +.B "-v, --verbose" +Make the script be very verbose about setting internal variables. +.SH FILES +.PP +.I /var/lib/ucf/hashfile, +.I /etc/ucf.conf +.SH "SEE ALSO" +ucf(1) +ucf.conf(5). +.SH BUGS +There are no bugs. Any resemblance thereof is delirium. Really. +.SH AUTHOR +This manual page was written Manoj Srivastava <srivasta@debian.org>, +for the Debian GNU/Linux system. @@ -0,0 +1,1076 @@ +#!/bin/bash +# -*- Mode: Sh -*- +# updateConfFile.sh --- +# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com ) +# Created On : Fri Feb 1 03:41:47 2002 +# Created On Node : glaurung.green-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Tue Jun 6 09:48:22 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 186 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# This script attempts to provide conffile like handling for files not +# shipped in a Debian package, but handled by the postinst. Using this +# script, one may ship a bunch of default cofiguration files somewhere +# in /usr (/usr/share/<pkg> is a good location), and maintain files in +# /etc. +# +# The motivation for this script was to provide conffile like handling +# for start files for emacs lisp packages (for example, +# /etc/emacs21/site-stard.d/50psgml-init.el) These start files are not +# shipped with the package, instead, they are installed during the +# post installation configuration phase by the script +# /usr/lib/emacsen-common/emacs-package-install $package_name. +# +# This script is meant to be invoked by the packages install script at +# /usr/lib/emacsen-common/packages/install/$package_name for each +# flavour of installed emacsen by calling it with the proper values of +# new file (/usr/share/emacs/site-lisp/<pkg>/<pkg>-init.el), and dest file +# (/etc/emacs21/site-stard.d/50<pkg>-init.el)), and it should do the rest. +# + +# make sure we exit on error +set -e + +# set the version and revision +boseprogname="`basename \"$0\"`" +pversion='$Revision: 1.26 $' + +###################################################################### +######## ######### +######## Utility functions ######### +######## ######### +###################################################################### +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 >&2 "$progname: $3 is $2"; + fi + eval "$1=\"\$2\""; + fi +} + +# Use debconf to show the differences +show_diff() { + if [ -z "$1" ]; then + DIFF="There are no non-white space differences in the files." + else + if [ 99999 -lt $(echo $1 | wc -c | awk '{print $1; }') ]; then + DIFF="The differences between the files are too large to display." + else + DIFF="$1" + fi + fi + if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then + templ=ucf/show_diff + db_capb escape + db_subst $templ DIFF "$(printf %s "$DIFF" | debconf-escape -e)" + db_fset $templ seen false + db_input critical $templ || true + db_go || true + db_get $templ + # may contain sensitive information, so clear + # immediatly after use so it is never written + # to disk + db_subst $templ DIFF "" + db_reset $templ + db_capb + else + if [ -z $my_pager ]; then + echo "$DIFF" | sensible-pager + else + echo "$DIFF" | $my_pager + fi + fi +} + +withecho () { + echo " $@" >&2 + "$@" +} + +usageversion () { + cat >&2 <<END +Debian GNU/Linux $progname $pversion. + Copyright (C) 2002-2005 Manoj Srivastava. +This is free software; see the GNU General Public Licence for copying +conditions. There is NO warranty. + +Usage: $progname [options] new_file destination +Options: + -h, --help print this message + -s foo, --src-dir foo Set the src dir (historical md5sums live here) + --sum-file bar Force the historical md5sums to be read from + this file. Overrides any setting of --src-dir. + -d[n], --debug=[n] Set the Debug level to N. Please note there must + be no spaces before the debug level + -n, --no-action Dry run. No action is actually taken. + -v, --verbose Make the script verbose + --three-way Register this file in the cache, and turn on the + diff3 option allowing the merging of maintainer + changes into a (potentially modified) local + configuration file. ) + --state-dir bar Set the state directory to bar instead of the + default '/var/lib/ucf'. Used mostly for testing. + --debconf-ok Indicate that it is ok for ucf to use an already + running debconf instance for prompting. + --debconf-template bar + Specify an alternate, caller-provided debconf + template to use for prompting. +Usage: $progname -p destination + -p, --purge Remove any reference to destination from records + +By default, the directory the new_file lives in is assumed to be the src-dir, +which is where we look for any historical md5sums. + +END + +} + +###################################################################### +######## ######### +######## file and hash save/restore functions ######### +######## ######### +###################################################################### +purge_md5sum () { + for i in $(/usr/bin/seq 6 -1 0); do + if [ -e "${statedir}/hashfile.${i}" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -pf "${statedir}/hashfile.${i}" \ + "${statedir}/hashfile.$(($i+1))" + else + echo cp -pf "${statedir}/hashfile.${i}" \ + "${statedir}/hashfile.$(($i+1))" + fi + fi + done + if [ -e "$statedir/hashfile" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -pf "$statedir/hashfile" "$statedir/hashfile.0" + else + echo cp -pf "$statedir/hashfile" "$statedir/hashfile.0" + fi + if [ "X$docmd" = "XYES" ]; then + set +e + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile" + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 \ + || true; + fi + #echo "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile" + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \ + "$statedir/hashfile.tmp" || true; + if [ "X$docmd" = "XYES" ]; then + mv -f "$statedir/hashfile.tmp" "$statedir/hashfile" + else + echo mv -f "$statedir/hashfile.tmp" "$statedir/hashfile" + fi + set -e + fi + fi + test -n "$VERBOSE" && echo >&2 "The cache file is $cached_file" + if [ ! -z "$cached_file" -a -f "$statedir/cache/$cached_file" ]; then + $action rm -f "$statedir/cache/$cached_file" + fi +} + +replace_md5sum () { + for i in $(/usr/bin/seq 6 -1 0); do + if [ -e "${statedir}/hashfile.${i}" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -pf "${statedir}/hashfile.${i}" \ + "${statedir}/hashfile.$(($i+1))" + else + echo cp -pf "${statedir}/hashfile.${i}" \ + "${statedir}/hashfile.$(($i+1))" + fi + fi + done + if [ -e "$statedir/hashfile" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -pf "$statedir/hashfile" "$statedir/hashfile.0" + else + echo cp -pf "$statedir/hashfile" "$statedir/hashfile.0" + fi + if [ "X$docmd" = "XYES" ]; then + set +e + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\";" + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true; + md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >&2; + fi + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \ + "$statedir/hashfile.tmp" || true; + md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >> \ + "$statedir/hashfile.tmp"; + mv -f "$statedir/hashfile.tmp" "$statedir/hashfile" + set -e + else + echo "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\"" + echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\"; " + echo ") | sort > \"$statedir/hashfile\"" + fi + else + if [ "X$docmd" = "XYES" ]; then + md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" > \ + "$statedir/hashfile" + else + echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\" >" \ + "\"$statedir/hashfile\"" + fi + fi + file_size=$(stat -c '%s' "$orig_new_file") + if [ "X$THREEWAY" != "X" ] || [ $file_size -lt 25600 ]; then + $action cp -pf "$orig_new_file" "$statedir/cache/$cached_file" + fi + # cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" +} + +replace_conf_file () { + # do not mangle $dest_file since it's the one registered in the hashfile + # or we have been ask to register + real_file="$dest_file" + if [ -L "$dest_file" ]; then + real_file="$(readlink -nf $dest_file || :)" + if [ "x$real_file" = "x" ]; then + echo >&2 "$dest_file is a broken symlink!" + $action rm -f "$dest_file"; + real_file="$dest_file" + fi + fi + if [ -e "$real_file" ]; then + if [ -z "$RETAIN_OLD" ]; then + #echo "Saving ${real_file}.${OLD_SUFFIX}, in case." + if [ "x$VERBOSE" != "x" ]; then + echo >&2 "Not saving ${real_file}, since it was unmodified" + fi + else + $action cp -pf "${real_file}" "${real_file}.${OLD_SUFFIX}" + fi + fi + $action cp -pf "$new_file" "${real_file}" + replace_md5sum; +} + +# Escape single quotes in the arguments passed in +quote_single() { + echo "$1" | sed -e "s,','\\\\'',g" +} + + + +###################################################################### +######## ######### +######## Command line args ######### +######## ######### +###################################################################### +# +# Long term variables# +# +docmd='YES' +action='withecho' +action= +DEBUG=0 +VERBOSE='' +statedir='/var/lib/ucf'; +THREEWAY= + +DIST_SUFFIX="ucf-dist" +NEW_SUFFIX="ucf-new" +OLD_SUFFIX="ucf-old" +ERR_SUFFIX="merge-error" +# save up the cmdline with proper quoting/escaping +for arg in "$@"; do + saved="${saved:+$saved }'$(quote_single "$arg")'" +done + + +# Note that we use `"$@"' to let each command-line parameter expand to a +# separate word. The quotes around `$@' are essential! +# We need TEMP as the `eval set --' would nuke the return value of getopt. +TEMP=`getopt -a -o hs:d::D::nv -n "$progname" \ + --long help,src-dir:,sum-file:,dest-dir:,debug::,DEBUG::,no-action,purge,verbose,three-way,debconf-ok,debconf-template:,state-dir: \ + -- "$@"` + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +while true ; do + case "$1" in + -h|--help) usageversion; exit 0 ;; + -n|--no-action) action='echo'; docmd='NO'; shift ;; + -v|--verbose) VERBOSE=1; shift ;; + -s|--src-dir) + opt_source_dir="$2"; shift 2 ;; + --sum-file) + opt_old_mdsum_file="$2"; shift 2 ;; + --state-dir) + opt_state_dir="$2"; shift 2 ;; + --debconf-template) + override_template="$2"; shift 2 ;; + -D|-d|--debug|--DEBUG) + # d has an optional argument. As we are in quoted mode, + # an empty parameter will be generated if its optional + # argument is not found. + case "$2" in + "") setq DEBUG 1 "The Debug value"; shift 2 ;; + *) setq DEBUG "$2" "The Debug value"; shift 2 ;; + esac ;; + -p|--purge) PURGE=YES; shift ;; + --three-way) THREEWAY=YES; shift ;; + --debconf-ok) DEBCONF_OK=YES; shift ;; + --) shift ; break ;; + *) echo >&2 "Internal error!" ; exit 1 ;; + esac +done + + +###################################################################### +######## ######### +######## Sanity checking ######### +######## ######### +###################################################################### +# Need to run as root, or else the +if test $(id -u) != 0; then + if [ "$docmd" = "YES" ]; then + echo "$progname: Need to be run as root." >&2 + echo "$progname: Setting up no action mode." >&2 + action='echo'; docmd='NO'; + fi +fi + +if [ "X$PURGE" = "XYES" ]; then + if [ $# != 1 ]; then + echo >&2 "*** ERROR: Need exactly one argument when purging, got $#"; + echo >&2 "" + usageversion; + exit 2 ; + fi + temp_dest_file=$1; + setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file"; +else + if [ $# != 2 ]; then + echo >&2 "*** ERROR: Need exactly two arguments, got $#"; + echo >&2 "" + usageversion; + exit 2 ; + fi + temp_new_file=$1; + temp_dest_file=$2; + + if [ ! -e "$temp_new_file" ]; then + echo >&2 "Error: The new file ${temp_new_file} does not exist!"; + exit 1; + fi + setq new_file "$(readlink -q -m $temp_new_file)" "The new file"; + setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file"; +fi + + +safe_dest_file=$(echo $dest_file | perl -nle 'print "\Q$_\E\n"') + + + +###################################################################### +######## ######### +######## Set Default Values ######### +######## ######### +###################################################################### +# Load site defaults and over rides. +if [ -f /etc/ucf.conf ]; then + . /etc/ucf.conf +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_source_dir" = "x" ]; then + setq source_dir "$opt_source_dir" "The Source directory" +elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then + setq source_dir "$UCF_SOURCE_DIR" "The Source directory" +elif [ ! "x$conf_source_dir" = "x" ]; then + setq source_dir "$conf_source_dir" "The Source directory" +else + if [ "X$new_file" != "X" ]; then + setq source_dir $(dirname "$new_file") "The Source directory" + else + setq source_dir /tmp "The Source directory" + fi + +fi + +if [ "X$PAGER" != "X" ] && which $PAGER >/dev/null 2>&1 ; then + my_pager=$(which $PAGER); +elif [ -s /usr/bin/pager ] && + [ "X$(readlink -e /usr/bin/pager || :)" != "X" ]; then + my_pager=/usr/bin/pager +elif [ -x /usr/bin/sensible-pager ]; then + my_pager=/usr/bin/sensible-pager +elif [ -x /bin/more ]; then + my_pager=/bin/more +else + my_pager= +fi + + + +if [ "X$my_pager" = "X" ]; then + STOP=YES +elif [ "X$my_pager" = "X/bin/more" ]; then + STOP=YES +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_state_dir" = "x" ]; then + setq statedir "$opt_state_dir" "The State directory" +elif [ ! "x$UCF_STATE_DIR" = "x" ]; then + setq statedir "$UCF_STATE_DIR" "The State directory" +elif [ ! "x$conf_state_dir" = "x" ]; then + setq statedir "$conf_state_dir" "The State directory" +else + setq statedir '/var/lib/ucf' "The State directory" +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_force_conffold" = "x" ]; then + setq force_conffold "$opt_force_conffold" "Keep the old file" +elif [ ! "x$UCF_FORCE_CONFFOLD" = "x" ]; then + setq force_conffold "$UCF_FORCE_CONFFOLD" "Keep the old file" +elif [ ! "x$conf_force_conffold" = "x" ]; then + setq force_conffold "$conf_force_conffold" "Keep the old file" +else + force_conffold='' +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_force_conffnew" = "x" ]; then + setq force_conffnew "$opt_force_conffnew" "Replace the old file" +elif [ ! "x$UCF_FORCE_CONFFNEW" = "x" ]; then + setq force_conffnew "$UCF_FORCE_CONFFNEW" "Replace the old file" +elif [ ! "x$conf_force_conffnew" = "x" ]; then + setq force_conffnew "$conf_force_conffnew" "Replace the old file" +else + force_conffnew='' +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_force_conffmiss" = "x" ]; then + setq force_conffmiss "$opt_force_conffmiss" "Replace any missing files" +elif [ ! "x$UCF_FORCE_CONFFMISS" = "x" ]; then + setq force_conffmiss "$UCF_FORCE_CONFFMISS" "Replace any missing files" +elif [ ! "x$conf_force_conffmiss" = "x" ]; then + setq force_conffmiss "$conf_force_conffmiss" "Replace any missing files" +else + force_conffmiss='' +fi + +if [ -n "$opt_old_mdsum_file" ]; then + setq old_mdsum_file "$opt_old_mdsum_file" "The md5sum is found here" +elif [ ! "x$UCF_OLD_MDSUM_FILE" = "x" ]; then + setq old_mdsum_file "$UCF_OLD_MDSUM_FILE" "The md5sum is found here" +elif [ ! "x$conf_old_mdsum_file" = "x" ]; then + setq old_mdsum_file "$conf_old_mdsum_file" "Replace the old file" +else + old_mdsum_file="$source_dir/"$(basename "${new_file}")".md5sum"; +fi + + +###################################################################### +######## ######### +######## More Sanity checking ######### +######## ######### +###################################################################### +if [ "X$force_conffold" != "X" -a "X$force_conffnew" != "X" ]; then + echo >&2 "Error: Only one of force_conffold and force_conffnew should"; + echo >&2 " be set"; + exit 1; +fi + +# VERBOSE of 0 is supposed to be the same as not setting VERBOSE +if [ "X$VERBOSE" = "X0" ]; then + VERBOSE='' +fi + + +# +if [ -e "$statedir/hashfile" -a ! -w "$statedir/hashfile" ]; then + echo >&2 "ucf: do not have write privilege to the state data" + if [ "X$docmd" = "XYES" ]; then + exit 1; + fi +fi + +if [ ! -d $statedir/cache ]; then + $action mkdir -p $statedir/cache ; +fi + +# test and see if this file exists in the database +if [ -e "$statedir/hashfile" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "The hash file exists" + echo >&2 egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" + egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true + fi + lastsum=$(egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" | \ + awk '{print $1;}' ) +fi + +old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d"; +cached_file=$(echo $dest_file | tr / :) +###################################################################### +######## ######### +######## Debugging dump ######### +######## ######### +###################################################################### + +if [ $DEBUG -gt 0 ]; then + cat <<EOF +The new start file is \`$new_file\' +The destination is \`$dest_file\' (\`$safe_dest_file\') +The history is kept under \'$source_dir\' +The file may be cached at \'$statedir/cache/$cached_file\' +EOF + if [ -s "$dest_file" ]; then + echo "The destination file exists, and has md5sum:" + md5sum "$dest_file" + else + echo "The destination file does not exist." + fi + if [ "X$lastsum" != "X" ]; then + echo "The old md5sum exists, and is:" + echo $lastsum + else + echo "The old md5sum does not exist." + if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then + echo "However, there are historical md5sums around." + fi + fi + if [ -e "$new_file" ]; then + echo "The new file exists, and has md5sum:" + md5sum "$new_file" + else + echo "The new file does not exist." + fi + if [ -d "$old_mdsum_dir" ]; then + echo "The historical md5sum dir $old_mdsum_dir exists" + elif [ -f "$old_mdsum_file" ]; then + echo "The historical md5sum file $old_mdsum_file exists" + else + echo "Historical md5sums are not available" + fi +fi + +###################################################################### +######## ######### +######## Short circuit if we are purging ######### +######## ######### +###################################################################### + +if [ "X$PURGE" = "XYES" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "Preparing to purge ${dest_file}" + fi + purge_md5sum; + exit 0; +fi + + +# now we can restore $@ +eval set -- "$saved" + +###################################################################### +######## ######### +######## DebConf stuff ######### +######## ######### +###################################################################### + +# Is debconf already running? Kinda tricky, because it will be after the +# confmodule is sourced, so only test before that. +if [ -z "$DEBCONF_ALREADY_RUNNING" ]; then + if [ "$DEBIAN_HAS_FRONTEND" ]; then + DEBCONF_ALREADY_RUNNING='YES' + else + DEBCONF_ALREADY_RUNNING='NO' + fi +fi + +export DEBCONF_ALREADY_RUNNING + +if [ -z "$DEBCONF_OK" ]; then + if [ "$DEBCONF_ALREADY_RUNNING" = 'YES' ]; then + DEBCONF_OK='NO' + else + DEBCONF_OK='YES' + fi +fi + +# Time to start nagging the users who call ucf without debconf-ok +if [ "$DEBCONF_ALREADY_RUNNING" = 'YES' ] && [ "$DEBCONF_OK" = NO ]; then + # Commented out for now, uncomment after a while to begin nagging + # maintainers to fix their scripts. + cat \ +<<END +*** WARNING: ucf was run from a maintainer script that uses debconf, but + the script did not pass --debconf-ok to ucf. The maintainer + script should be fixed to not stop debconf before calling ucf, + and pass it this parameter. For now, ucf will revert to using + old-style, non-debconf prompting. Ugh! + + Please inform the package maintainer about this problem. +END +fi + +# Start up debconf or at least get the db_* commands available +if [ -e /usr/share/debconf/confmodule ]; then + if test $(id -u) = 0; then + . /usr/share/debconf/confmodule + + # Load our templates, just in case our template has + # not been loaded or the Debconf DB lost or corrupted + # since then, but only if it is OK to use debconf. + if [ "$DEBCONF_OK" = 'YES' ]; then + db_x_loadtemplatefile "$(dpkg-query --control-path ucf templates)" ucf + fi + else + echo >&2 "$progname: Not loading confmodule, since we are not running as root." + fi + # Only set the title if debconf was not already running. + # If it was running, then we do not want to clobber the + # title used for configuring the whole package with debconf. + if [ "$DEBCONF_ALREADY_RUNNING" = 'NO' ]; then + if ! db_settitle ucf/title 2>/dev/null; then + # Older debconf that does not support that command. + if test $(id -u) = 0; then + db_title "Modified configuration file" + else + echo >&2 "$progname: Not changing title, since we are not running as root." + fi + fi + fi +fi + + + +###################################################################### +######## ######### +######## Start Processing ######### +######## ######### +###################################################################### + +orig_new_file="$new_file" # Since sometimes we replace the newfile below +newsum=$(md5sum "$new_file" | awk '{print $1}') + +# Determine the action for the current file. The default is to ask, +# with non-replacement being the norm. +# If the config dir exists +# if file in always overwrite, state +=1; +# fi +# if file in never overwrite, state +=2; +# fi +# if file in ask; state +=4 +# fi +# if state == 0; then state = default +# if state >= 4; ask +# if state == 3; ask +# if state == 2; exit +# if state == 1; then replace_conffile; exit + +###################################################################### +######## ######### +######## Do the replacement ######### +######## ######### +###################################################################### +# Step 1: If we have no record of this file, and dest file +# does, We need to determine how to initialize the +# ${old_mdsum_prefix}.old file.. +if [ -e "$dest_file" ]; then + destsum=$(md5sum "$dest_file" | awk '{print $1}'); + if [ "X$lastsum" = "X" ]; then +# a: If we have a directory containing historical md5sums of this +# file in question, we should look and see if the currently +# installed file matches any of the old md5sums; in which case +# it can be silently replaced. + if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then + if [ -d "$old_mdsum_dir" ]; then + for file in ${old_mdsum_dir}/*; do + oldsum=$(cat "$file" | awk '{print $1}'); + if [ "$oldsum" = "$destsum" ]; then + if [ "X$force_conffold" = "X" ]; then +# Bingo! replace, set the md5sum, and we are done + if [ "X$VERBOSE" != "X" ]; then + echo >&2 \ + "Replacing config file $dest_file with new version" + fi + replace_conf_file; + exit 0; + else + replace_md5sum; + cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" + exit 0; + fi + fi + done + elif [ -f "$old_mdsum_file" ]; then + oldsum=$(egrep "^${destsum}" "$old_mdsum_file" || true) + if [ "X$oldsum" != "X" ]; then +# Bingo + if [ "X$force_conffold" = "X" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 \ + "Replacing config file $dest_file with new version" + fi + replace_conf_file; + exit 0; + else + replace_md5sum; + cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" + exit 0; + fi + fi + fi +# Well, nothing matched. We now check to see if the +# maintainer has an opinion on how to set the ``md5sum of the +# previously installed version'', since we have no way of +# determining that automatically. Please note that unless +# there are limited number of previously released packages +# (like just one), the maintainer is also making a guess at +# this point by supplying a historical md5sum default file. + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "Histotical md5sums did not match." + fi + if [ -d "$old_mdsum_dir" ]; then + if [ -e "${old_mdsum_dir}/default" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "However, a default entry exists, using it." + fi + lastsum=$(cat "${old_mdsum_dir}/default" | \ + awk '{print $1;}') + do_replace_md5sum=1; + fi + elif [ -f "$old_mdsum_file" ]; then + oldsum=$(egrep "[[:space:]]default$" "$old_mdsum_file" | \ + awk '{print $1;}') + if [ "X$oldsum" != "X" ]; then +# Bingo + lastsum=$oldsum; + do_replace_md5sum=1; + fi + fi + fi + +# At this point, we are almost certain that either the +# historical record of md5sums is not complete, or the user has +# changed the configuration file. Rather than guessing and +# chosing one of the historical md5sums, we fall through to the +# solution used if there had been no historical md5sums +# directory/file. + if [ "X$lastsum" = "X" ]; then +# b: We do not have a historical list of md5sums, or none +# matched, and we still need to initialize the +# ${old_mdsum_prefix}.old file. We can't determine whther or +# not they made any changes, so we err on the side of caution +# and ask' + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "No match found, we shall ask." + fi + lastsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; + fi # the old md5sum file does not exist, and the historical + # record failed + fi # the old md5sum file does not exist (bug)) +else # "$dest_file" does not exist +# Step 2: If destfile does not exist, create it, set the file +# "${old_mdsum_prefix}.old" to the md5sum of the new file, and we +# are done + if [ "X$lastsum" = "X" ]; then + # Ok, so there is no indication that the package was ever + # installed on this machine. + echo >&2 "" + echo >&2 "Creating config file $dest_file with new version" + replace_conf_file; + exit 0; + elif [ "$lastsum" = "$newsum" ]; then + # OK, new version of the file is the same as the last version + # we saw. Since the user apparently has deleted the file, + # nothing needs be done, unless we have been told differently + if [ "X$force_conffmiss" != "X" ]; then + echo >&2 "" + echo >&2 "Recreating deleted config file $dest_file with new version, as asked" + replace_conf_file; + exit 0; + else + echo >&2 "Not replacing deleted config file $dest_file"; + fi + + else + # OK. New upstream version. + if [ "X$force_conffmiss" != "X" ]; then + # User has said to replace missing files, so we do so, no + # questions asked. + echo >&2 "" + echo >&2 "Recreating deleted config file $dest_file with new version, as asked" + replace_conf_file; + exit 0; + else + # Even though the user has deleted this file, they should + # be asked now, unless specified otherwise. + if [ "X$force_conffold" = "X" ]; then + destsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'; + else + exit 0; + fi + fi + fi +fi + +# Here, the destfile exists. + +# step 3: If the old md5sum and the md5sum of the new file +# do not match, we need to take action. +if [ "$lastsum" = "$newsum" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "md5sums match, nothing needs be done." + fi + if [ "X$do_replace_md5sum" != "X" ]; then + replace_md5sum; + fi + exit 0; # Hah. Match. We are done. +fi +# a: If the md5sum of the dest file is the same as lastsum, replace the +# destfile, saying we are replacing old config files +if [ "$destsum" = "$lastsum" ]; then + if [ "X$force_conffold" = "X" ]; then + echo >&2 "Replacing config file $dest_file with new version" + replace_conf_file; + exit 0; + else + replace_md5sum; + cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" + exit 0; + fi +else +# b: If the md5sum of the dest file differs from lastsum, we need to ask +# the user what action to take. + if [ "X$force_conffnew" != "X" ]; then + echo >&2 "Replacing config file $dest_file with new version" + echo >&2 "since you asked for it." + if [ "$destsum" = "$newsum" ]; then + echo >&2 "The new and the old files are identical, AFAICS" + else + echo >&2 "The new and the old files are different" + fi + replace_conf_file; + exit 0; + fi + if [ "X$force_conffold" != "X" ]; then + replace_md5sum; + cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" + exit 0; + fi +# c: If the destination file is the same as the new maintianer provided one, +# we need do nothing. + if [ "$newsum" = "$destsum" ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "md5sums of the file in place matches, nothing needs be done." + fi + replace_md5sum; + exit 0; # Hah. Match. We are done. + fi + + + done='NO'; + while [ "X$done" = "XNO" ]; do + if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then + # Use debconf to prompt. + if [ -e "$statedir/cache/$cached_file" ]; then + templ=ucf/changeprompt_threeway + else + templ=ucf/changeprompt + fi + if [ "X$override_template" != "X" ]; then + choices="$(db_metaget $templ Choices-C)" + choices2="$(db_metaget $override_template Choices-C)" + if [ "$choices" = "$choices2" ]; then + templ=$override_template + fi + fi + db_fset $templ seen false + db_reset $templ + db_subst $templ FILE "$dest_file" + db_subst $templ NEW "$new_file" + db_subst $templ BASENAME $(basename "$dest_file") + db_input critical $templ || true + if ! db_go; then + # The current ucf interface does not provide a way for it + # to tell its caller that the user chose to back up. + # However, we could get here, if the caller turned on + # debconf's backup capb. The best thing to do seems to be + # to ignore requests to back up. + continue + fi + db_get $templ + ANSWER="$RET" + else + echo >&2 "Need debconf to interact" + exit 2 +######################################################################################## +# # Prompt without using debconf. # +# cat >&2 <<EOPRMT # +# Configuration file \`$dest_file' # +# ==> File on system created by you or by a script. # +# ==> File also in package provided by package maintainer. # +# What would you like to do about it ? Your options are: # +# Y or I : install the package maintainer's version # +# N or O : keep your currently-installed version # +# D : show the differences between the versions # +# S : show the side-by-side differences between the versions # +# EOPRMT # +# if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then # +# cat >&2 <<EOTD # +# 3 or T : show a three way difference between current, older, # +# and new versions of the file # +# M : Do a 3 way merge between current, older, # +# and new versions of the file [Very Experimental] # +# EOTD # +# fi # +# cat >&2 <<EOPEND # +# Z : start a new shell to examine the situation # +# The default action is to keep your current version. # +# EOPEND # +# if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then # +# echo -n >&2 "*** " $(basename "$dest_file") \ # +# " (Y/I/N/O/D/3/T/M/Z) [default=N] ?" # +# else # +# echo -n >&2 "*** " $(basename "$dest_file") \ # +# " (Y/I/N/O/D/Z) [default=N] ?" # +# fi # +# read -e ANSWER </dev/tty # +######################################################################################## + fi + + case "$ANSWER" in + install_new|y|Y|I|i) + echo >&2 "Replacing config file $dest_file with new version" + RETAIN_OLD=YES + replace_conf_file; + exit 0; + ;; + diff|D|d) + if [ -e "$dest_file" ]; then + DIFF="$(diff -uBbw "$dest_file" "$new_file")" || true + else + DIFF="$(diff -uBbw /dev/null "$new_file")" || true + fi + show_diff "$DIFF" + ;; + sdiff|S|s) + if [ -e "$dest_file" ]; then + DIFF="$( sdiff -BbW "$dest_file" "$new_file")" || true + else + DIFF="$(sdiff -BbW /dev/null "$new_file")" || true + fi + show_diff "$DIFF" + ;; + diff_threeway|3|t|T) + if [ -e "$statedir/cache/$cached_file" \ + -a "X$THREEWAY" != "X" ]; then + if [ -e "$dest_file" ]; then + DIFF="$(diff3 -L Current -L Older -L New -A \ + "$dest_file" "$statedir/cache/$cached_file" \ + "$new_file")" || true + else + DIFF="$(diff3 -L Current -L Older -L New -A \ + /dev/null "$statedir/cache/$cached_file" \ + "$new_file")" || true + fi + show_diff "$DIFF" + else + if [ -e "$dest_file" ]; then + DIFF="$(diff -uBbw "$dest_file" "$new_file")" || true + else + DIFF="$(diff -uBbw /dev/null "$new_file")" || true + fi + show_diff "$DIFF" + fi + ;; + merge_threeway|M|m) + echo >&2 "Merging changes into the new version" + if [ -e "$statedir/cache/$cached_file" \ + -a "X$THREEWAY" != "X" ]; then + ret=0 + diff3 -L Current -L Older -L New -m \ + "$dest_file" "$statedir/cache/$cached_file" \ + "$new_file" > $dest_file.${NEW_SUFFIX} || ret=$? + case "$ret" in + 0) + new_file="$dest_file.${NEW_SUFFIX}" + RETAIN_OLD=YES + replace_conf_file + rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo' + exit 0 + ;; + *) + mv $dest_file.${NEW_SUFFIX} $dest_file.${ERR_SUFFIX} + db_subst ucf/conflicts_found dest_file "$dest_file" + db_subst ucf/conflicts_found ERR_SUFFIX "${ERR_SUFFIX}" + db_input critical ucf/conflicts_found || true + db_go || true + ;; + esac + else + replace_conf_file + rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo' + exit 0 + fi + ;; + shell|Z|z) + # We explicitly connect STDIN and STDOUT to the + # script's controlling terminal, so even if STDIN is + # fed by a pipe, as is the case when run from + # /usr/bin/debconf, the shell should be fully + # functional. However, the test for a controlling + # terminal uses /usr/bin/tty, which consults only + # STDIN. As far as I can tell, when run from debconf, + # ucf will _never_ use the current terminal. If the + # goal is to check for access to a terminal, the test + # should be for foreground process group membership, + # not a terminal connected to STDIN (tty -s), and not + # a terminal it doesn't necessarily own (tty -s + # </dev/tty). The easiest way do this from a shell is + # probably with /bin/ps. + if ps -o stat= --ppid $$ | grep -q '+'; then + bash >/dev/tty </dev/tty || true + elif [ -n "$DISPLAY" ]; then + x-terminal-emulator || true + else + # Don't know what to do + echo >&2 "No terminal, and no DISPLAY set, can't fork shell." + sleep 3; + fi + ;; + keep_current|n|N|o|O|'') + replace_md5sum; + + cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}" + exit 0; + ;; + *) + if [ "$DEBCONF_OK" = "YES" ]; then + echo "Error: unknown response from debconf:'$RET'" >&2 + exit 1 + else + echo + echo "Please answer with one of the single letters listed." >&2 + echo + fi + esac + done +fi + +db_stop + +exit 0; @@ -0,0 +1,384 @@ +.\" -*- Mode: Nroff -*- +.\" updateConfFile.1 --- +.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com ) +.\" Created On : Fri Feb 1 11:17:32 2002 +.\" Created On Node : glaurung.green-gryphon.com +.\" Last Modified By : Manoj Srivastava +.\" Last Modified On : Tue Apr 11 14:46:06 2006 +.\" Last Machine Used: glaurung.internal.golden-gryphon.com +.\" Update Count : 53 +.\" Status : Unknown, Use with caution! +.\" HISTORY : +.\" Description : +.\" +.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org> +.\" +.\" This is free documentation; 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. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +.\" 02111-1307, USA. +.\" +.\" $Id: ucf.1,v 1.10 2003/09/28 23:29:21 srivasta Exp $ +.TH UCF 1 "May 30 2008" "Debian" "Debian GNU/Linux manual" +.SH NAME +ucf \- Update Configuration File: preserve user changes in configuration files +.SH SYNOPSIS +.B ucf +.RI [ options "] " +.I <New File> +.I <Destination> +.PP +.B ucf +.RI [ options "] " +.I \-\-purge +.I <Destination> +.SH DESCRIPTION +This utility provides a means of asking the user whether or not to +accept new versions of configuration files provided by the package +maintainer, with various heuristics designed to minimize +interaction time. It uses debconf to interact with the user, as per Debian +policy. In the SYNOPSIS above, +.I New file +is the configuration file as provided by the package (either shipped +with the package, or generated by the maintainer scripts on the fly), +and +.I Destination +is the location (usually under /etc) where the real configuration file +lives, and is potentially modified by the end user. Since the files +edited would be real files, and not symbolic links, +.B ucf +follows and resolves symbolic links before acting. As far as +possible, ucf attempts to preserve the ownership and permission of +the +.I New file +as it is copied to the new location. +.PP +This script attempts to provide conffile like handling for files +installed under +.I /etc +not +shipped in a +.B Debian +package, but handled by the postinst instead. +.B Debian +policy states that files under +.I /etc +which are configuration files +.B must +preserve user changes, and this applies to files handled by maintainer +scripts as well. Using +.B ucf, +one may ship a bunch of default configuration files somewhere in +.I /usr +( +.I /usr/share/<pkg> +is a good location), and maintain files in +.I /etc, +preserving user changes and in general offering the same facilities +while upgrading that +.B dpkg +normally provides for +.I \*(lqconffiles\*(rq +.PP +Additionally, this script provides facilities for transitioning a file +that had not been provided +.I conffile +like protection to come under this +schema, and attempts to minimize questions asked at install +time. Indeed, the transitioning facility is better than the one +offered by +.B dpkg +while transitioning a file from a +.I non\-conffile +to +.I conffile +status. The second form in the SYNOPSIS above is for purging +information about the configuration file when the package is purged; +and is critical for allowing smooth reinstallations. +.PP +During the course of operations, when working with configuration files, +.B ucf +optionally creates copies of versions of the configuration file in +question. For example, a file with the suffix +.I "ucf-old" +holds the old version of a configuration file replaced by +.B ucf. +Also, copies of the configuration file with the suffixes +.I "ucf-new" +and +.I "ucf-dist" +may be created; and the maintainer scripts should consider purging +copies of the configuration file with these extensions during purge. +.SH OPTIONS +.TP +.B "\-h, \-\-help" +Print a short usage message +.TP +.B "\-n, \-\-no\-action" +Dry run. Print the actions that would be taken if the script is +invoked, but take no action. +.TP +.B "\-d[n], \-\-debug=[n]" +Set the debug level to the (optional) level +.I n +(n defaults to 1). Please note there mist be no spaces before the +optional digit n. This turns on copious debugging information. +.TP +.B "\-p, \-\-purge" +Removes all vestiges of the file from the state hashfile. This is +required to allow a package to be reinstalled after it is purged; +since otherwise, the real configuration file is removed, but it +remains in the hash file; and on reinstall no action is taken, since +the md5sum of the new file matches that in the hashfile. In short, +remember to use this option in the postrm for every configuration file +managed by ucf when the package is being purged (assuming ucf itself +exists). +.I Note: +ucf does not actually touch the file on disk in this operation, so any +file removals are still the responsibility of the calling package. +.TP +.B "\-v, \-\-verbose" +Make the script be very verbose about setting internal variables. +.TP +.B "\-s foo, \-\-src\-dir foo" +Set the source directory (historical md5sums are expected to live in +files and sub directories of this directory) to foo. By default, the +directory the new_file lives in is assumed to be the source +directory. Setting this option overrides settings in the environment +variable +.B UCF_SOURCE_DIR, +and in the configuration file variable +.B conf_source_dir. +.TP +.B "\-\-sum\-file foo" +Force the historical md5sums to be read from this file, rather than +defaulting to living in the source directory. Setting this option +overrides settings in the environment variable +.B UCF_OLD_MDSUM_FILE, +and in the configuration file variable +.B conf_old_mdsum_file. +.TP +.B "\-\-three\-way" +This turns on the option, during installation, for the user to be +offered a chance to see a merge of the changes between old maintainer +version and the new maintainer version into the local copy of the +configuration file. If the user likes what they see, they can ask to +have these changes merged in. This allows one to get new upstream +changes merged in even while retaining local modifications to the +configuration file. This is accomplished by taking the configuration +file and stashing it in a cache area during registration, and using +diff3 during the install (the stashed file name is a munged version of +the full path of the configuration file to avoid name space clashes). +.I Note +This option appeared in Version 0.8 of +.B ucf, +which was the first version released into unstable and ultimately +.B Sarge. +The version of ucf in woody does not contain this option. +.TP +.B "\-\-debconf\-ok" +Indicate that it is ok for +.I ucf +to use an already running debconf instance for prompting (it has +always been ok to use ucf when debconf is not running -- it shall +invoke debconf as needed). Since historically maintainer scripts that +used debconf and also ucf had to disable/cripple debconf before +running ucf (since ucf did not prompt with debconf, and needed stdio +available), ucf must be cautious when called from a maintainer script +that uses debconf. This option lets it know that the maintainer script +has not told debconf to stop, or redirected its stdio from debconf, or +anything of the sort -- and thus it is safe to use debconf even when +the script discovers that debconf is running. Packages that call ucf +with this option should take care to depend on version 0.28 or higher +of ucf (the first to support use this option). +.TP +.B "\-\-debconf\-template foo" +Instruct ucf to use the named multiselect debconf template instead of +the normal ucf-provided debconf template. The caller is responsible for +ensuring that the named template exists and has a list of choices +matching those for the default ucf template, and should set +Choices\-C: ${CHOICES} to ensure the returned values match those from +the default template. Note that the choices must be different according +to whether the +.B \-\-three\-way +option is also set. +.TP +.B "\-\-state\-dir /path/to/dir" +Set the state directory to /path/to/dir instead of the default +.I /var/lib/ucf. +Used mostly for testing. +.SH USAGE +The most common case usage is pretty simple: a single line invocation +in the postinst on configure, and another single line in the postrm to +tell +.B ucf +to forget about the configuration file on purge +(using the \-\-purge option) is all that is needed (assuming ucf is +still on the system). +.PP +It is recommended that you also register any file being managed by +.B ucf +with the ucf registry; this associates the configuration file with the +package it belongs to. This is done with a simple call to +.B ucfr. +Users may then query the association between a configuration file and +the package using the tool +.B ucfq. +Please see the appropriate manual pages for details. +.PP +If a file maintained by maintainer scripts is being transitioned from an +unprotected status to the protection afforded by the script, the +maintainer can help ease the transition by reducing the questions that +may be asked at installation time. Specifically, questions should not +be asked if the file in question is an unmodified version that was one +shipped in a previous version of this package; and the maintainer can +help by telling the script about the historical md5sums that published +versions of this file contained. +.PP +The way to do this is to either create a file called +.B <New file>.md5sum, +with one md5sum on each line, (the file names you use are ignored, except +for the entry named default), or create a directory, called +.B <New file>.md5sum.d, +which should contain any number of files, each containing a single +line, namely, the md5sum of a previous version of +.B <New file>. +The names of these files are not important, with one exception: The +file called default is treated specially. For example, the author +personally uses either package version numbers or release code names, +like +.I 7.6.3, +or +.I potato. +If none of the historical md5sums match, we are almost certain that +either the historical record of md5sums is not complete, or the user +has changed the configuration file. +.SS "The default historical md5sum" +The exception to the rule about names mentioned earlier is that if no +md5sums match, and if the file +.B <New file>.md5sum.d/default +exists, or if there is a line corresponding to a +.I default +file in +.B <New file>.md5sum, +it shall be used as the default md5sum of the +.I previous +version of the package assumed to have been installed on this machine. +As you can see, unless there are limited number of previously released +packages (like just one), the maintainer is also making an informed +guess, but the option is provided to the maintainer. +.PP +If the file +.B <New file>.md5sum, +or the directory +.B <New file>.md5sum.d +does not exist, or none of the md5sums match, we test the installed +.I <Destination> +file to see whether it is the same as the +.I <New file>. +If not, we ask the user whether they want us to replace the file. +.PP +An additional facility is also offered: optionally, ucf can store one +old version of the maintainers copy of the configuration file, and, +on upgrade, calculate the changes made in the maintainers version of +the configuration file, and apply that patch to the local version of +the file (on user request, of course). There is also a preview +facility where the user can inspect the results of such a merge, +before asking the action to be taken. +.SH "ENVIRONMENT VARIABLES" +The variable +.B UCF_FORCE_CONFFNEW, +if set, forces the new file to always overwrite the installed +destination file, while the variable +.B UCF_FORCE_CONFFOLD, +if set silently retains the installed file. +.B UCF_FORCE_CONFFMISS +is only applicable when the installed destination file does not exist +(perhaps due to user removal),and forces ucf to recreate the missing +file (the default behaviour is to honor the users wishes and not +recreate the locally deleted file). +.SH FILES +This script creates the file +.I new_file.md5sum, +and it may copy the file (presumably shipped with the package) +.I <New file> +to its destination, +.I <Destination>. +.PP +.I /var/lib/ucf/hashfile, +and +.I /var/lib/ucf/hashfile.X, +where +.I X +is a small integer, where previous versions of the hashfile are +stored. +.PP +.I /etc/ucf.conf +.SH EXAMPLES +If the package +.I foo +wants to use ucf to handle user interaction for configuration file +.I foo.conf, +a version of which is provided in the package as +.I /usr/share/foo/configuration, +a simple invocation of ucf in the post inst file is all that is +needed: +.PP +.B ucf +.I /usr/share/foo/configuration +.I /etc/foo.conf +.PP +On purge, one should tell ucf to forget about the file (see detailed +examples in /usr/share/doc/ucf/examples): +.PP +.B ucf +.I \-\-purge +.I /etc/foo.conf +Please note that purge can also be used to make ucf forget the +rpevious state of the files, and when the package is next installed or +updated, ucf will ask the user to replace the current cofiguration +file. Do this if you want to change your decision to not update to a +maintainer provided version of the configuration file. +.PP +The motivation for this script was to provide conffile like handling +for start files for emacs lisp packages (for example, +.I /etc/emacs21/site\-start.d/50psgml\-init.el +) These start files are not +shipped with the package, instead, they are installed during the +post installation configuration phase by the script +.I /usr/lib/emacsen\-common/emacs\-package\-install $package_name. +.PP +This script is meant to be invoked by the packages install script at +.I /usr/lib/emacsen\-common/packages/install/$package_name +for each +flavour of installed emacsen by calling it with the proper values of +new file ( +.I /usr/share/emacs/site\-lisp/<pkg>/<pkg\-init.el +), and dest file +( +.I /etc/emacs21/site\-start.d/50<pkg\-init.el +), and it should do the rest. +.SH "SEE ALSO" +ucf.conf(5), ucfr(1), ucfq(1), and diff3(1). +The +.B Debian +Emacs policy, shipped with the package +.I emacsen\-common. +.SH AUTHOR +This manual page was written Manoj Srivastava <srivasta@debian.org>, +for the Debian GNU/Linux system. diff --git a/ucf.conf b/ucf.conf new file mode 100644 index 0000000..cb4f02c --- /dev/null +++ b/ucf.conf @@ -0,0 +1,39 @@ +# +# This file is a bourne shell snippet, and is sourced by the +# ucf script for configuration. +# + +# Debugging information: The default value is 0 (no debugging +# information is printed). To change the default behavior, uncomment +# the following line and set the value to 1. +# +# DEBUG=0 + +# Verbosity: The default value is 0 (quiet). To change the default +# behavior, uncomment the following line and set the value to 1. +# +# VERBOSE=0 + + +# The src directory. This is the directory where the historical +# md5sums for a file are looked for. Specifically, the historical +# md5sums are looked for in the subdirectory ${filename}.md5sum.d/ +# +# conf_source_dir=/some/path/ + +# Force the installed file to be retained. The default is have this +# variable unset, which makes the script ask in case of doubt. To +# change the default behavior, uncomment the following line and set +# the value to YES +# +# conf_force_conffold=YES + +# Force the installed file to be overridden. The default is have this +# variable unset, which makes the script ask in case of doubt. To +# change the default behavior, uncomment the following line and set +# the value to YES +# +# conf_force_conffnew=YES + +# Please note that only one of conf_force_conffold and +# conf_force_conffnew should be set. diff --git a/ucf.conf.5 b/ucf.conf.5 new file mode 100644 index 0000000..61c88a3 --- /dev/null +++ b/ucf.conf.5 @@ -0,0 +1,120 @@ +.\" -*- Mode: Nroff -*- +.\" updateConfFile.1 --- +.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com ) +.\" Created On : Fri Feb 1 11:17:32 2002 +.\" Created On Node : glaurung.green-gryphon.com +.\" Last Modified By : Manoj Srivastava +.\" Last Modified On : Mon Apr 19 12:16:51 2004 +.\" Last Machine Used: glaurung.internal.golden-gryphon.com +.\" Update Count : 28 +.\" Status : Unknown, Use with caution! +.\" HISTORY : +.\" Description : +.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org> +.\" +.\" This is free documentation; 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. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +.\" 02111-1307, USA. +.\" +.\" $Id: ucf.conf.5,v 1.2 2002/02/25 18:07:21 srivasta Exp $ +.\" +.TH UCF.CONF 5 "Feb 12 2002" "Debian" "Debian GNU/Linux manual" +.SH NAME +ucf.conf \- site\-wide configuration file for +.B ucf +.SH SYNOPSIS +.I /etc/ucf.conf +.SH "DESCRIPTION" +The file +.I /etc/ucf.conf +is actually a +.BR "Bourne Shell" +snippet included during the package build process, and hence you may +put any shell directive in that file (just make very sure you know +what you are doing). +.PP +All the variables have reasonable default values, and some may be +overridden on a per run or a per individual basis by using +environment variables, and all configurable variables can be +overridden by options to the scripts themselves. +.PP +The value of a variable can be set so: +.TP 3 +a) +Defaults exist in the rules file. These are the values used if no +customization is done. +.IP b) +Some variables can be set in the config file +.I /etc/ucf.conf. +These values override the defaults. +.IP c) +Some variables can also be set by setting a corresponding environment +variable. These values override the config file and the defaults. +.IP d) +Using script command line +options. All configurable variables may be set by this method, and +will override the other methods above. +.SH "Configuration File options" +At the moment, the user modifiable variables supported are: +.TP 18 +.B DEBUG +Debugging information: The default value is 0 (no debugging +information is printed). To enable debugging output, set the value to +1. +.TP +.B VERBOSE +Verbosity: The default value is 0 (quiet). To change the default +behavior, set the value to 1. +.TP +.B conf_force_conffold +Force the installed file to be retained. The default is to have this +variable unset, which makes the script ask in case of doubt. This can +be overridden by the environment variable +.B UCF_FORCE_CONFFOLD +.TP +.B conf_force_conffnew +Force the installed file to be overridden. The default is to have this +variable unset, which makes the script ask in case of doubt. This can +be overridden by the environment variable +.B UCF_FORCE_CONFFNEW +.TP +.B conf_source_dir +This is the directory where the historical md5sums for a file are +looked for. Specifically, the historical md5sums are looked for in +either the file +.I ${filename}.md5sum, +or the subdirectory +.I ${filename}.md5sum.d/ +.TP +.B conf_old_mdsum_file +Force the historical md5sums to be read from this file, rather than +defaulting to living in the source directory. Setting this option +overrides settings in the environment variable +.B UCF_OLD_MDSUM_FILE +.SH Files +System\-wide defaults are placed in +.I /etc/ucf.conf, +.SH "SEE ALSO" +.BR ucf (1), +.SH BUGS +There are no bugs. Any resemblance thereof is delirium. Really. +.SH AUTHOR +This manual page was written by Manoj Srivastava <srivasta@debian.org>, +for the Debian GNU/Linux system. + @@ -0,0 +1,851 @@ +#!/usr/bin/perl +# -*- Mode: Cperl -*- +# ucfq --- +# Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +# Created On : Wed Apr 12 14:51:16 2006 +# Created On Node : glaurung.internal.golden-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Fri Apr 14 19:30:45 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 81 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# arch-tag: 1390e09f-ee31-4d7f-a968-bd539ea061a0 +# +=head1 NAME + +ucfq - query ucf registry and hashfile about configuration file details. + +=cut + +use strict; + + +package ucf; + +use strict; +use Getopt::Long; + +# set the version and revision +($main::MYNAME = $main::0) =~ s|.*/||; +$main::Author = "Manoj Srivastava"; +$main::AuthorMail = "srivasta\@debian.org"; + +=head1 SYNOPSIS + + usage: ucfq [options] (file|package)[file|package ...] + +=cut + + +{ # scope for ultra-private meta-object for class attributes + + my %Ucf = + ( + Optdesc => + { + 'help|h' => sub {print ucf->Usage(); exit 0;}, + 'with-colons|w!' => sub {$::ConfOpts{"Colons"}= "$_[1]";}, + 'state-dir=s' => sub {$::ConfOpts{"StateDir"}= "$_[1]";}, + 'debug|d' => sub {$::ConfOpts{"DEBUG"}+= "$_[1]";}, + 'verbose|v' => sub {$::ConfOpts{"VERBOSE"}+= "$_[1]";} + }, + Usage => qq(Usage: $main::MYNAME [options] +Author: $main::Author <$main::AuthorMail> + where options are: + --help This message. + --debug Turn on debugging mode. + --verbose Make the script more verbose. + --with-colons A compact, machine readable version of the output. + --state-dir </path/> Set the state directory to /path/ instead of the + default /var/lib/ucf. + +), + Defaults => + { + "Colons" => 0, + "DEBUG" => 0, + "VERBOSE" => 0, + "StateDir" => '/var/lib/ucf' + } + ); + # tri-natured: function, class method, or object method + sub _classobj { + my $obclass = shift || __PACKAGE__; + my $class = ref($obclass) || $obclass; + no strict "refs"; # to convert sym ref to real one + return \%$class; + } + + for my $datum (keys %Ucf ) { + no strict "refs"; + *$datum = sub { + use strict "refs"; + my ($self, $newvalue) = @_; + $Ucf{$datum} = $newvalue if @_ > 1; + return $Ucf{$datum}; + } + } +} + +=head1 OPTIONS + +=over 3 + +=item B<--help> B<h> Print out a usage message. + +=item B<--debug> B<-d> Turn on debugging mode. + +=item B<--verbose> B<-v> Make the script more verbose.. + +=item B<--with-colons> B<-w> + +=over 2 + +Normally, the script presents the information in a human readable +tabular format, but that may be harder for a machine to parse. With +this option, the output is a compact, colon separated line, with no +dividers, headers, or footer. + +=back + +=item B<--state-dr> dir + +=over 2 + +Set the state directory to C</path/to/dir> instead of the default +C</var/lib/ucf>. Used mostly for testing. + +=back + +=back + +=cut + + +=head1 DESCRIPTION + + +This script takes a set of arguments, each of which is a package or a +path to a configuration file, and outputs the associated package, if +any, if the file exists on disk, and whether it has been modfied by te +user. The output is either a human readable tabular form, or a +compact colon-separated machine friendly format. + +This script can potentially be used in package C<postinst> scripts +during purge to query the system for configuration files that may +still exist on the system, and whether these files have been locally +modified by the user -- assuming that the package registered all the +configuration files with B<ucf> using C<ucfr>. + +=cut + + + + +=head1 INTERNALS + +=head2 Class Methods + +All class methods mediate access to class variables. All class +methods can be invoked with zero or one parameters. When invoked with +the optional parameter, the class method sets the value of the +underlying class data. In either case, the value of the underlying +variable is returned. + +=cut + +=head1 Class ucf + +This is a combination view and controller class that mediates between +the user and the internal model classes. + + +=head2 new + +This is the constructor for the class. It takes a number of optional +parameters. If the parameter B<Colons> is present, then the output +will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on +additional diagnostics from the script. + +=cut + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + bless $self => $class; + + # validate and sanitize the settings + $self->validate(%params); + + return $self; +} + +=head2 validate + +This routine is responsible for ensuring that the parameters passed in +(presumably from the command line) are given preference. + +=cut + +sub validate{ + my $this = shift; + my %params = @_; + my $defaults = $this->Defaults(); + + + # Make sure runtime options override what we get from the config file + for my $option (keys %params) { + $this->{Con_Ref}->{"$option"} = $params{"$option"}; + } + + # Ensure that if default parameters have not been set on the comman + # line on in the configuration file, if any, we use the built in + # defaults. + for my $default (keys %$defaults) { + if (! defined $this->{Con_Ref}->{"$default"}) { + $this->{Con_Ref}->{"$default"} = $defaults->{"$default"}; + } + } +} + +=head2 get_config_ref + +This routine returns a reference to the configuration hash + +=cut + +sub get_config_ref { + + my $this = shift; + return $this->{Con_Ref}; +} + +=head2 dump_config + +This routine returns a C<Data::Dumper> for debugging purposes + +=cut + +sub dump_config { + my $this = shift; + for (keys %{$this->{Con_Ref}}) { + print "$_ = [${$this->{Con_Ref}}{$_}]\n" + } +} + +=head2 process + +This routine is the work horse routine -- it parses the command line +arguments, and queries the on disk databases, determines of the files +exist, and have been modified. + +=cut + + +sub process { + my $this = shift; + +# Step 1: Process all arguments in sequence. +# Step 2: determine if the arument given is a package name (no / in +# arg) + + %{$this->{packages}} = map { +"$_" => 1} grep {! m,/,} @ARGV; + %{$this->{configs}} = map { +"$_" => 1} grep { m,/,} @ARGV; + $this->{pkg_list} = object_list->new; + $this->{file_list} = object_list->new; + $this->{registry_proxy} = + registry->new("StateDir" => $this->{Con_Ref}->{StateDir}); + $this->{hashfile_proxy} = + hashfile->new("StateDir" => $this->{Con_Ref}->{StateDir}); + + for (keys %{$this->{packages}} ) { + my $package = pkg->new('Name' => "$_"); + $this->{pkg_list}->element($_, $package); + } + for (keys %{$this->{configs}}) { + warn "Need a fully qualified path name for config file \"$_\"\n" + unless m,^/,; + # Don't die for etch + exit 0 unless m,^/,; + + my $file = conffile->new('Name' => "$_"); + $this->{file_list}->element($_, $file); + } +# Step 3: If so, gather all files associated with the package + for my $package ($this->{pkg_list}->list) { + my $pkg_files = $this->{registry_proxy}->list_files($package); + for my $file (@$pkg_files) { + if (! defined $this->{file_list}->element($file)) { + my $ret = conffile->new('Name' => "$file"); + $this->{file_list}->element($file, $ret); + } + $this->{file_list}->element($file)->conffile_package($package); + } + } +# Step 4: for all configuration files, determine package (unless +# already determined), if any +# Step 5: For each configuration file, check if it exists +# Step 6: For each existing file, see if it has been changed + + for my $file ($this->{file_list}->list) { + $this->{file_list}->element($file)->conffile_hash($file, $this->{hashfile_proxy}->hash($file)); + if (! defined $this->{file_list}->element($file)->conffile_package) { + $this->{file_list}->element($file)->conffile_package($this->{registry_proxy}->find_pkg($file)); + } + } +} + +=head2 report + +This routine generates a nicely formatted report based on the +information gathered during the processing. There are two kinds of +reports, the first being a user friendly tabular form, the second +(turned on by the C<-w> option) a easily parseable colon separated +report. + +=cut + + +our ($out_pkg, $out_file, $there, $mod); + +format STDOUT_TOP = +Configuration file Package Exists Changed +. + +format STDOUT = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<< @||| @||| +$out_file, $out_pkg, $there,$mod +. + +sub report { + my $this = shift; + for my $file (sort $this->{file_list}->list) { + ($out_pkg, $out_file, $there, $mod) = + $this->{file_list}->element($file)->conffile_report; + if ($this->{Con_Ref}->{Colons}) { + print "$out_file:$out_pkg:$there:$mod\n"; + } + else { + write; + } + } +} + +=head1 Class registry + +This moel class encapsulates the package-configuration file +associations registry. It parses the data in the registry, and +provides methods to query the registry based either on package name, +or the full path of the configuration file. + +=cut + +package registry; +use strict; + +=head2 new + +This is the constructor for the class. It takes a required parameter +B<StateDir>, and based on that, proceeds toparse the registry and +populate internal data structures. + +=cut + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + die "Missing required parameter StateDir" + unless $params{StateDir}; + + if (-e "$params{StateDir}/registry") { + if (! -r "$params{StateDir}/registry") { + die "Can't read registry file $params{StateDir}/registry:$!"; + } + open (REG, "$params{StateDir}/registry") || + die "Can't read registry file $params{StateDir}/registry:$!"; + while (<REG>) { + chomp; + my ($pkg, $file) = m/^(\S+)\s+(\S+)$/; + $self->{Packages}->{$file} = $pkg; + if (exists $self->{List}->{$pkg}) { + push @{$self->{List}->{$pkg}}, $file; + } + else { + $self->{List}->{$pkg} = [ $file ]; + } + } + } + + bless $self => $class; + + return $self; +} + +=head2 list_files + +This routine queries the registry and lists all configuration files +associated with the given package. Takes the package name as a +required parameter. + +=cut + +sub list_files { + my $this = shift; + my $pkg = shift; + + if (exists $this->{List}->{$pkg}) { + return [ @{$this->{List}->{$pkg}} ]; + } + else { + return []; + } +} + + +=head2 find_pkg + +This routine queries the registry for the package associated with the +given file. Takes the path of the configuration file as a required +parameter. + +=cut + +sub find_pkg { + my $this = shift; + my $file = shift; + + if (exists $this->{Packages}->{$file}) { + return $this->{Packages}->{$file}; + } + else { + return undef; + } +} + +=head1 Class hashfile + +This moel class encapsulates the configuration file hash database. It +parses the data in the database, and provides methods to query the +hash of the configuration file. + +=cut + +package hashfile; +use strict; + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + die "Missing required parameter StateDir" + unless $params{StateDir}; + + + if (-e "$params{StateDir}/hashfile") { + if (! -r "$params{StateDir}/hashfile") { + die "Can't read registry file $params{StateDir}/hashfile:$!"; + } + open (HASH, "$params{StateDir}/hashfile") || + die "Can't read registry file $params{StateDir}/hashfile:$!"; + while (<HASH>) { + chomp; + my ($hash, $file) = m/^(\S+)\s+(\S+)$/; + $self->{$file} = $hash + } + } + + bless $self => $class; + + return $self; +} + + +=head2 hash + +This routine queries the database for the hash associated with the +developers version of the given file. Takes the path of the +configuration file as a required parameter. + +=cut + + +sub hash { + my $this = shift; + my $file = shift; + my $value = shift; + + if ($value) { + $this->{$file} = $value; + } + return $this->{$file}; +} + +=head1 class conffile + +This is the encapsulation of a configuration file metadata. + +=cut + + + +package conffile; +use strict; +use Cwd qw{abs_path}; + + +=head2 new + +This is the constructor for the class. It takes a number of optional +parameters. If the parameter B<Colons> is present, then the output +will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on +additional diagnostics from the script. + +=cut + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + die "Missing required parameter Name" + unless $params{Name}; + $self->{Name} = $params{Name}; + $self->{Package} = $params{Package} + if $params{Package}; + $self->{Exists} = 'Yes' if -e $self->{Name}; + if ($self->{Exists}) { + $self->{Name} = abs_path( $self->{Name}); + } + bless $self => $class; + + return $self; +} + + +=head2 conffile_package + +This routine is the accessor method of the internal attribute that +holds package name associated with the file. If an optional C<value> +is present, updates the value of the attribute. + +=cut + +sub conffile_package { + my $this = shift; + my $value = shift; + + if ($value ) { + $this->{Package} = $value; + } + if (exists $this->{Package}) { + return $this->{Package}; + } + else { + return undef; + } +} + +=head2 conffile_exists + +This routine is the accessor method of the internal attribute that +holds the information whether the file exists on disk or not. + +=cut + +sub conffile_exists { + my $this = shift; + my $name = shift; + my $value = shift; + + die "Missing required parameter Name" + unless $name; + if (exists $this->{Exists}) { + return $this->{Exists}; + } + else { + return undef; + } +} + +=head2 conffile_modified + +This routine is the accessor method of the internal attribute that +holds the information whether the file exists on disk or not. If an +optional C<value> is present, updates the value of the attribute. + +=cut + +sub conffile_modified { + my $this = shift; + my $name = shift; + my $value = shift; + + die "Missing required parameter Name" + unless $name; + if ($value ) { + $this->{Modified} = $value; + } + if (exists $this->{Modified}) { + return $this->{Modified}; + } + else { + return undef; + } +} + +=head2 conffile_hash + +This routine is the accessor method of the internal attribute that +holds the hash for the developers version of the file. If an optional +C<value> is present, updates the value of the attribute. It also +notes whether or not the file is modified from the developers version. + +=cut + +sub conffile_hash { + my $this = shift; + my $name = shift; + my $value = shift; + + die "Missing required parameter Name" + unless $name; + if ($value ) { + $this->{Hash} = $value; + if (-e "$name") { + if (-x "/usr/bin/md5sum") { + open (NEWHASH, "/usr/bin/md5sum $name |") || + die "Could not run md5sum: $!"; + while (<NEWHASH>) { + chomp; + my ($hash, $dummy) = m/^(\S+)\s+(\S+)$/; + if ("$hash" ne "$value") { + $this->{Modified} = 'Yes'; + } + else { + $this->{Modified} = 'No'; + } + } + close NEWHASH; + } + else { + die "Could not find /usr/bin/md5sum .\n"; + } + } + } + if (exists $this->{Hash}) { + return $this->{Hash}; + } + else { + return undef; + } +} + +sub conffile_report { + my $this = shift; + return $this->{Package} ? $this->{Package} : "", + $this->{Name}, $this->{Exists} ? $this->{Exists} : "", + $this->{Modified}? $this->{Modified} : ""; +} + + +=head1 CLASS PKG + +This is an encapsulation of package metadata. Packages may be +associated with configuration files. + +=cut + + +package pkg; +use strict; + + +=head2 new + +This is the constructor for the class. It takes a number of optional +parameters. If the parameter B<Colons> is present, then the output +will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on +additional diagnostics from the script. + +=cut + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + die "Missing required parameter Name" + unless $params{Name}; + $self->{Name} = $params{Name}; + + bless $self => $class; + + return $self; +} + +sub list_files { + my $this = shift; + return []; +} + +=head1 CLASS object_list + +This is a clas which holds lists of object names, either packages or +configuration file object names. It provides methods to add, access, +and remove objects, as well as an option to list all elements in the +list. + +=cut + +package object_list; +use strict; + + + +=head2 new + +This is the constructor for the class. It takes no arguments. + +=cut + +sub new { + my $this = shift; + my %params = @_; + my $class = ref($this) || $this; + my $self = {}; + + $self->{"List"} = (); + + bless $self => $class; + + return $self; +} + +=head2 element + +This is an accessor method for elements of the list. If an optional +value argument exists, it creates or updates the element associtated +with the vaslue. Takes in a required name, which is used as a kay, and +an optional value argument. The value is returned. + +=cut + +sub element { + my $this = shift; + my $name = shift; + my $value = shift; + + die "Missing required parameter Name" + unless $name; + if ($value) { + $this->{"List"}->{$name} = $value; + } + if (exists $this->{"List"}->{$name}) { + return $this->{"List"}->{$name}; + } + else { + return undef; + } +} + + +=head2 remove + +Removes elements from the list. Take in an required name, which is +used as the key for the element to delete. + +=cut + +sub remove { + my $this = shift; + my $name = shift; + die "Missing required parameter Name" + unless $name; + delete $this->{"List"}->{$name} + if (exists $this->{"List"}->{$name} ); +} + +=head2 list + +This routine lists all the elements in the list. It does not take any +options. + +=cut + +sub list { + my $this = shift; + + return keys %{$this->{"List"}}; +} + +package main; +use Getopt::Long; + +sub main { + my $optdesc = ucf->Optdesc(); + my $parser = new Getopt::Long::Parser; + $parser->configure("bundling"); + $parser->getoptions (%$optdesc); + my $query = ucf->new(%::ConfOpts); + $query->process; + $query->report; +} + +&main; + +exit 0; + +=head1 CAVEATS + +This is very inchoate, at the moment, and needs testing. + +=cut + +=head1 BUGS + +None Known so far. + +=cut + +=head1 AUTHOR + +Manoj Srivastava <srivasta\@debian.org> + +=head1 COPYRIGHT AND LICENSE + +This script is a part of the Ucf package, and is + +Copyright (c) 2006 Manoj Srivastava <srivasta\@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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +=cut + +1; + +__END__ @@ -0,0 +1,235 @@ +.\" -*- Mode: Nroff -*- +.\" ucfq.1 --- +.\" Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +.\" Created On : Sun Apr 16 16:29:21 2006 +.\" Created On Node : glaurung.internal.golden-gryphon.com +.\" Last Modified By : Manoj Srivastava +.\" Last Modified On : Sun Apr 16 16:31:08 2006 +.\" Last Machine Used: glaurung.internal.golden-gryphon.com +.\" Update Count : 2 +.\" Status : Unknown, Use with caution! +.\" HISTORY : +.\" Description : +.\" +.\" arch-tag: daf13e00-a69c-45f0-80a1-b6f3b8bdb14b +.\" +.\" Copyright (c) 2006 Manoj Srivastava <srivasta@debian.org> +.\" +.\" This is free documentation; 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. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +.\" 02111-1307, USA. +.\" + +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.TH UCFQ 1 "2006-04-16" "perl v5.8.8" "User Contributed Perl Documentation" +.SH NAME +ucfq \- query the ucf database +.SH "SYNOPSIS" +.Vb 1 +\& usage: ucfq [options] (/path/to/file|package)[/path/to/file|package ...] +.Ve +.SH "OPTIONS" +.IP "\fB\-\-help\fR \fBh\fR Print out a usage message." 3 +.PD 0 +.IP "\fB\-\-debug\fR \fB\-d\fR Turn on debugging mode." 3 +.IP "\fB\-\-verbose\fR \fB\-v\fR Make the script more verbose.." 3 +.IP "\fB\-\-with\-colons\fR \fB\-w\fR" 3 +.RS 3 +.PD +.RS 2 +Normally, the script presents the information in a human readable +tabular format, but that may be harder for a machine to parse. With +this option, the output is a compact, colon separated line, with no +dividers, headers, or footer. +.RE +.RE +.RS 3 +.RE +.IP "\fB\-\-state\-dr\fR dir" 3 +.RS 3 +.RS 2 +Set the state directory to \f(CW\*(C`/path/to/dir\*(C'\fR instead of the default +\&\f(CW\*(C`/var/lib/ucf\*(C'\fR. Used mostly for testing. +.RE +.RE +.RS 3 +.RE +.SH "DESCRIPTION" +This script takes a set of arguments, each of which is a package name +(and thus does not contain a /) or a full path to a configuration +file, and outputs the associated package, if any, if the file exists +on disk, and whether it has been modified by the user. The output is +either a human readable tabular form, or a compact colon-separated +machine friendly format. +.PP +This script can potentially be used in package \f(CW\*(C`postrm\*(C'\fR scripts +during purge to query the system for configuration files that may +still exist on the system, and whether these files have been locally +modified by the user \*(-- assuming that the package registered all the +configuration files with \fBucf\fR using \f(CW\*(C`ucfr\*(C'\fR. +.SH "CAVEATS" +This is very inchoate, at the moment, and needs testing. +.SH "BUGS" +None Known so far. +.SH "AUTHOR" +Manoj Srivastava <srivasta\e@debian.org> +.SH "COPYRIGHT AND LICENSE" +This script is a part of the Ucf package, and is +.PP +Copyright (c) 2006 Manoj Srivastava <srivasta\e@debian.org> +.PP +This program is free software; you can redistribute it and / or modify +it under the terms of the \s-1GNU\s0 General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +.PP +This program is distributed in the hope that it will be useful, +but \s-1WITHOUT\s0 \s-1ANY\s0 \s-1WARRANTY\s0; without even the implied warranty of +\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. See the +\&\s-1GNU\s0 General Public License for more details. +.PP +You should have received a copy of the \s-1GNU\s0 General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, \s-1MA\s0 02111\-1307 \s-1USA\s0 @@ -0,0 +1,336 @@ +#! /bin/bash +# -*- Mode: Sh -*- +# ucfr --- +# Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +# Created On : Tue Apr 11 11:09:15 2006 +# Created On Node : glaurung.internal.golden-gryphon.com +# Last Modified By : Manoj Srivastava +# Last Modified On : Tue Apr 11 13:50:58 2006 +# Last Machine Used: glaurung.internal.golden-gryphon.com +# Update Count : 43 +# Status : Unknown, Use with caution! +# HISTORY : +# Description : +# +# Register a configuration file as belonging to a package +# +# arch-tag: 6e1d33fe-a930-41ce-8d0f-c87f87b19918 +# + +# make sure we exit on error +set -e + +# set the version and revision +progname=$(basename "$0") + +###################################################################### +######## ######### +######## Utility functions ######### +######## ######### +###################################################################### +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 >&2 "$progname: $3 is $2"; + fi + eval "$1=\"\$2\""; + fi +} + +withecho () { + echo " $@" >&2 + "$@" +} + + +purge_from_registry () { + if [ ! -e "$statedir/registry" ]; then + echo >&2 "$progname: Internal error: $statedir/registry does not exist"; + exit 6; + fi + + if [ $count -eq 0 ]; then + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "$progname: Association already purged. No changes."; + fi + exit 0; + fi + old_pkg=$(egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \ + awk '{print $1;}' ); + if [ "$pkg" != "$old_pkg" ]; then + echo >&2 "ucfr: Association belongs to $old_pkg, not $pkg"; + if [ "X$FORCE" = "X" ]; then + echo >&2 "ucfr: Aborting"; + exit 5; + fi + fi + + # OK, so we have something to purge. + for i in $(/usr/bin/seq 6 -1 0); do + if [ -e "${statedir}/registry.${i}" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -f "${statedir}/registry.${i}" "${statedir}/registry.$(($i+1))" + else + echo cp -f "${statedir}/registry.${i}" "${statedir}/registry.$(($i+1))" + fi + fi + done + if [ "X$docmd" = "XYES" ]; then + cp -f "$statedir/registry" "$statedir/registry.0" + else + echo cp -f "$statedir/registry" "$statedir/registry.0" + fi + if [ "X$docmd" = "XYES" ]; then + set +e + if [ "X$VERBOSE" != "X" ]; then + echo "egrep -v [[:space:]]${real_conf_file_re}$ $statedir/registry >\\" + echo " $statedir/registry.tmp || true"; + fi + #echo "egrep -v [[:space:]]${real_conf_file_re}$ $statedir/registry" + egrep -v "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \ + "$statedir/registry.tmp" || true; + if [ "X$docmd" = "XYES" ]; then + mv -f "$statedir/registry.tmp" "$statedir/registry" + else + echo mv -f "$statedir/registry.tmp" "$statedir/registry" + fi + set -e + fi +} + +replace_in_registry () { + if [ ! -e "$statedir/registry" ]; then + echo >&2 "$progname: Internal error: $statedir/registry does not exist"; + exit 6; + fi + if [ $count -eq 1 ]; then + old_pkg=$(egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \ + awk '{print $1;}' ); + + if [ "$pkg" != "$old_pkg" ]; then + if [ "X$FORCE" = "X" ]; then + echo >&2 "$progname: Attempt from package $pkg to take ${real_conf_file} away from package $old_pkg"; + echo >&2 "ucfr: Aborting."; + exit 4; + fi + else + if [ "X$VERBOSE" != "X" ]; then + echo >&2 "$progname: Association already recorded. No changes."; + fi + exit 0; + fi + fi + + for i in $(/usr/bin/seq 6 -1 0); do + if [ -e "${statedir}/registry.${i}" ]; then + if [ "X$docmd" = "XYES" ]; then + cp -f "${statedir}/registry.${i}" \ + "${statedir}/registry.$(($i+1))" + else + echo cp -f "${statedir}/registry.${i}" \ + "${statedir}/registry.$(($i+1))" + fi + fi + done + if [ "X$docmd" = "XYES" ]; then + cp -f "$statedir/registry" "$statedir/registry.0" + else + echo cp -f "$statedir/registry" "$statedir/registry.0" + fi + if [ "X$docmd" = "XYES" ]; then + set +e + if [ "X$VERBOSE" != "X" ]; then + echo "egrep -v \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\" \\" + echo " $statedir/registry.tmp || true" + echo "echo \"$pkg $real_conf_file\" >> \"$statedir/registry.tmp\"" + echo "mv -f $statedir/registry.tmp $statedir/registry" + fi + egrep -v "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \ + "$statedir/registry.tmp" || true; + echo "$pkg $real_conf_file" >> "$statedir/registry.tmp"; + mv -f "$statedir/registry.tmp" "$statedir/registry" + set -e + else + echo "egrep -v \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\" \\" + echo " $statedir/registry.tmp || true" + echo "echo \"$pkg $real_conf_file\" >> \"$statedir/registry.tmp\"" + echo "mv -f $statedir/registry.tmp $statedir/registry" + fi +} + + +usageversion () { + cat >&2 <<END +Debian GNU/Linux $progname $pversion. + Copyright (C) 2002-2006 Manoj Srivastava. +This is free software; see the GNU General Public Licence for copying +conditions. There is NO warranty. + +Usage: $progname [options] package_name path_for_configuration_file +Options: + -h, --help print this message + -f --force Force the association, even if another package + used to own the configuration file. + -d [n], --debug [n] Set the Debug level to N + -n, --no-action Dry run. No action is actually taken. + -v, --verbose Make the script verbose + -p, --purge Remove any reference to the package/file association + from the records + --state-dir bar Set the state directory to bar instead of the + default '/var/lib/ucf'. Used mostly for testing. +END + +} + +###################################################################### +######## ######### +######## Command line args ######### +######## ######### +###################################################################### +# +# Long term variables# +# +docmd='YES' +action='withecho' +action= +DEBUG=0 +VERBOSE='' +statedir='/var/lib/ucf'; +THREEWAY= + +# Note that we use `"$@"' to let each command-line parameter expand to a +# separate word. The quotes around `$@' are essential! +# We need TEMP as the `eval set --' would nuke the return value of getopt. +TEMP=`getopt -a -o hd::D::fnvp -n "$progname" \ + --long help,debug::,DEBUG::,force,no-action,purge,verbose,state-dir: \ + -- "$@"` + +if [ $? != 0 ] ; then + echo "Error handling options.Terminating..." >&2 ; + exit 1 ; +fi + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +while true ; do + case "$1" in + -h|--help) usageversion; exit 0 ;; + -n|--no-action) action='echo'; docmd='NO'; shift ;; + -v|--verbose) VERBOSE=1; shift ;; + -f|--force) FORCE=1; shift ;; + --state-dir) opt_state_dir="$2"; shift 2 ;; + -D|-d|--debug|--DEBUG) + # d has an optional argument. As we are in quoted mode, + # an empty parameter will be generated if its optional + # argument is not found. + case "$2" in + "") setq DEBUG 1 "The Debug value"; shift 2 ;; + *) setq DEBUG "$2" "The Debug value"; shift 2 ;; + esac ;; + -p|--purge) PURGE=YES; shift ;; + --) shift ; break ;; + *) echo >&2 "$progname: Internal error!" ; exit 1 ;; + esac +done +# Need to run as root, or else the +if test $(id -u) != 0; then + if [ "$docmd" = "YES" ]; then + echo "$progname: Need to be run as root." >&2 + echo "$progname: Setting up no action mode." >&2 + action='echo'; + docmd='NO'; + fi +fi + +if [ $# != 2 ]; then + echo >&2 "$progname: *** ERROR: Need exactly two arguments, got $#"; + echo >&2 "" + usageversion; + exit 3 ; +fi + +# We have here a configuration file, which can be a symlink, and may +# contain characters that are unsafe in regular expressions +setq pkg "$1" "The Package name"; +setq conf_file "$2" "The Configuration file"; +setq real_conf_file "$(readlink -q -m $conf_file)" "The (real) Configuration file"; + +pkg_re=$(echo $pkg | sed -e 's,+,\\+,') +conf_file_re=$(echo $conf_file | sed -e 's,+,\\+,') +real_conf_file_re=$(echo $real_conf_file | sed -e 's,+,\\+,') + +case $conf_file_re in + /*) + : echo fine + ;; + *) + echo >&2 "$progname: Need a fully qualified path for the file \"$conf_file\"" + # Don't exit with an error for etch' + exit 0; +esac + +# Load site defaults and over rides. +if [ -f /etc/ucf.conf ]; then + . /etc/ucf.conf +fi + +# Command line, env variable, config file, or default +if [ ! "x$opt_state_dir" = "x" ]; then + setq statedir "$opt_state_dir" "The State directory" +elif [ ! "x$UCF_STATE_DIR" = "x" ]; then + setq statedir "$UCF_STATE_DIR" "The State directory" +elif [ ! "x$conf_state_dir" = "x" ]; then + setq statedir "$conf_state_dir" "The State directory" +else + setq statedir '/var/lib/ucf' "The State directory" +fi + +# VERBOSE of 0 is supposed to be the same as not setting VERBOSE +if [ "X$VERBOSE" = "X0" ]; then + VERBOSE='' +fi + +# +if [ -e "$statedir/registry" -a ! -w "$statedir/registry" ]; then + echo >&2 "$progname: do not have write privilege to the registry data" + if [ "X$docmd" = "XYES" ]; then + exit 1; + fi +fi + +# test and see if this file exists in the database +if [ ! -d "$statedir" ]; then + mkdir -p "$statedir" +fi + +if [ ! -f "$statedir/registry" ]; then + touch "$statedir/registry" +fi + + +if [ "X$VERBOSE" != "X" ]; then + echo >&2 "$progname: The registry exists" +fi + +# sanity check +count=$(egrep --count "[[:space:]]${real_conf_file_re}$" "$statedir/registry") || true + +if [ "$count" -ge 2 ]; then + echo >&2 "$progname: Corrupt registry: Duplicate entries for ${conf_file}"; + egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry"; + exit $count; +fi + +if [ "X$PURGE" != "X" ]; then + purge_from_registry +else + replace_in_registry +fi + + +exit 0; @@ -0,0 +1,157 @@ +.\" -*- Mode: Nroff -*- +.\" ucfr.1 --- +.\" Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) +.\" Created On : Tue Apr 11 13:58:23 2006 +.\" Created On Node : glaurung.internal.golden-gryphon.com +.\" Last Modified By : Manoj Srivastava +.\" Last Modified On : Tue Apr 11 14:43:23 2006 +.\" Last Machine Used: glaurung.internal.golden-gryphon.com +.\" Update Count : 14 +.\" Status : Unknown, Use with caution! +.\" HISTORY : +.\" Description : +.\" +.\" arch-tag: f2f569c2-5b54-4e5d-83f0-d2a39e103ecb +.\" +.\" Copyright (c) 2006 Manoj Srivastava <srivasta@debian.org> +.\" +.\" This is free documentation; 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. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual 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 manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +.\" 02111-1307, USA. +.\" +.TH UCFR 1 "Apr 11 2006" "Debian" "Debian GNU/Linux manual" +.SH NAME +ucfr \- Update Configuration File Registry: associate packages with configuration files +.SH SYNOPSIS +.B ucfr +.RI [ options "] " +.I <Package> +.I <Path to configuration file> +.SH DESCRIPTION +Where +.I Package +is the package associated with the configuration file (and, in some +sense, its owner), and +.I Path to configuration file +is the full path to the location (usually under /etc) where the +configuration file lives, and is potentially modified by the end +user. Please note that usually this means that we register actual +files, and not symbolic links to files. +.B ucfr +will follow symbolic links and register the real file, and not the +symbolic link. +.PP +This script maintains an association between configuration files and +packages, and is meant to help provide facilities that +.I dpkg +provides conffiles for configuration files and not shipped in a +.B Debian +package, but handled by the postinst by +.I ucf +instead. This script is idempotent, associating a package to a file +multiple times is not an error. It is normally an error to try to +associate a file which is already associated with another package, but +this can be over ridden by using the +.I \-\-force +option. +.SH OPTIONS +.TP +.B "\-h, \-\-help" +Print a short usage message +.TP +.B "\-n, \-\-no\-action" +Dry run. Print the actions that would be taken if the script is +invoked, but take no action. +.TP +.B "\-d [n], \-\-debug [n]" +Set the debug level to the (optional) level +.I n +(n defaults to 1). This turns on copious debugging information. +.TP +.B "\-p, \-\-purge" +Removes all vestiges of the association between the named package and +the configuration file from the registry. The association must already +exist; if the configuration file is associated with some other +package, an error happens, unless the option +.I \-\-force +is also given. In that case, the any associations for the +configuration file are removed from the registry, whether or not the +package name matches. This action is idempotent, asking for an +association to be purged multiple times does not result in an error, +since attempting to remove an non-existent association is silently +ignored unless the +.I \-\-verbose +option is used (in which case it just issues a diagnostic). +.TP +.B "\-v, \-\-verbose" +Make the script be very verbose about setting internal variables. +.TP +.B "\-f, \-\-force" +This option forces operations requested even if the configuration file +in consideration is owned by another package. This allows a package to +.I "hijack" +a configuration file from another package, or to purge the +association between the file and some other package in the registry. +.TP +.B "\-\-state\-dir /path/to/dir" +Set the state directory to /path/to/dir instead of the default +.I /var/lib/ucf. +Used mostly for testing. +.SH USAGE +The most common case usage is pretty simple: a single line invocation +in the postinst on configure, and another single line in the postrm to +tell +.B ucfr +to forget about the association with the configuration file on purge +(using the \-\-purge option) is all that is needed (assuming ucfr is +still on the system). +.SH FILES +.I /var/lib/ucf/registry, +and +.I /var/lib/ucf/registry.X, +where +.I X +is a small integer, where previous versions of the registry are +stored. +.PP +.I /etc/ucf.conf +.SH EXAMPLES +If the package +.I foo +wants to use ucfr to associate itself with a configuration file +.I foo.conf, +a simple invocation of ucfr in the postinst file is all that is +needed: +.PP +.B ucfr +.I foo +.I /etc/foo.conf +.PP +On purge, one should tell ucf to forget about the file (see detailed +examples in /usr/share/doc/examples): +.PP +.B ucfr +.I \-\-purge +.I foo +.I /etc/foo.conf +.SH "SEE ALSO" +ucf(1), ucf.conf(5). +.SH AUTHOR +This manual page was written Manoj Srivastava <srivasta@debian.org>, +for the Debian GNU/Linux system. |