]> err.no Git - dpkg/commitdiff
On package configuration, differentiate between modified and
authorFrank Lichtenheld <djpig@debian.org>
Fri, 10 Feb 2006 14:40:46 +0000 (14:40 +0000)
committerFrank Lichtenheld <djpig@debian.org>
Fri, 10 Feb 2006 14:40:46 +0000 (14:40 +0000)
deleted configuration files (Ian Jackson). Closes: #351361

ChangeLog
debian/changelog
src/configure.c

index 7ae660608089f14e191ff486297031b2a232b703..00770280cbeb105740a1b7c343e87cee4795c363 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-02-10  Ian Jackson <iwj@ubuntu.com>
+
+       * src/configure.c: Differentiate between modified
+       and deleted configuration files. Gives and more
+       accurate description to the user and eliminates
+       a warning that was produced when trying to
+       backup a non-existant file.
+
 2006-02-10  James R. Van Zandt  <jrvz@comcast.net>
 
        * man/C/dpkg.1: Document the default log file. The behaviour in case
index 441b62811286b5235e383bd6a01b3d6c4900edb9..0a19333fe795ecc7aa6a5978df6a455faa562df7 100644 (file)
@@ -42,6 +42,8 @@ dpkg (1.13.14~) UNRELEASED; urgency=low
     by creating new files in a secure manner. Closes: #178839, #338591
   * Fix some semantic errors in dpkg-shlibdeps due to typos in used
     variables.
+  * On package configuration, differentiate between modified and
+    deleted configuration files (Ian Jackson). Closes: #351361
 
   [ Christian Perrier ]
   * Switch to po4a for manpages translation. Closes: #320122
index a2494c4a3088d9a9d24c5ffdd2cbd44323fb8418..feccdb8d1a16d81a930e85eb157eb718f14073a1 100644 (file)
@@ -214,6 +214,8 @@ void deferred_configure(struct pkginfo *pkg) {
                                useredited= strcmp(conff->hash,currenthash) != 0;
                                distedited= strcmp(conff->hash,newdisthash) != 0;
                                what= conffoptcells[useredited][distedited];
+                               if (!strcmp(currenthash,NONEXISTENTFLAG))
+                                       what |= cfof_userrmd;
                        }
 
                        debug(dbg_conff,
@@ -222,7 +224,7 @@ void deferred_configure(struct pkginfo *pkg) {
 
                        what=promptconfaction(conff->name, cdr.buf, cdr2.buf, useredited, distedited, what);
 
-                       switch (what & ~cfof_isnew) {
+                       switch (what & ~(cfof_isnew|cfof_userrmd)) {
                                case cfo_keep | cfof_backup:
                                        strcpy(cdr2rest,DPKGOLDEXT);
                                        if (unlink(cdr2.buf) && errno != ENOENT)
@@ -258,8 +260,9 @@ void deferred_configure(struct pkginfo *pkg) {
                                                fprintf(stderr,
                                                                _("dpkg: %s: warning - failed to remove `%.250s' (before overwrite): %s\n"),
                                                                pkg->name, cdr2.buf, strerror(errno));
-                                       if (link(cdr.buf,cdr2.buf))
-                                               fprintf(stderr,
+                                       if (!(what & cfof_userrmd))
+                                               if (link(cdr.buf,cdr2.buf))
+                                                       fprintf(stderr,
                                                                _("dpkg: %s: warning - failed to link `%.250s' to `%.250s': %s\n"),
                                                                pkg->name, cdr.buf, cdr2.buf, strerror(errno));
                                        /* fall through */
@@ -560,9 +563,11 @@ static enum conffopt promptconfaction(const char* cfgfile, const char* realold,
                                                " ==> File on system created by you or by a script.\n"
                                                " ==> File also in package provided by package maintainer.\n"));
                } else {
-                       fprintf(stderr, useredited ?
+                       fprintf(stderr, !useredited ?
+                                       _("\n     Not modified since installation.\n") :
+                                                       !(what & cfof_userrmd) ?
                                        _("\n ==> Modified (by you or by a script) since installation.\n") :
-                                       _("\n     Not modified since installation.\n"));
+                                       _("\n ==> Deleted (by you or by a script) since installation.\n"));
 
                        fprintf(stderr, distedited ?
                                        _(" ==> Package distributor has shipped an updated version.\n") :
@@ -646,15 +651,17 @@ static enum conffopt promptconfaction(const char* cfgfile, const char* realold,
        log_message("conffile %s %s", cfgfile,
                    (cc == 'i' || cc == 'y') ? "install" : "keep");
 
+       what &= cfof_userrmd;
+
        switch (cc) {
                case 'i':
                case 'y':
-                       what=cfof_install|cfof_backup;
+                       what |= cfof_install|cfof_backup;
                        break;
 
                case 'n':
                case 'o':
-                       what=cfof_keep|cfof_backup;
+                       what |= cfof_keep|cfof_backup;
                        break;
 
                default: