1 |
Ensure that proper number of parameters is passed to each versionator |
2 |
function; die otherwise. This prevents the functions from proceeding |
3 |
with undefined behavior when mis-called. However, it does not cover the |
4 |
most common mistake of passing an empty version that implicitly gets |
5 |
replaced by ${PV}. |
6 |
--- |
7 |
eclass/versionator.eclass | 39 ++++++++++++++++++++++++++++++++++++++- |
8 |
1 file changed, 38 insertions(+), 1 deletion(-) |
9 |
|
10 |
diff --git a/eclass/versionator.eclass b/eclass/versionator.eclass |
11 |
index 74e676ee..e42fc4d 100644 |
12 |
--- a/eclass/versionator.eclass |
13 |
+++ b/eclass/versionator.eclass |
14 |
@@ -1,4 +1,4 @@ |
15 |
-# Copyright 1999-2014 Gentoo Foundation |
16 |
+# Copyright 1999-2016 Gentoo Foundation |
17 |
# Distributed under the terms of the GNU General Public License v2 |
18 |
# $Id$ |
19 |
|
20 |
@@ -46,6 +46,8 @@ get_all_version_components() { |
21 |
local ver_str=${1:-${PV}} result |
22 |
result=() |
23 |
|
24 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
25 |
+ |
26 |
# sneaky cache trick cache to avoid having to parse the same thing several |
27 |
# times. |
28 |
if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]] ; then |
29 |
@@ -101,6 +103,8 @@ get_all_version_components() { |
30 |
# 20040905 -> 20040905 |
31 |
# 3.0c-r1 -> 3 0 c r1 |
32 |
get_version_components() { |
33 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
34 |
+ |
35 |
local c=$(get_all_version_components "${1:-${PV}}") |
36 |
echo ${c//[-._]/ } |
37 |
} |
38 |
@@ -115,6 +119,8 @@ get_version_components() { |
39 |
# 20040905 -> 20040905 |
40 |
# 3.0c-r1 -> 3 |
41 |
get_major_version() { |
42 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
43 |
+ |
44 |
local c=($(get_all_version_components "${1:-${PV}}")) |
45 |
echo ${c[0]} |
46 |
} |
47 |
@@ -128,6 +134,9 @@ get_major_version() { |
48 |
# 1-2 1.2.3 -> 1.2 |
49 |
# 2- 1.2.3 -> 2.3 |
50 |
get_version_component_range() { |
51 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: no range provided" |
52 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
53 |
+ |
54 |
eshopts_push -s extglob |
55 |
local c v="${2:-${PV}}" range="${1}" range_start range_end |
56 |
local -i i=-1 j=0 |
57 |
@@ -161,6 +170,8 @@ get_version_component_range() { |
58 |
# 20040905 -> (empty string) |
59 |
# 3.0c-r1 -> 0c-r1 |
60 |
get_after_major_version() { |
61 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
62 |
+ |
63 |
echo $(get_version_component_range 2- "${1:-${PV}}") |
64 |
} |
65 |
|
66 |
@@ -175,6 +186,9 @@ get_after_major_version() { |
67 |
# Rather than being a number, $1 can be a separator character such as '-', '.' |
68 |
# or '_'. In this case, the first separator of this kind is selected. |
69 |
replace_version_separator() { |
70 |
+ [[ $# -ge 2 ]] || die "${FUNCNAME}: required parameters missing" |
71 |
+ [[ $# -le 3 ]] || die "${FUNCNAME}: too many parameters ($#)" |
72 |
+ |
73 |
eshopts_push -s extglob |
74 |
local w c v="${3:-${PV}}" |
75 |
declare -i i found=0 |
76 |
@@ -210,6 +224,9 @@ replace_version_separator() { |
77 |
# Replace all version separators in $2 (defaults to $PV) with $1. |
78 |
# '_' 1b.2.3 -> 1b_2_3 |
79 |
replace_all_version_separators() { |
80 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: no replacement provided" |
81 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
82 |
+ |
83 |
local c=($(get_all_version_components "${2:-${PV}}")) |
84 |
c=${c[@]//[-._]/$1} |
85 |
echo ${c// } |
86 |
@@ -226,6 +243,9 @@ replace_all_version_separators() { |
87 |
# Rather than being a number, $1 can be a separator character such as '-', '.' |
88 |
# or '_'. In this case, the first separator of this kind is deleted. |
89 |
delete_version_separator() { |
90 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: no index provided" |
91 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
92 |
+ |
93 |
replace_version_separator "${1}" "" "${2}" |
94 |
} |
95 |
|
96 |
@@ -235,6 +255,8 @@ delete_version_separator() { |
97 |
# Delete all version separators in $1 (defaults to $PV). |
98 |
# 1b.2.3 -> 1b23 |
99 |
delete_all_version_separators() { |
100 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
101 |
+ |
102 |
replace_all_version_separators "" "${1}" |
103 |
} |
104 |
|
105 |
@@ -245,6 +267,8 @@ delete_all_version_separators() { |
106 |
# 1.0.1 -> 3 |
107 |
# 3.0c-r1 -> 4 |
108 |
get_version_component_count() { |
109 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
110 |
+ |
111 |
local a=($(get_version_components "${1:-${PV}}")) |
112 |
echo ${#a[@]} |
113 |
} |
114 |
@@ -257,6 +281,8 @@ get_version_component_count() { |
115 |
# 1.0.1 -> 2 |
116 |
# 3.0c-r1 -> 3 |
117 |
get_last_version_component_index() { |
118 |
+ [[ $# -le 1 ]] || die "${FUNCNAME}: too many parameters ($#)" |
119 |
+ |
120 |
echo $(($(get_version_component_count "${1:-${PV}}" ) - 1)) |
121 |
} |
122 |
|
123 |
@@ -267,6 +293,9 @@ get_last_version_component_index() { |
124 |
# only. May not be reliable, be sure to do very careful testing before actually |
125 |
# using this. |
126 |
version_is_at_least() { |
127 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: wanted version not provided" |
128 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
129 |
+ |
130 |
local want_s="$1" have_s="${2:-${PVR}}" r |
131 |
version_compare "${want_s}" "${have_s}" |
132 |
r=$? |
133 |
@@ -291,6 +320,9 @@ version_is_at_least() { |
134 |
# return 3. You probably want version_is_at_least rather than this function. |
135 |
# May not be very reliable. Test carefully before using this. |
136 |
version_compare() { |
137 |
+ [[ $# -ge 2 ]] || die "${FUNCNAME}: versions not provided" |
138 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
139 |
+ |
140 |
eshopts_push -s extglob |
141 |
local ver_a=${1} ver_b=${2} parts_a parts_b |
142 |
local cur_tok_a cur_tok_b num_part_a num_part_b |
143 |
@@ -468,6 +500,8 @@ version_compare() { |
144 |
# algorithm for simplicity, so don't call it with more than a few dozen items. |
145 |
# Uses version_compare, so be careful. |
146 |
version_sort() { |
147 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: version not provided" |
148 |
+ |
149 |
eshopts_push -s extglob |
150 |
local items= |
151 |
local -i left=0 |
152 |
@@ -501,6 +535,9 @@ version_sort() { |
153 |
# MY_P=$(version_format_string '${PN}_source_$1_$2-$3_$4') |
154 |
# Now MY_P will be: cow-hat_source_1_2-3_p4 |
155 |
version_format_string() { |
156 |
+ [[ $# -ge 1 ]] || die "${FUNCNAME}: no format provided" |
157 |
+ [[ $# -le 2 ]] || die "${FUNCNAME}: too many parameters ($#)" |
158 |
+ |
159 |
local fstr=$1 |
160 |
shift |
161 |
set -- $(get_version_components "$@") |
162 |
-- |
163 |
2.9.2 |