@@ -59,18 +59,36 @@ function __sdk_install() {
59
59
}
60
60
61
61
function __sdkman_install_candidate_version() {
62
- local candidate version
63
-
62
+ local candidate version base_name headers_file archive_type
63
+ local metadata_folder=" ${SDKMAN_DIR} /var/metadata"
64
+
64
65
candidate=" $1 "
65
66
version=" $2 "
67
+ base_name=" ${candidate} -${version} "
68
+ headers_file=" ${metadata_folder} /${base_name} .headers"
69
+
70
+ mkdir -p ${metadata_folder}
66
71
67
- __sdkman_download " $candidate " " $version " || return 1
72
+ __sdkman_download " $candidate " " $version " " $headers_file " || return 1
68
73
__sdkman_echo_green " Installing: ${candidate} ${version} "
69
74
70
75
mkdir -p " ${SDKMAN_CANDIDATES_DIR} /${candidate} "
71
-
72
76
rm -rf " ${SDKMAN_DIR} /tmp/out"
73
- unzip -oq " ${SDKMAN_DIR} /tmp/${candidate} -${version} .bin" -d " ${SDKMAN_DIR} /tmp/out"
77
+
78
+ archive_type=$( sed -n ' s/^X-Sdkman-ArchiveType:\(.*\)$/\1/p' ${headers_file} | tr -cd ' [:alnum:]' )
79
+
80
+ if [[ " ${archive_type} " == ' zip' ]]; then
81
+ unzip -oq " ${SDKMAN_DIR} /tmp/${base_name} .bin" -d " ${SDKMAN_DIR} /tmp/out"
82
+ elif [[ " ${archive_type} " == ' tar' ]]; then
83
+ mkdir -p " ${SDKMAN_DIR} /tmp/out"
84
+ tar zxf " ${SDKMAN_DIR} /tmp/${base_name} .bin" -C " ${SDKMAN_DIR} /tmp/out"
85
+ else
86
+ echo " "
87
+ __sdkman_echo_red " Stop! The archive type cannot be determined! Please try installing again."
88
+ rm -f " ${SDKMAN_DIR} /tmp/${base_name} .bin"
89
+ return 1
90
+ fi
91
+
74
92
mv -f " $SDKMAN_DIR " /tmp/out/* " ${SDKMAN_CANDIDATES_DIR} /${candidate} /${version} "
75
93
__sdkman_echo_green " Done installing!"
76
94
echo " "
@@ -114,22 +132,18 @@ function __sdkman_install_local_version() {
114
132
}
115
133
116
134
function __sdkman_download() {
117
- local candidate version
135
+ local candidate version headers_file
118
136
119
137
candidate=" $1 "
120
138
version=" $2 "
139
+ headers_file=" $3 "
121
140
122
- metadata_folder=" ${SDKMAN_DIR} /var/metadata"
123
- mkdir -p ${metadata_folder}
124
-
125
141
local platform_parameter=" $( echo $SDKMAN_PLATFORM | tr ' [:upper:]' ' [:lower:]' ) "
126
142
local download_url=" ${SDKMAN_CANDIDATES_API} /broker/download/${candidate} /${version} /${platform_parameter} "
127
143
local base_name=" ${candidate} -${version} "
128
144
local tmp_headers_file=" ${SDKMAN_DIR} /tmp/${base_name} .headers.tmp"
129
- local headers_file=" ${metadata_folder} /${base_name} .headers"
130
145
131
146
export local binary_input=" ${SDKMAN_DIR} /tmp/${base_name} .bin"
132
- export local zip_output=" ${SDKMAN_DIR} /tmp/${base_name} .zip"
133
147
134
148
echo " "
135
149
__sdkman_echo_no_colour " Downloading: ${candidate} ${version} "
@@ -142,26 +156,48 @@ function __sdkman_download() {
142
156
grep ' ^X-Sdkman' " ${tmp_headers_file} " > " ${headers_file} "
143
157
__sdkman_echo_debug " Downloaded binary to: ${binary_input} (HTTP headers written to: ${headers_file} )"
144
158
145
- __sdkman_validate_zip " ${binary_input} " || return 1
146
- __sdkman_checksum_zip " ${binary_input} " " ${headers_file} " || return 1
147
- echo " "
159
+ if [[ ! -s " ${headers_file} " ]]; then
160
+ echo " "
161
+ __sdkman_echo_red " Metadata file not found (or is empty) at '${headers_file} '"
162
+ rm -f " ${binary_input} "
163
+ return 1
164
+ else
165
+ __sdkman_validate " ${binary_input} " " ${headers_file} " || return 1
166
+ __sdkman_checksum " ${binary_input} " " ${headers_file} " || return 1
167
+ echo " "
168
+ fi
148
169
}
149
170
150
- function __sdkman_validate_zip() {
151
- local zip_archive zip_ok
171
+ function __sdkman_validate() {
172
+ local -r archive=" $1 "
173
+ local -r headers_file=" $2 "
174
+ local -r archive_type=$( sed -n ' s/^X-Sdkman-ArchiveType:\(.*\)$/\1/p' ${headers_file} | tr -cd ' [:alnum:]' )
175
+ local is_ok
176
+
177
+ echo " archive_type: ${archive_type} "
178
+ echo " archive: ${archive} "
179
+
180
+ if [[ " ${archive_type} " == ' zip' ]]; then
181
+ is_ok=$( unzip -t " $archive " | grep ' No errors detected in compressed data' )
182
+ elif [[ " ${archive_type} " == ' tar' ]]; then
183
+ is_ok=$( tar tf " $archive " | grep -v ' Error opening archive' )
184
+ else
185
+ echo " "
186
+ __sdkman_echo_red " Stop! The archive type cannot be determined! Please try installing again."
187
+ rm -f " ${archive} "
188
+ return 1
189
+ fi
152
190
153
- zip_archive=" $1 "
154
- zip_ok=$( unzip -t " $zip_archive " | grep ' No errors detected in compressed data' )
155
- if [ -z " $zip_ok " ]; then
156
- rm -f " $zip_archive "
191
+ if [ -z " $is_ok " ]; then
192
+ rm -f " $archive "
157
193
echo " "
158
194
__sdkman_echo_red " Stop! The archive was corrupt and has been removed! Please try installing again."
159
195
return 1
160
196
fi
161
197
}
162
198
163
- function __sdkman_checksum_zip () {
164
- local -r zip_archive =" $1 "
199
+ function __sdkman_checksum () {
200
+ local -r archive =" $1 "
165
201
local -r headers_file=" $2 "
166
202
local algorithm checksum cmd
167
203
local shasum_avail=false
@@ -198,17 +234,17 @@ function __sdkman_checksum_zip() {
198
234
if [[ -n ${algorithm} && -n ${checksum} ]]; then
199
235
200
236
if [[ " $algorithm " =~ ' SHA' && " $shasum_avail " == ' true' ]]; then
201
- cmd=" echo \" ${checksum} *${zip_archive } \" | shasum --check --quiet"
237
+ cmd=" echo \" ${checksum} *${archive } \" | shasum --check --quiet"
202
238
203
239
elif [[ " $algorithm " =~ ' MD5' && " $md5sum_avail " == ' true' ]]; then
204
- cmd=" echo \" ${checksum} ${zip_archive } \" | md5sum --check --quiet"
240
+ cmd=" echo \" ${checksum} ${archive } \" | md5sum --check --quiet"
205
241
fi
206
242
207
243
if [[ -n $cmd ]]; then
208
- __sdkman_echo_no_colour " Verifying artifact: ${zip_archive } (${algorithm} :${checksum} )"
244
+ __sdkman_echo_no_colour " Verifying artifact: ${archive } (${algorithm} :${checksum} )"
209
245
210
246
if ! eval " $cmd " ; then
211
- rm -f " $zip_archive "
247
+ rm -f " $archive "
212
248
echo " "
213
249
__sdkman_echo_red " Stop! An invalid checksum was detected and the archive removed! Please try re-installing."
214
250
return 1
0 commit comments