tag 606756 + patch
thanks
Hi,
I've uploaded Jonathan's patch for this bug, using the .dsc provided
earlier in the log. For completeness, the patch for the NMU is
attached.
Regards,
Adam
diff -u dash-0.5.5.1/debian/dash.postinst dash-0.5.5.1/debian/dash.postinst
--- dash-0.5.5.1/debian/dash.postinst
+++ dash-0.5.5.1/debian/dash.postinst
@@ -1,6 +1,25 @@
#!/bin/sh
set -e
+# $1: dfile, $2: link target, $3: distrib
+replace_with_link() {
+ dfile=$1; ltarget=$2; distrib=$3
+ temp=$dfile.tmp
+ # Safely create a symlink to $ltarget at $dfile, first
+ # making a backup of $dfile (the file being diverted)
+ # in $distrib.
+ #
+ # The cp / ln -s / mv dance avoids having to live without
+ # $dfile (think: /bin/sh) for even a moment, so applications
+ # running in parallel can continue without trouble.
+ # See dash.preinst for details.
+ if [ -e "$dfile" ]; then
+ cp -dp "$dfile" "$distrib"
+ fi
+ ln -sf "$ltarget" "$temp"
+ mv -f "$temp" "$dfile"
+}
+
# $1: case, $2: dfile, $3: ltarget [, $4: distrib]
check_divert() {
dfile=$2; ltarget=$3
@@ -28,10 +47,7 @@
if [ -n "$truename" ]; then
rm -f "$truename"
fi
- # Safely create a slink to $ltarget at $dfile
- # by first making a copy of $dfile at $distrib
- cp -dp $dfile $distrib
- ln -sf $ltarget $dfile
+ replace_with_link $dfile $ltarget $distrib
fi
;;
false)
@@ -48,8 +64,7 @@
rm -f "$truename"
fi
# Point everything back to bash
- cp -dp $dfile $distrib
- ln -sf $bash $dfile
+ replace_with_link $dfile $bash $distrib
fi
;;
ash)
@@ -75,7 +90,8 @@
if [ "$dst" != $distrib ] && [ -e "$dst" ]; then
mv "$dst" $distrib
fi
- ln -sf $3 $2
+ ln -sf $3 $2.tmp
+ mv -f $2.tmp $2
;;
*)
d=${2%/*}
@@ -83,7 +99,8 @@
[ -h $2 ] && [ -f $2 ] && [ -f $d/$5 ] &&
cmp $2 $d/$5
then
- ln -sf $3 $2
+ ln -sf $3 $2.tmp
+ mv -f $2.tmp $2
fi
;;
esac
diff -u dash-0.5.5.1/debian/dash.preinst dash-0.5.5.1/debian/dash.preinst
--- dash-0.5.5.1/debian/dash.preinst
+++ dash-0.5.5.1/debian/dash.preinst
@@ -15,7 +15,9 @@
# intermediate temporary file as ln -sf is not atomic.
# dpkg-divert's --rename direct equivalent would be:
# mv $dfile $distrib -- but we could end up without a symlink
- cp -dp $dfile $distrib
+ if [ -e $dfile ]; then
+ cp -dp $dfile $distrib
+ fi
ln -sf $ltarget $temp
mv -f $temp $dfile
dpkg-divert --package dash --divert $distrib --add $dfile
diff -u dash-0.5.5.1/debian/changelog dash-0.5.5.1/debian/changelog
--- dash-0.5.5.1/debian/changelog
+++ dash-0.5.5.1/debian/changelog
@@ -1,3 +1,14 @@
+dash (0.5.5.1-7.4) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * dash.preinst: Do not error out if /bin/sh or its manpage is
+ not already present (thx Brian Potkin; closes: #606756).
+ * dash.postinst: Cope with missing files. Atomically replace
+ /bin/sh and its manpage rather than removing and re-creating them
+ (thx Adam D. Barratt).
+
+ -- Jonathan Nieder <[email protected]> Tue, 14 Dec 2010 01:33:42 -0600
+
dash (0.5.5.1-7.3) unstable; urgency=medium
* Non-maintainer upload.