Package: dpkg Version: 1.13.12 Tags: patch If you locally delete a conffile which the package maintainer then ships a new version of, you get this message:
Configuration file `/etc/gnome/config/Emacs.ad' ==> Modified (by you or by a script) since installation. ==> Package distributor has shipped an updated version. 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 Z : background this process to examine the situation The default action is to keep your current version. *** Emacs.ad (Y/I/N/O/D/Z) [default=N] ? It's rather strange to say that the file was `modified' when in fact it was deleted. Also, if you say `y' you also get a warning like this: dpkg: capplets-data: warning - failed to link `/etc/gnome/config/Emacs.ad' to `/etc/gnome/config/Emacs.ad.dpkg-old': No such file or directory The enclosed patch produces this message instead: Configuration file `/etc/gnome/config/Emacs.ad' ==> Deleted (by you or by a script) since installation. ==> Package distributor has shipped an updated version. 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 Z : background this process to examine the situation The default action is to keep your current version. *** Emacs.ad (Y/I/N/O/D/Z) [default=N] ? Only the first line is different, but this seems sufficiently clear. Also, the patch suppresses the attempt to make a backup copy of the nonexistent original file. FYI, I'm about to include this patch in my next dpkg upload for Ubuntu. Ian. --- ../debian/dpkg-1.13.12/src/configure.c 2006-01-18 08:30:03.000000000 +0000 +++ src/configure.c 2006-02-04 11:44:52.000000000 +0000 @@ -214,6 +214,8 @@ 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 @@ 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 @@ 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 @@ " ==> 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 @@ 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: -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]