mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
users/21082 (expanded): a more complete sorting of version strings that are not in the form of zsh version numbers; additional explanatory comment
This commit is contained in:
parent
7611e78ad1
commit
aedff53d1f
2 changed files with 23 additions and 1 deletions
|
@ -1,5 +1,9 @@
|
|||
2015-12-19 Barton E. Schaefer <schaefer@zsh.org>
|
||||
|
||||
* users/21082 (expanded): Functions/Misc/is-at-least: do a more
|
||||
complete job of sorting version strings that are not in the form
|
||||
of zsh version numbers; additional explanatory comment
|
||||
|
||||
* unposted (cf. 37387): Src/options.c: emulate turns off
|
||||
WARN_CREATE_GLOBAL
|
||||
|
||||
|
|
|
@ -13,10 +13,16 @@
|
|||
# is-at-least 3.1.0 && setopt HIST_REDUCE_BLANKS
|
||||
# is-at-least 586 $MACHTYPE && echo 'You could be running Mandrake!'
|
||||
# is-at-least $ZSH_VERSION || print 'Something fishy here.'
|
||||
#
|
||||
# Note that segments that contain no digits at all are ignored, and leading
|
||||
# text is discarded if trailing digits follow, because this was the meaning
|
||||
# of certain zsh version strings in the early 2000s. Other segments that
|
||||
# begin with digits are compared using NUMERIC_GLOB_SORT semantics, and any
|
||||
# other segments starting with text are compared lexically.
|
||||
|
||||
emulate -L zsh
|
||||
|
||||
local IFS=".-" min_cnt=0 ver_cnt=0 part min_ver version
|
||||
local IFS=".-" min_cnt=0 ver_cnt=0 part min_ver version order
|
||||
|
||||
min_ver=(${=1})
|
||||
version=(${=2:-$ZSH_VERSION} 0)
|
||||
|
@ -24,6 +30,18 @@ version=(${=2:-$ZSH_VERSION} 0)
|
|||
while (( $min_cnt <= ${#min_ver} )); do
|
||||
while [[ "$part" != <-> ]]; do
|
||||
(( ++ver_cnt > ${#version} )) && return 0
|
||||
if [[ ${version[ver_cnt]} = *[0-9][^0-9]* ]]; then
|
||||
# Contains a number followed by text. Not a zsh version string.
|
||||
order=( ${version[ver_cnt]} ${min_ver[ver_cnt]} )
|
||||
if [[ ${version[ver_cnt]} = <->* ]]; then
|
||||
# Leading digits, compare by sorting with numeric order.
|
||||
[[ $order != ${${(On)order}} ]] && return 1
|
||||
else
|
||||
# No leading digits, compare by sorting in lexical order.
|
||||
[[ $order != ${${(O)order}} ]] && return 1
|
||||
fi
|
||||
[[ $order[1] != $order[2] ]] && return 0
|
||||
fi
|
||||
part=${version[ver_cnt]##*[^0-9]}
|
||||
done
|
||||
|
||||
|
|
Loading…
Reference in a new issue