[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Guillem Jover] Parsing of dpkg status file considered harmful



On Die, 05 Jun 2007, Norbert Preining wrote:
> On Fre, 01 Jun 2007, Florent Rougon wrote:
> > Therefore, unless someone has good arguments, I'll use something like
> > this:
> > 
> >   dpkg-query -W -f='${Conffiles}' "$package" \
> >     | grep -F " $file " | cut -d ' ' -f 3
> 
> There is one problem here, we have to know the $package which can/is a
> bit of a pain ... I took a look into the code in texlive

Ok, it wasn't that bad, here is a diff for common.functions.preinst,
comments:

Index: common.functions.preinst
===================================================================
--- common.functions.preinst	(revision 2935)
+++ common.functions.preinst	(working copy)
@@ -3,6 +3,22 @@
 
 dpkg_md5sum()
 {
+    file="$1"
+    package="$2"
+    md5sum=$(dpkg-query -W -f='${Conffiles}' "$package" \
+            | grep -F " $conffile " | cut -d ' ' -f 3)
+    if [ -z "$md5sum" ]; then
+        echo "$file: md5sum not known." >&2
+        echo "It seems that this file is not handled by dpkg conffiles." >&2
+        # don't exit but return empty md5sum
+        md5sum=""
+        # exit 1
+    fi
+    echo $md5sum
+}
+
+dpkg_md5sum_old()
+{
     file=$1
     md5sum=$(grep "$file[[:space:]]"  /var/lib/dpkg/status | cut -f 3 -d ' ')
     if [ -z "$md5sum" ]; then
@@ -19,10 +35,11 @@
 {
     dodelete="$1"
     orig="$2"
-    new="$3"
-    version="$4"
+    package="$3"
+    new="$4"
+    version="$5"
     if [ -r "$orig" ] ; then
-      mdorig=$(dpkg_md5sum "$orig")
+      mdorig=$(dpkg_md5sum "$orig" "$package")
       if [ $(md5sum "$orig" | cut -f 1 -d ' ') = "$mdorig" ] ; then
         rm "$orig"
       else
@@ -67,6 +84,8 @@
     
     conf_relpath=${cfgfile#/etc/texmf/}
     conf_oldpath="/etc/texmf/texlive/$conf_relpath"
+    # default package is texlive-base-bin
+    package=texlive-base-bin
     case "$cfgfile" in 
         /etc/texmf/dvips/config/*)
             # special case for dvips config
@@ -74,6 +93,7 @@
             ;;
         # files which were only present in tetex
         /etc/texmf/texdoctk/texdoctk.dat)
+            package=tetex-base
             conf_oldpath="/etc/texdoctk/texdoctk.dat"
             ;;
         # symlink target had a different name
@@ -87,12 +107,12 @@
             # We do not want to create .preinst-deleted, so we call
             # check_move with first argument 0 which means that the
             # preinst-deleted file will not be created
-            check_move 0 /etc/texmf/xdvi.cfg /etc/texmf/xdvi/xdvi.cfg $version
+            check_move 0 /etc/texmf/xdvi.cfg tetex-bin /etc/texmf/xdvi/xdvi.cfg $version
             # now set the conf_oldpath to the texlive version
             conf_oldpath="/etc/texmf/texlive/xdvi.cfg"
             ;;   
     esac
-    check_move 1 $conf_oldpath $cfgfile $version
+    check_move 1 $conf_oldpath $package $cfgfile $version
 }
 # common.functions.preinst end
 # Local Variables:

Best wishes

Norbert

-------------------------------------------------------------------------------
Dr. Norbert Preining <preining@logic.at>        Vienna University of Technology
Debian Developer <preining@debian.org>                         Debian TeX Group
gpg DSA: 0x09C5B094      fp: 14DF 2E6C 0307 BE6D AD76  A9C0 D2BF 4AA3 09C5 B094
-------------------------------------------------------------------------------
GREAT TOSSON (n.)
A fat book containing four words and six cartoons which cost £6.95.
			--- Douglas Adams, The Meaning of Liff



Reply to: