@@ -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,19 +132,16 @@ 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
# pre-installation hook: implements function __sdkman_pre_installation_hook
132
147
local pre_installation_hook=" ${SDKMAN_DIR} /tmp/hook_pre_${candidate} _${version} .sh"
@@ -138,7 +153,6 @@ function __sdkman_download() {
138
153
__sdkman_echo_debug " Completed pre-installation hook..."
139
154
140
155
export local binary_input=" ${SDKMAN_DIR} /tmp/${base_name} .bin"
141
- export local zip_output=" ${SDKMAN_DIR} /tmp/${base_name} .zip"
142
156
143
157
echo " "
144
158
__sdkman_echo_no_colour " Downloading: ${candidate} ${version} "
@@ -161,27 +175,49 @@ function __sdkman_download() {
161
175
# __sdkman_post_installation_hook || return 1
162
176
# __sdkman_echo_debug "Processed binary as: $zip_output"
163
177
# __sdkman_echo_debug "Completed post-installation hook..."
164
-
165
- __sdkman_validate_zip " ${binary_input} " || return 1
166
- __sdkman_checksum_zip " ${binary_input} " " ${headers_file} " || return 1
167
- echo " "
178
+
179
+ if [[ ! -s " ${headers_file} " ]]; then
180
+ echo " "
181
+ __sdkman_echo_red " Metadata file not found (or is empty) at '${headers_file} '"
182
+ rm -f " ${binary_input} "
183
+ return 1
184
+ else
185
+ __sdkman_validate " ${binary_input} " " ${headers_file} " || return 1
186
+ __sdkman_checksum " ${binary_input} " " ${headers_file} " || return 1
187
+ echo " "
188
+ fi
168
189
}
169
190
170
- function __sdkman_validate_zip() {
171
- local zip_archive zip_ok
191
+ function __sdkman_validate() {
192
+ local -r archive=" $1 "
193
+ local -r headers_file=" $2 "
194
+ local -r archive_type=$( sed -n ' s/^X-Sdkman-ArchiveType:\(.*\)$/\1/p' ${headers_file} | tr -cd ' [:alnum:]' )
195
+ local is_ok
196
+
197
+ echo " archive_type: ${archive_type} "
198
+ echo " archive: ${archive} "
199
+
200
+ if [[ " ${archive_type} " == ' zip' ]]; then
201
+ is_ok=$( unzip -t " $archive " | grep ' No errors detected in compressed data' )
202
+ elif [[ " ${archive_type} " == ' tar' ]]; then
203
+ is_ok=$( tar tf " $archive " | grep -v ' Error opening archive' )
204
+ else
205
+ echo " "
206
+ __sdkman_echo_red " Stop! The archive type cannot be determined! Please try installing again."
207
+ rm -f " ${archive} "
208
+ return 1
209
+ fi
172
210
173
- zip_archive=" $1 "
174
- zip_ok=$( unzip -t " $zip_archive " | grep ' No errors detected in compressed data' )
175
- if [ -z " $zip_ok " ]; then
176
- rm -f " $zip_archive "
211
+ if [ -z " $is_ok " ]; then
212
+ rm -f " $archive "
177
213
echo " "
178
214
__sdkman_echo_red " Stop! The archive was corrupt and has been removed! Please try installing again."
179
215
return 1
180
216
fi
181
217
}
182
218
183
- function __sdkman_checksum_zip () {
184
- local -r zip_archive =" $1 "
219
+ function __sdkman_checksum () {
220
+ local -r archive =" $1 "
185
221
local -r headers_file=" $2 "
186
222
local algorithm checksum cmd
187
223
local shasum_avail=false
@@ -218,17 +254,17 @@ function __sdkman_checksum_zip() {
218
254
if [[ -n ${algorithm} && -n ${checksum} ]]; then
219
255
220
256
if [[ " $algorithm " =~ ' SHA' && " $shasum_avail " == ' true' ]]; then
221
- cmd=" echo \" ${checksum} *${zip_archive } \" | shasum --check --quiet"
257
+ cmd=" echo \" ${checksum} *${archive } \" | shasum --check --quiet"
222
258
223
259
elif [[ " $algorithm " =~ ' MD5' && " $md5sum_avail " == ' true' ]]; then
224
- cmd=" echo \" ${checksum} ${zip_archive } \" | md5sum --check --quiet"
260
+ cmd=" echo \" ${checksum} ${archive } \" | md5sum --check --quiet"
225
261
fi
226
262
227
263
if [[ -n $cmd ]]; then
228
- __sdkman_echo_no_colour " Verifying artifact: ${zip_archive } (${algorithm} :${checksum} )"
264
+ __sdkman_echo_no_colour " Verifying artifact: ${archive } (${algorithm} :${checksum} )"
229
265
230
266
if ! eval " $cmd " ; then
231
- rm -f " $zip_archive "
267
+ rm -f " $archive "
232
268
echo " "
233
269
__sdkman_echo_red " Stop! An invalid checksum was detected and the archive removed! Please try re-installing."
234
270
return 1
0 commit comments