5
5
# If no version is given, it falls back to the value of DEFAULT_MILL_VERSION
6
6
#
7
7
# Project page: https://github.com/lefou/millw
8
- # Script Version: 0.4.0
8
+ # Script Version: 0.4.2
9
9
#
10
10
# If you want to improve this script, please also contribute your changes back!
11
11
#
12
12
# Licensed under the Apache License, Version 2.0
13
13
14
14
15
- DEFAULT_MILL_VERSION=0.9.10
15
+ DEFAULT_MILL_VERSION=0.10.0
16
16
17
17
set -e
18
18
19
19
MILL_REPO_URL=" https://github.com/com-lihaoyi/mill"
20
20
21
- if [ " x ${CURL_CMD} " = " x " ] ; then
21
+ if [ -z " ${CURL_CMD} " ] ; then
22
22
CURL_CMD=curl
23
23
fi
24
24
25
25
# Explicit commandline argument takes precedence over all other methods
26
- if [ " x $1 " = " x --mill-version" ] ; then
26
+ if [ " $1 " = " --mill-version" ] ; then
27
27
shift
28
28
if [ " x$1 " != " x" ] ; then
29
29
MILL_VERSION=" $1 "
40
40
# We reuse it's value and skip searching for a value.
41
41
42
42
# If not already set, read .mill-version file
43
- if [ " x ${MILL_VERSION} " = " x " ] ; then
43
+ if [ -z " ${MILL_VERSION} " ] ; then
44
44
if [ -f " .mill-version" ] ; then
45
45
MILL_VERSION=" $( head -n 1 .mill-version 2> /dev/null) "
46
46
fi
47
47
fi
48
48
49
- if [ " x ${XDG_CACHE_HOME} " != " x " ] ; then
49
+ if [ -n " ${XDG_CACHE_HOME} " ] ; then
50
50
MILL_DOWNLOAD_PATH=" ${XDG_CACHE_HOME} /mill/download"
51
51
else
52
52
MILL_DOWNLOAD_PATH=" ${HOME} /.cache/mill/download"
53
53
fi
54
54
55
55
# If not already set, try to fetch newest from Github
56
- if [ " x ${MILL_VERSION} " = " x " ] ; then
56
+ if [ -z " ${MILL_VERSION} " ] ; then
57
57
# TODO: try to load latest version from release page
58
58
echo " No mill version specified." 1>&2
59
59
echo " You should provide a version via '.mill-version' file or --mill-version option." 1>&2
@@ -68,20 +68,22 @@ if [ "x${MILL_VERSION}" = "x" ] ; then
68
68
# to show the (previously suppressed) error message
69
69
LANG=C touch -d ' 1 hour ago' " ${MILL_DOWNLOAD_PATH} /.expire_latest"
70
70
)
71
-
72
- if [ " ${MILL_DOWNLOAD_PATH} /.latest" -nt " ${MILL_DOWNLOAD_PATH} /.expire_latest" ] ; then
71
+
72
+ # POSIX shell variant of bash's -nt operator, see https://unix.stackexchange.com/a/449744/6993
73
+ # if [ "${MILL_DOWNLOAD_PATH}/.latest" -nt "${MILL_DOWNLOAD_PATH}/.expire_latest" ] ; then
74
+ if [ -n " $( find -L " ${MILL_DOWNLOAD_PATH} /.latest" -prune -newer " ${MILL_DOWNLOAD_PATH} /.expire_latest" ) " ]; then
73
75
# we know a current latest version
74
- MILL_VERSION=" $( head -n 1 ${MILL_DOWNLOAD_PATH} /.latest 2> /dev/null) "
76
+ MILL_VERSION=$( head -n 1 " ${MILL_DOWNLOAD_PATH} " /.latest 2> /dev/null)
75
77
fi
76
78
77
- if [ " x ${MILL_VERSION} " = " x " ] ; then
79
+ if [ -z " ${MILL_VERSION} " ] ; then
78
80
# we don't know a current latest version
79
81
echo " Retrieving latest mill version ..." 1>&2
80
82
LANG=C ${CURL_CMD} -s -i -f -I ${MILL_REPO_URL} /releases/latest 2> /dev/null | grep --ignore-case Location: | sed s' /^.*tag\///' | tr -d ' \r\n' > " ${MILL_DOWNLOAD_PATH} /.latest"
81
- MILL_VERSION=" $( head -n 1 ${MILL_DOWNLOAD_PATH} /.latest 2> /dev/null) "
83
+ MILL_VERSION=$( head -n 1 " ${MILL_DOWNLOAD_PATH} " /.latest 2> /dev/null)
82
84
fi
83
85
84
- if [ " x ${MILL_VERSION} " = " x " ] ; then
86
+ if [ -z " ${MILL_VERSION} " ] ; then
85
87
# Last resort
86
88
MILL_VERSION=" ${DEFAULT_MILL_VERSION} "
87
89
echo " Falling back to hardcoded mill version ${MILL_VERSION} " 1>&2
92
94
93
95
MILL=" ${MILL_DOWNLOAD_PATH} /${MILL_VERSION} "
94
96
97
+ try_to_use_system_mill () {
98
+ MILL_IN_PATH=" $( command -v mill || true) "
99
+
100
+ if [ -z " ${MILL_IN_PATH} " ]; then
101
+ return
102
+ fi
103
+
104
+ UNIVERSAL_SCRIPT_MAGIC=" @ 2>/dev/null # 2>nul & echo off & goto BOF"
105
+
106
+ if ! head -c 128 " ${MILL_IN_PATH} " | grep -qF " ${UNIVERSAL_SCRIPT_MAGIC} " ; then
107
+ if [ -n " ${MILLW_VERBOSE} " ]; then
108
+ echo " Could not determine mill version of ${MILL_IN_PATH} , as it does not start with the universal script magic2" 1>&2
109
+ fi
110
+ return
111
+ fi
112
+
113
+ # Roughly the size of the universal script.
114
+ MILL_VERSION_SEARCH_RANGE=" 2403"
115
+ MILL_IN_PATH_VERSION=$( head -c " ${MILL_VERSION_SEARCH_RANGE} " " ${MILL_IN_PATH} " | \
116
+ sed -n ' s/^.*-DMILL_VERSION=\([^\s]*\) .*$/\1/p' | \
117
+ head -n 1)
118
+
119
+ if [ -z " ${MILL_IN_PATH_VERSION} " ]; then
120
+ echo " Could not determine mill version, even though ${MILL_IN_PATH} has the universal script magic" 1>&2
121
+ return
122
+ fi
123
+
124
+ if [ " ${MILL_IN_PATH_VERSION} " = " ${MILL_VERSION} " ]; then
125
+ MILL=" ${MILL_IN_PATH} "
126
+ fi
127
+ }
128
+ try_to_use_system_mill
129
+
95
130
# If not already downloaded, download it
96
131
if [ ! -s " ${MILL} " ] ; then
97
-
132
+
98
133
# support old non-XDG download dir
99
134
MILL_OLD_DOWNLOAD_PATH=" ${HOME} /.mill/download"
100
135
OLD_MILL=" ${MILL_OLD_DOWNLOAD_PATH} /${MILL_VERSION} "
101
136
if [ -x " ${OLD_MILL} " ] ; then
102
137
MILL=" ${OLD_MILL} "
103
138
else
104
- VERSION_PREFIX=" $( echo -n $MILL_VERSION | cut -b -4) "
139
+ VERSION_PREFIX=" $( echo $MILL_VERSION | cut -b -4) "
105
140
case $VERSION_PREFIX in
106
141
0.0. | 0.1. | 0.2. | 0.3. | 0.4. )
107
142
DOWNLOAD_SUFFIX=" "
@@ -133,4 +168,4 @@ unset MILL_VERSION
133
168
unset MILL_VERSION_TAG
134
169
unset MILL_REPO_URL
135
170
136
- exec $ MILL " $@ "
171
+ exec " ${ MILL} " " $@ "
0 commit comments