| 1 | #!/bin/sh
|
|---|
| 2 | set -e
|
|---|
| 3 |
|
|---|
| 4 | # This is a little experiment to see how expensive it would be to
|
|---|
| 5 | # compare versions in a shell script. This script is not done yet
|
|---|
| 6 | # and the nasiest part is still left undone, (the fact that in Debian
|
|---|
| 7 | # versions all letters compare less than all non-letters).
|
|---|
| 8 | #
|
|---|
| 9 | # It looks to me like version comprehension might be the feature that pushes
|
|---|
| 10 | # ipkg from /bin/sh to compiled C code...
|
|---|
| 11 |
|
|---|
| 12 | if [ $# -lt 3 ]; then
|
|---|
| 13 | echo "
|
|---|
| 14 | usage: ipkg-compare-versions v1 op v2
|
|---|
| 15 | where op in (<<, <=, =, >=, >>)
|
|---|
| 16 | Return value is 0 if v1 op v2 is satisfied, 1 otherwise"
|
|---|
| 17 | exit 2
|
|---|
| 18 | fi
|
|---|
| 19 |
|
|---|
| 20 | v1=$1
|
|---|
| 21 | op=$2
|
|---|
| 22 | v2=$3
|
|---|
| 23 |
|
|---|
| 24 | # Debian has a little historical problem with operators...
|
|---|
| 25 | may_be_equal=0
|
|---|
| 26 | case $op in
|
|---|
| 27 | '>>')
|
|---|
| 28 | op="-gt"
|
|---|
| 29 | ;;
|
|---|
| 30 | '<<')
|
|---|
| 31 | op="-lt"
|
|---|
| 32 | ;;
|
|---|
| 33 | '>'|'>=')
|
|---|
| 34 | op="-gt"
|
|---|
| 35 | may_be_equal=1
|
|---|
| 36 | ;;
|
|---|
| 37 | '<'|'<=')
|
|---|
| 38 | op="-lt"
|
|---|
| 39 | may_be_equal=1
|
|---|
| 40 | ;;
|
|---|
| 41 | '=')
|
|---|
| 42 | may_be_equal=1
|
|---|
| 43 | ;;
|
|---|
| 44 | *)
|
|---|
| 45 | echo "ipkg_compare_versions: Invalid operator \`$op' valid operators are (<<, <=, =, >=, >>)"
|
|---|
| 46 | exit 1
|
|---|
| 47 | ;;
|
|---|
| 48 | esac
|
|---|
| 49 |
|
|---|
| 50 | if [ $may_be_equal == 1 -a $v1 == $v2 ]; then
|
|---|
| 51 | exit 0;
|
|---|
| 52 | elif [ $op == '=' ]; then
|
|---|
| 53 | exit 1;
|
|---|
| 54 | fi
|
|---|
| 55 |
|
|---|
| 56 | epoch1=`echo $v1 | sed -ne 's/:.*//p'`
|
|---|
| 57 | v1=`echo $v1 | sed -e 's/^[^:]*://'`
|
|---|
| 58 | epoch2=`echo $v2 | sed -ne 's/:.*//p'`
|
|---|
| 59 | v2=`echo $v2 | sed -e 's/^[^:]*://'`
|
|---|
| 60 |
|
|---|
| 61 | upstream1=`echo $v1 | sed -e '/-/s/\(.*\)-.*/\1/'`
|
|---|
| 62 | debian_rev1=`echo $v1 | sed -ne 's/.*-//p'`
|
|---|
| 63 | upstream2=`echo $v2 | sed -e '/-/s/\(.*\)-.*/\1/'`
|
|---|
| 64 | debian_rev2=`echo $v2 | sed -ne 's/.*-//p'`
|
|---|
| 65 |
|
|---|
| 66 | echo "$epoch1:$upstream1-$debian_rev1 $op $epoch2:$upstream2-$debian_rev2"
|
|---|
| 67 |
|
|---|
| 68 | exit 3
|
|---|
| 69 |
|
|---|
| 70 | [ -z $epoch1 ] && epoch1="0"
|
|---|
| 71 | [ -z $epoch2 ] && epoch2="0"
|
|---|
| 72 |
|
|---|
| 73 | if [ $epoch1 != $epoch2 ]; then
|
|---|
| 74 | exit `[ $epoch1 $op $epoch2 ]`
|
|---|
| 75 | fi
|
|---|
| 76 |
|
|---|
| 77 | exit 3
|
|---|