@@ -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,50 @@ 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
+ __sdkman_echo_debug " Archive Type: ${archive_type} "
178
+ __sdkman_echo_debug " Archive: ${archive} "
179
+
180
+ if [[ " ${archive_type} " == ' zip' ]]; then
181
+ __sdkman_echo_debug " Checking zip archive"
182
+ is_ok=$( unzip -t " $archive " | grep ' No errors detected in compressed data' )
183
+ elif [[ " ${archive_type} " == ' tar' ]]; then
184
+ __sdkman_echo_debug " Checking tar archive"
185
+ is_ok=$( tar tf " $archive " | grep -v ' Error opening archive' )
186
+ else
187
+ echo " "
188
+ __sdkman_echo_red " Stop! The archive type cannot be determined! Please try installing again."
189
+ rm -f " ${archive} "
190
+ return 1
191
+ fi
152
192
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 "
193
+ if [ -z " $is_ok " ]; then
194
+ rm -f " $archive "
157
195
echo " "
158
196
__sdkman_echo_red " Stop! The archive was corrupt and has been removed! Please try installing again."
159
197
return 1
160
198
fi
161
199
}
162
200
163
- function __sdkman_checksum_zip () {
164
- local -r zip_archive =" $1 "
201
+ function __sdkman_checksum () {
202
+ local -r archive =" $1 "
165
203
local -r headers_file=" $2 "
166
204
local algorithm checksum cmd
167
205
local shasum_avail=false
@@ -198,17 +236,17 @@ function __sdkman_checksum_zip() {
198
236
if [[ -n ${algorithm} && -n ${checksum} ]]; then
199
237
200
238
if [[ " $algorithm " =~ ' SHA' && " $shasum_avail " == ' true' ]]; then
201
- cmd=" echo \" ${checksum} *${zip_archive } \" | shasum --check --quiet"
239
+ cmd=" echo \" ${checksum} *${archive } \" | shasum --check --quiet"
202
240
203
241
elif [[ " $algorithm " =~ ' MD5' && " $md5sum_avail " == ' true' ]]; then
204
- cmd=" echo \" ${checksum} ${zip_archive } \" | md5sum --check --quiet"
242
+ cmd=" echo \" ${checksum} ${archive } \" | md5sum --check --quiet"
205
243
fi
206
244
207
245
if [[ -n $cmd ]]; then
208
- __sdkman_echo_no_colour " Verifying artifact: ${zip_archive } (${algorithm} :${checksum} )"
246
+ __sdkman_echo_no_colour " Verifying artifact: ${archive } (${algorithm} :${checksum} )"
209
247
210
248
if ! eval " $cmd " ; then
211
- rm -f " $zip_archive "
249
+ rm -f " $archive "
212
250
echo " "
213
251
__sdkman_echo_red " Stop! An invalid checksum was detected and the archive removed! Please try re-installing."
214
252
return 1
0 commit comments