Package: kernel-source
Severity: wishlist
Tags: patch
At the moment, it is hard to make a custom kernel-source package with a
revision such as 2.0foo.1, because the debian revisions must be simple
integers. The attached patch improves the situation a bit, by using dpkg
--compare-versions where possible, instead of simple "test -relation".
I'm saying "improves a bit" and not "fixes", because the order of series
files is determined lexicographically by "ls" or "sort -r". Therefore
when inventing a revision one should take care to keep the lexicographic
order.
By the way, because of the sort and ls usage, apply should probably set
LANG to "C", just to be sure.
regards,
Marcin
--
Marcin Owsiany <[EMAIL PROTECTED]> http://marcin.owsiany.pl/
GnuPG: 1024D/60F41216 FE67 DA2D 0ACA FC5E 3F75 D6F6 3A0D 8AA0 60F4 1216
Index: apply
===================================================================
--- apply (revision 17)
+++ apply (working copy)
@@ -14,6 +14,31 @@
echo "W: $@" >&2
}
+cmpv() {
+ former="$1"
+ relation="$2"
+ latter="$3"
+
+ case "$relation" in
+ (lt|le|eq|ne|ge|gt)
+ ;;
+ *)
+ die "Unsupported relation \"$relation\""
+ ;;
+ esac
+
+ if which dpkg >/dev/null 2>&1 ; then
+ # use full-blown dpkg version comparing engine
+ # NOTE: even though dpkg is used, one MUST NOT depend on
anything more
+ # than lexicographic order when naming revisions, since the
list of
+ # series is sorted by "ls" or "sort -r"
+ dpkg --compare-versions "$former" "$relation" "$latter"
+ else
+ # fall back to simple test, if dpkg is not available
+ test "$former" "-$relation" "$latter"
+ fi
+}
+
uncompress_patch() {
patch=$1
case "$patch" in
@@ -138,7 +163,7 @@
if [ "$target_up" != "$upstream" ]; then
die "Upstream $target_up doesn't match $upstream!"
# We don't have that version out yet!
-elif [ ! -n "$target_rev" ] || ( [ "$target_rev" != "$target" ] && [
$target_rev -gt $revision ] ); then
+elif [ ! -n "$target_rev" ] || ( [ "$target_rev" != "$target" ] && cmpv
$target_rev gt $revision ); then
year=$(($(date +%Y) + 1))
die "Can't patch to nonexistent revision $target_rev (wait until $year)"
fi
@@ -161,35 +186,35 @@
base=$(basename "$sver")
srev=${base#*-}
if [ -n "$srev" ]; then
- if [ $srev -le $current_rev ]; then
+ if cmpv $srev le $current_rev ; then
unpatch_series $sver
fi
else
die "Series doesn't have a revision!"
fi
done
-elif [ "$current_rev" = "$upstream" ] || [ $target_rev -gt $current_rev ]; then
+elif [ "$current_rev" = "$upstream" ] || cmpv $target_rev gt $current_rev ;
then
for sver in $home/series/*; do
base=$(basename "$sver")
srev=${base#*-}
if [ -n "$srev" ]; then
- if [ $srev -gt $current_rev ] && [ $srev -le
$target_rev ]; then
+ if cmpv $srev gt $current_rev && cmpv $srev le
$target_rev ; then
patch_series $sver
fi
else
die "Series doesn't have a revision!"
fi
done
-elif [ $target_rev -eq $current_rev ]; then
+elif cmpv $target_rev eq $current_rev ; then
echo "Nothing to do, exiting."
exit 0
-elif [ $target_rev -lt $current_rev ]; then
+elif cmpv $target_rev lt $current_rev ; then
for sver in $(ls -d $home/series/* | sort -r); do
base=$(basename "$sver")
srev=${base#*-}
if [ -n "$srev" ]; then
# -gt because you don't want to unapply the target
series
- if [ $srev -le $current_rev ] && [ $srev -gt
$target_rev ]; then
+ if cmpv $srev le $current_rev && cmpv $srev gt
$target_rev ; then
unpatch_series $sver
fi
else