Package: dpkg
Version: 1.13.25
Severity: wishlist
Tags: patch
promptconfaction offers the choices of
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
This patch adds another option: vimdiff.
It works similarly as D, only it doesn't diff but vimdiff the files.
-- System Information:
Debian Release: 4.0
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-6-686
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL
set to en_US.utf-8)
Versions of packages dpkg depends on:
ii coreutils 5.97-5.3 The GNU core utilities
ii libc6 2.3.6.ds1-13etch5 GNU C Library: Shared libraries
dpkg recommends no packages.
-- no debconf information
--- src/configure.c 2008-04-02 14:13:56 +0000
+++ src/configure.c 2008-04-02 14:15:28 +0000
@@ -478,6 +478,38 @@
}
}
+/* Show a vimdiff between two files
+ */
+static void showvimdiff(const char* old, const char* new) {
+ int pid;
+ int r;
+ int status;
+
+ if (!(pid=m_fork())) {
+ /* Child process */
+ const char* s; /* shell */
+ char cmdbuf[1024]; /* command to run */
+
+ sprintf(cmdbuf, "vimdiff %.250s %.250s >/dev/tty </dev/tty", new, old);
+
+ s=getenv(SHELLENV);
+ if (!s || !*s)
+ s=DEFAULTSHELL;
+
+ execlp(s,s,"-c", cmdbuf, NULL);
+ ohshite(_("failed to run %s (%.250s)"), DIFF, cmdbuf);
+ }
+
+ /* Parent process */
+ while (((r=waitpid(pid,&status,0))==-1) && (errno==EINTR))
+ ;
+
+ if (r!=pid) {
+ onerr_abort++;
+ ohshite(_("wait for shell failed"));
+ }
+}
+
/* Suspend dpkg temporarily
*/
@@ -613,7 +645,8 @@
" Y or I : install the package maintainer's version\n"
" N or O : keep your currently-installed version\n"
" D : show the differences between the versions\n"
- " Z : background this process to examine the situation\n"));
+ " Z : background this process to examine the situation\n"
+ " V : show the vimdiff between the versions\n"));
if (what & cfof_keep)
fprintf(stderr, _(" The default action is to keep your current version.\n"));
@@ -622,7 +655,7 @@
s= strrchr(cfgfile,'/');
if (!s || !*++s) s= cfgfile;
- fprintf(stderr, "*** %s (Y/I/N/O/D/Z) %s ? ",
+ fprintf(stderr, "*** %s (Y/I/N/O/D/Z/V) %s ? ",
s,
(what & cfof_keep) ? _("[default=N]") :
(what & cfof_install) ? _("[default=Y]") : _("[no default]"));
@@ -648,6 +681,9 @@
if (cc == 'd')
showdiff(realold, realnew);
+ if (cc == 'v')
+ showvimdiff(realold, realnew);
+
if (cc == 'z')
suspend();