@@ -40,45 +40,109 @@ safe_command() {
40
40
fi
41
41
}
42
42
43
- download () {
43
+ checksum () {
44
+ l_file=" $1 "
45
+ checksum_exec=" "
46
+ if command -v sha256sum > /dev/null; then
47
+ checksum_exec=" sha256sum"
48
+ elif command -v shasum > /dev/null; then
49
+ checksum_exec=" shasum -a 256"
50
+ elif command -v sha1sum > /dev/null; then
51
+ checksum_exec=" sha1sum"
52
+ elif command -v md5 > /dev/null; then
53
+ checksum_exec=" md5"
54
+ fi
55
+ if [ -z " ${checksum_exec} " ]; then
56
+ log_err " ERROR: No supported checksum command found!"
57
+ exit 1
58
+ fi
59
+ cat " ${l_file} " | ${checksum_exec}
60
+ }
61
+
62
+ rand () {
63
+ awk ' BEGIN {srand();printf "%d\n", (rand() * 10^8);}'
64
+ }
65
+
66
+ download_if_needed () {
44
67
file=" $1 "
45
- if [ ! -f " ${JDKW_PATH} /${file} " ]; then
46
- jdkw_url=" ${JDKW_URI} /${file} "
68
+ path=" $2 "
69
+ if [ ! -f " ${path} /${file} " ]; then
70
+ jdkw_url=" ${JDKW_BASE_URI} /releases/download/${JDKW_RELEASE} /${file} "
47
71
log_out " Downloading ${file} from ${jdkw_url} "
48
- safe_command " curl ${CURL_OPTIONS } -f -k -L -o \" ${JDKW_PATH } /${file} \" \" ${jdkw_url} \" "
49
- safe_command " chmod +x \" ${JDKW_PATH } /${file} \" "
72
+ safe_command " curl ${curl_options } -f -k -L -o \" ${path } /${file} \" \" ${jdkw_url} \" "
73
+ safe_command " chmod +x \" ${path } /${file} \" "
50
74
fi
51
75
}
52
76
53
77
# Default curl options
54
- CURL_OPTIONS=" "
78
+ curl_options=" "
79
+
80
+ # Process (but do not load) properties from environment
81
+ env_configuration=
82
+ l_fifo=" ${TMPDIR:-/ tmp} /$$ .$( rand) "
83
+ safe_command " mkfifo \" ${l_fifo} \" "
84
+ env > " ${l_fifo} " &
85
+ while IFS=' =' read -r name value
86
+ do
87
+ jdkw_arg=$( echo " ${name} " | grep ' ^JDKW_.*' )
88
+ jdkw_base_dir_arg=$( echo " ${name} " | grep ' ^JDKW_BASE_DIR' )
89
+ if [ -n " ${jdkw_base_dir_arg} " ]; then
90
+ eval " ${name} =\" ${value} \" "
91
+ fi
92
+ if [ -n " ${jdkw_arg} " ]; then
93
+ env_configuration=" ${env_configuration}${name} =\" ${value} \" "
94
+ fi
95
+ done < " ${l_fifo} "
96
+ safe_command " rm \" ${l_fifo} \" "
97
+
98
+ # Process (but do not load) properties from command line arguments
99
+ command=
100
+ cmd_configuration=
101
+ for arg in " $@ " ; do
102
+ if [ -z ${in_command} ]; then
103
+ jdkw_arg=$( echo " ${arg} " | grep ' ^JDKW_.*' )
104
+ jdkw_base_dir_arg=$( echo " ${arg} " | grep ' ^JDKW_BASE_DIR.*' )
105
+ if [ -n " ${jdkw_base_dir_arg} " ]; then
106
+ eval ${arg}
107
+ fi
108
+ if [ -n " ${jdkw_arg} " ]; then
109
+ cmd_configuration=" ${cmd_configuration}${arg} "
110
+ fi
111
+ fi
112
+ case " ${arg} " in
113
+ * \' * )
114
+ arg=` printf " %s" " $arg " | sed " s/'/'\" '\" '/g" `
115
+ ;;
116
+ * ) : ;;
117
+ esac
118
+ command=" ${command} '${arg} '"
119
+ done
120
+
121
+ # Default base directory to current working directory
122
+ if [ -z " ${JDKW_BASE_DIR} " ]; then
123
+ JDKW_BASE_DIR=" ."
124
+ fi
55
125
56
126
# Load properties file in home directory
57
127
if [ -f " ${HOME} /.jdkw" ]; then
58
128
. " ${HOME} /.jdkw"
59
129
fi
60
130
61
- # Load properties file in working directory
62
- if [ -f " .jdkw" ]; then
63
- . " . /.jdkw"
131
+ # Load properties file in base directory
132
+ if [ -f " ${JDKW_BASE_DIR} / .jdkw" ]; then
133
+ . " ${JDKW_BASE_DIR} /.jdkw"
64
134
fi
65
135
66
- # Process command line arguments
67
- for ARG in " $@ " ; do
68
- JDKW_ARG=$( echo " ${ARG} " | grep ' JDKW_.*' )
69
- if [ -n " ${JDKW_ARG} " ]; then
70
- eval ${ARG}
71
- else
72
- break
73
- fi
74
- done
136
+ # Load properties from environment
137
+ eval " ${env_configuration} "
75
138
76
- # Globals
77
- JDKW_BASE_URI=" https://github.com/KoskiLabs/jdk-wrapper"
78
- JDKW_IMPL=" jdkw-impl.sh"
79
- JDKW_WRAPPER=" jdk-wrapper.sh"
139
+ # Load properties from command line arguments
140
+ eval " ${cmd_configuration} "
80
141
81
142
# Process configuration
143
+ if [ -z " ${JDKW_BASE_URI} " ]; then
144
+ JDKW_BASE_URI=" https://github.com/KoskiLabs/jdk-wrapper"
145
+ fi
82
146
if [ -z " ${JDKW_RELEASE} " ]; then
83
147
JDKW_RELEASE=" latest"
84
148
log_out " Defaulted to version ${JDKW_RELEASE} "
@@ -88,38 +152,42 @@ if [ -z "${JDKW_TARGET}" ]; then
88
152
log_out " Defaulted to target ${JDKW_TARGET} "
89
153
fi
90
154
if [ -z " ${JDKW_VERBOSE} " ]; then
91
- CURL_OPTIONS =" ${CURL_OPTIONS } --silent"
155
+ curl_options =" ${curl_options } --silent"
92
156
fi
93
157
94
158
# Resolve latest version
95
159
if [ " ${JDKW_RELEASE} " = " latest" ]; then
96
- JDKW_RELEASE=$( curl ${CURL_OPTIONS} -f -k -L -H ' Accept: application/json' " ${JDKW_BASE_URI} /releases/latest" | sed -e ' s/.*"tag_name":"\([^"]*\)".*/\1/' )
160
+ latest_version_json=" ${TMPDIR:-/ tmp} /jdkw-latest-version-$$ .$( rand) "
161
+ safe_command " curl ${curl_options} -f -k -L -o \" ${latest_version_json} \" -H 'Accept: application/json' \" ${JDKW_BASE_URI} /releases/latest\" "
162
+ JDKW_RELEASE=$( cat " ${latest_version_json} " | sed -e ' s/.*"tag_name":"\([^"]*\)".*/\1/' )
163
+ rm -f " ${latest_version_json} "
97
164
log_out " Resolved latest version to ${JDKW_RELEASE} "
98
165
fi
99
166
100
- # Define source and target
101
- JDKW_URI=" ${JDKW_BASE_URI} /releases/download/${JDKW_RELEASE} "
102
- JDKW_PATH=" ${JDKW_TARGET} /jdkw/${JDKW_RELEASE} "
103
-
104
167
# Ensure target directory exists
105
- if [ ! -d " ${JDKW_PATH} " ]; then
106
- log_out " Creating target directory ${JDKW_PATH} "
107
- safe_command " mkdir -p \" ${JDKW_PATH} \" "
168
+ jdkw_path=" ${JDKW_TARGET} /jdkw/${JDKW_RELEASE} "
169
+ if [ ! -d " ${jdkw_path} " ]; then
170
+ log_out " Creating target directory ${jdkw_path} "
171
+ safe_command " mkdir -p \" ${jdkw_path} \" "
108
172
fi
109
173
110
174
# Download the jdk wrapper version
111
- download " ${JDKW_IMPL} "
112
- download " ${JDKW_WRAPPER} "
175
+ jdkw_impl=" jdkw-impl.sh"
176
+ jdkw_wrapper=" jdk-wrapper.sh"
177
+ download_if_needed " ${jdkw_impl} " " ${jdkw_path} "
178
+ download_if_needed " ${jdkw_wrapper} " " ${jdkw_path} "
179
+
180
+ # Execute the provided command
181
+ eval ${jdkw_path} /${jdkw_impl} ${command}
182
+ result=$?
113
183
114
184
# Check whether this wrapper is the one specified for this version
115
- jdkw_download=" ${JDKW_PATH } /${JDKW_WRAPPER } "
185
+ jdkw_download=" ${jdkw_path } /${jdkw_wrapper } "
116
186
jdkw_current=" $( CDPATH= cd -- " $( dirname -- " $0 " ) " && pwd) /$( basename " $0 " ) "
117
- if [ " $( cat " ${jdkw_download} " | sha1sum ) " != " $( cat " ${jdkw_current} " | sha1sum ) " ]; then
187
+ if [ " $( checksum " ${jdkw_download} " ) " != " $( checksum " ${jdkw_current} " ) " ]; then
118
188
printf " \e[0;31m[WARNING]\e[0m Your jdk-wrapper.sh file does not match the one in your JDKW_RELEASE.\n"
119
189
printf " \e[0;32mUpdate your jdk-wrapper.sh to match by running:\e[0m\n"
120
190
printf " cp \" %s\" \" %s\" \n" " ${jdkw_download} " " ${jdkw_current} "
121
191
fi
122
192
123
- # Execute the provided command
124
- ${JDKW_PATH} /${JDKW_IMPL} $@
125
- exit $?
193
+ exit ${result}
0 commit comments