eolang 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2022-2023 Objectionary.com
1
+ Copyright (c) 2022-2024 Objectionary.com
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <img alt="logo" src="https://www.objectionary.com/cactus.svg" height="92px" />
1
+ # EOLANG Command Line Took-Kit
2
2
 
3
3
  [![EO principles respected here](https://www.elegantobjects.org/badge.svg)](https://www.elegantobjects.org)
4
4
  [![We recommend IntelliJ IDEA](https://www.elegantobjects.org/intellij-idea.svg)](https://www.jetbrains.com/idea/)
@@ -9,19 +9,18 @@
9
9
  [![Hits-of-Code](https://hitsofcode.com/github/objectionary/eoc)](https://hitsofcode.com/view/github/objectionary/eoc)
10
10
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/objectionary/eoc/blob/master/LICENSE.txt)
11
11
 
12
- First, you install [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
13
- and [Java SE](https://www.oracle.com/java/technologies/downloads/).
12
+ First, you install [npm][npm-install] and [Java SE][java-se].
14
13
 
15
- Then, you install [eolang](https://www.npmjs.com/package/eolang) package:
14
+ Then, you install [eolang][npm] package:
16
15
 
17
- ```
18
- $ npm install -g eolang
16
+ ```bash
17
+ npm install -g eolang
19
18
  ```
20
19
 
21
20
  Then, you write a simple [EO](https://www.eolang.org) program in `hello.eo` file
22
21
  in the current directory:
23
22
 
24
- ```
23
+ ```eo
25
24
  [args] > hello
26
25
  QQ.io.stdout > @
27
26
  "Hello, world!\n"
@@ -29,8 +28,8 @@ in the current directory:
29
28
 
30
29
  Then, you run it:
31
30
 
32
- ```
33
- $ eoc dataize hello
31
+ ```bash
32
+ eoc dataize hello
34
33
  ```
35
34
 
36
35
  That's it.
@@ -38,33 +37,34 @@ That's it.
38
37
  ## Commands
39
38
 
40
39
  You can also do many other things with `eoc` commands
41
- (the flow is explained in [this blog post](https://www.yegor256.com/2021/10/21/objectionary.html)):
42
-
43
- * `register` finds necessary EO files and registers them in a JSON catalog
44
- * `assemble` parses EO files into XMIR, optimizes them, and pulls foreign EO objects
45
- * `transpile` converts XMIR to target programming language (Java by default)
46
- * `compile` converts target language sources to binaries
47
- * `link` puts all binaries together into a single executable binary
48
- * `dataize` dataizes a single object from the executable binary
49
- * `test` dataizes all visible unit tests
50
-
51
- There are also commands that help manipulate with XMIR and EO sources
40
+ (the flow is explained in [this blog post][blog]):
41
+
42
+ * `register` finds necessary EO files and registers them in a JSON catalog
43
+ * `assemble` parses EO files into XMIR, optimizes them,
44
+ and pulls foreign EO objects
45
+ * `transpile` converts XMIR to target programming language (Java by default)
46
+ * `compile` converts target language sources to binaries
47
+ * `link` puts all binaries together into a single executable binary
48
+ * `dataize` dataizes a single object from the executable binary
49
+ * `test` dataizes all visible unit tests
50
+
51
+ There are also commands that help manipulate with XMIR and EO sources
52
52
  (the list is not completed, while some of them are not implemented as of yet):
53
53
 
54
- * `audit` inspects all required packages and reports their status
55
- * `foreign` inspects all objects found in the program after `assemble` step
56
- * `sodg` generates SODG from XMIR, further rederable as XML or [Dot](https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29)
57
- * `phi` generates PHI files from XMIR
58
- * `unphi` generates XMIR files from PHI files
59
- * `print` generates EO files from PHI files
60
- * <del>`translate` converts Java/C++/Python/etc. program to EO program</del>
61
- * <del>`demu` removes `cage` and `memory` objects</del>
62
- * <del>`dejump` removes `goto` objects</del>
63
- * <del>`infer` suggests object names where it's possible to infer them</del>
64
- * <del>`flatten` moves inner objects to upper level</del>
54
+ * `audit` inspects all required packages and reports their status
55
+ * `foreign` inspects all objects found in the program after `assemble` step
56
+ * `sodg` generates SODG from XMIR, further rederable as XML or [Dot][dot]
57
+ * `phi` generates PHI files from XMIR
58
+ * `unphi` generates XMIR files from PHI files
59
+ * `print` generates EO files from PHI files
60
+ * ~~`translate` converts Java/C++/Python/etc. program to EO program~~
61
+ * ~~`demu` removes `cage` and `memory` objects~~
62
+ * ~~`dejump` removes `goto` objects~~
63
+ * ~~`infer` suggests object names where it's possible to infer them~~
64
+ * ~~`flatten` moves inner objects to upper level~~
65
65
 
66
66
  This command line toolkit simply integrates other tools available in
67
- [@objectionary](https://github.com/objectionary) GitHub organization.
67
+ the [@objectionary](https://github.com/objectionary) GitHub organization.
68
68
 
69
69
  ## How to Contribute
70
70
 
@@ -72,8 +72,16 @@ First, run `npm install`. Then, run `grunt`. All tests should pass.
72
72
 
73
73
  If you want to run a single test:
74
74
 
75
+ ```bash
76
+ npm test -- test/test_mvnw.js
75
77
  ```
76
- $ npm test -- test/test_mvnw.js
77
- ```
78
78
 
79
- Make your changes and then [make](https://www.yegor256.com/2014/04/15/github-guidelines.html) a pull request.
79
+ Make your changes and then
80
+ [make](https://www.yegor256.com/2014/04/15/github-guidelines.html)
81
+ a pull request.
82
+
83
+ [npm]: https://www.npmjs.com/package/eolang
84
+ [java-se]: https://www.oracle.com/java/technologies/downloads/
85
+ [npm-install]: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
86
+ [dot]: https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29
87
+ [blog]: https://www.yegor256.com/2021/10/21/objectionary.html
package/eo-version.txt CHANGED
@@ -1 +1 @@
1
- 0.35.6
1
+ 0.38.2
@@ -15,4 +15,3 @@
15
15
  # specific language governing permissions and limitations
16
16
  # under the License.
17
17
  distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
18
- wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
package/mvnw/mvnw CHANGED
@@ -19,290 +19,232 @@
19
19
  # ----------------------------------------------------------------------------
20
20
 
21
21
  # ----------------------------------------------------------------------------
22
- # Apache Maven Wrapper startup batch script, version 3.2.0
23
- #
24
- # Required ENV vars:
25
- # ------------------
26
- # JAVA_HOME - location of a JDK home dir
22
+ # Apache Maven Wrapper startup batch script, version 3.3.0
27
23
  #
28
24
  # Optional ENV vars
29
25
  # -----------------
30
- # MAVEN_OPTS - parameters passed to the Java VM when running Maven
31
- # e.g. to debug Maven itself, use
32
- # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33
- # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
26
+ # JAVA_HOME - location of a JDK home dir, required when download maven via java source
27
+ # MVNW_REPOURL - repo url base for downloading maven distribution
28
+ # MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
29
+ # MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
34
30
  # ----------------------------------------------------------------------------
35
31
 
36
- if [ -z "$MAVEN_SKIP_RC" ] ; then
37
-
38
- if [ -f /usr/local/etc/mavenrc ] ; then
39
- . /usr/local/etc/mavenrc
40
- fi
41
-
42
- if [ -f /etc/mavenrc ] ; then
43
- . /etc/mavenrc
44
- fi
45
-
46
- if [ -f "$HOME/.mavenrc" ] ; then
47
- . "$HOME/.mavenrc"
48
- fi
49
-
50
- fi
32
+ set -euf
33
+ [ "${MVNW_VERBOSE-}" != debug ] || set -x
51
34
 
52
- # OS specific support. $var _must_ be set to either true or false.
53
- cygwin=false;
54
- darwin=false;
55
- mingw=false
35
+ # OS specific support.
36
+ native_path() { printf %s\\n "$1"; }
56
37
  case "$(uname)" in
57
- CYGWIN*) cygwin=true ;;
58
- MINGW*) mingw=true;;
59
- Darwin*) darwin=true
60
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
61
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
62
- if [ -z "$JAVA_HOME" ]; then
63
- if [ -x "/usr/libexec/java_home" ]; then
64
- JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
65
- else
66
- JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
67
- fi
68
- fi
69
- ;;
38
+ CYGWIN* | MINGW*)
39
+ [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
40
+ native_path() { cygpath --path --windows "$1"; }
41
+ ;;
70
42
  esac
71
43
 
72
- if [ -z "$JAVA_HOME" ] ; then
73
- if [ -r /etc/gentoo-release ] ; then
74
- JAVA_HOME=$(java-config --jre-home)
75
- fi
76
- fi
77
-
78
- # For Cygwin, ensure paths are in UNIX format before anything is touched
79
- if $cygwin ; then
80
- [ -n "$JAVA_HOME" ] &&
81
- JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
82
- [ -n "$CLASSPATH" ] &&
83
- CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
84
- fi
85
-
86
- # For Mingw, ensure paths are in UNIX format before anything is touched
87
- if $mingw ; then
88
- [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
89
- JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
90
- fi
91
-
92
- if [ -z "$JAVA_HOME" ]; then
93
- javaExecutable="$(which javac)"
94
- if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
95
- # readlink(1) is not available as standard on Solaris 10.
96
- readLink=$(which readlink)
97
- if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
98
- if $darwin ; then
99
- javaHome="$(dirname "\"$javaExecutable\"")"
100
- javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
101
- else
102
- javaExecutable="$(readlink -f "\"$javaExecutable\"")"
103
- fi
104
- javaHome="$(dirname "\"$javaExecutable\"")"
105
- javaHome=$(expr "$javaHome" : '\(.*\)/bin')
106
- JAVA_HOME="$javaHome"
107
- export JAVA_HOME
108
- fi
109
- fi
110
- fi
111
-
112
- if [ -z "$JAVACMD" ] ; then
113
- if [ -n "$JAVA_HOME" ] ; then
114
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
44
+ # set JAVACMD and JAVACCMD
45
+ set_java_home() {
46
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
47
+ if [ -n "${JAVA_HOME-}" ]; then
48
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
115
49
  # IBM's JDK on AIX uses strange locations for the executables
116
50
  JAVACMD="$JAVA_HOME/jre/sh/java"
51
+ JAVACCMD="$JAVA_HOME/jre/sh/javac"
117
52
  else
118
53
  JAVACMD="$JAVA_HOME/bin/java"
54
+ JAVACCMD="$JAVA_HOME/bin/javac"
55
+
56
+ if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
57
+ echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
58
+ echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
59
+ return 1
60
+ fi
119
61
  fi
120
62
  else
121
- JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
122
- fi
123
- fi
124
-
125
- if [ ! -x "$JAVACMD" ] ; then
126
- echo "Error: JAVA_HOME is not defined correctly." >&2
127
- echo " We cannot execute $JAVACMD" >&2
128
- exit 1
129
- fi
130
-
131
- if [ -z "$JAVA_HOME" ] ; then
132
- echo "Warning: JAVA_HOME environment variable is not set."
133
- fi
134
-
135
- # traverses directory structure from process work directory to filesystem root
136
- # first directory with .mvn subdirectory is considered project base directory
137
- find_maven_basedir() {
138
- if [ -z "$1" ]
139
- then
140
- echo "Path not specified to find_maven_basedir"
141
- return 1
63
+ JAVACMD="$(
64
+ 'set' +e
65
+ 'unset' -f command 2>/dev/null
66
+ 'command' -v java
67
+ )" || :
68
+ JAVACCMD="$(
69
+ 'set' +e
70
+ 'unset' -f command 2>/dev/null
71
+ 'command' -v javac
72
+ )" || :
73
+
74
+ if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
75
+ echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
76
+ return 1
77
+ fi
142
78
  fi
79
+ }
143
80
 
144
- basedir="$1"
145
- wdir="$1"
146
- while [ "$wdir" != '/' ] ; do
147
- if [ -d "$wdir"/.mvn ] ; then
148
- basedir=$wdir
149
- break
150
- fi
151
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
152
- if [ -d "${wdir}" ]; then
153
- wdir=$(cd "$wdir/.." || exit 1; pwd)
154
- fi
155
- # end of workaround
81
+ # hash string like Java String::hashCode
82
+ hash_string() {
83
+ str="${1:-}" h=0
84
+ while [ -n "$str" ]; do
85
+ char="${str%"${str#?}"}"
86
+ h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
87
+ str="${str#?}"
156
88
  done
157
- printf '%s' "$(cd "$basedir" || exit 1; pwd)"
89
+ printf %x\\n $h
158
90
  }
159
91
 
160
- # concatenates all lines of a file
161
- concat_lines() {
162
- if [ -f "$1" ]; then
163
- # Remove \r in case we run on Windows within Git Bash
164
- # and check out the repository with auto CRLF management
165
- # enabled. Otherwise, we may read lines that are delimited with
166
- # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
167
- # splitting rules.
168
- tr -s '\r\n' ' ' < "$1"
169
- fi
92
+ verbose() { :; }
93
+ [ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
94
+
95
+ die() {
96
+ printf %s\\n "$1" >&2
97
+ exit 1
170
98
  }
171
99
 
172
- log() {
173
- if [ "$MVNW_VERBOSE" = true ]; then
174
- printf '%s\n' "$1"
175
- fi
100
+ # parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
101
+ while IFS="=" read -r key value; do
102
+ case "${key-}" in
103
+ distributionUrl) distributionUrl="${value-}" ;;
104
+ distributionSha256Sum) distributionSha256Sum="${value-}" ;;
105
+ esac
106
+ done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
107
+ [ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
108
+
109
+ case "${distributionUrl##*/}" in
110
+ maven-mvnd-*bin.*)
111
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
112
+ case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
113
+ *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
114
+ :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
115
+ :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
116
+ :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
117
+ *)
118
+ echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
119
+ distributionPlatform=linux-amd64
120
+ ;;
121
+ esac
122
+ distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
123
+ ;;
124
+ maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
125
+ *) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
126
+ esac
127
+
128
+ # apply MVNW_REPOURL and calculate MAVEN_HOME
129
+ # maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
130
+ [ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
131
+ distributionUrlName="${distributionUrl##*/}"
132
+ distributionUrlNameMain="${distributionUrlName%.*}"
133
+ distributionUrlNameMain="${distributionUrlNameMain%-bin}"
134
+ MAVEN_HOME="$HOME/.m2/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
135
+
136
+ exec_maven() {
137
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
138
+ exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
176
139
  }
177
140
 
178
- BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
179
- if [ -z "$BASE_DIR" ]; then
180
- exit 1;
141
+ if [ -d "$MAVEN_HOME" ]; then
142
+ verbose "found existing MAVEN_HOME at $MAVEN_HOME"
143
+ exec_maven "$@"
181
144
  fi
182
145
 
183
- MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
184
- log "$MAVEN_PROJECTBASEDIR"
146
+ case "${distributionUrl-}" in
147
+ *?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
148
+ *) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
149
+ esac
185
150
 
186
- ##########################################################################################
187
- # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
188
- # This allows using the maven wrapper in projects that prohibit checking in binary data.
189
- ##########################################################################################
190
- wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
191
- if [ -r "$wrapperJarPath" ]; then
192
- log "Found $wrapperJarPath"
151
+ # prepare tmp dir
152
+ if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
153
+ clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
154
+ trap clean HUP INT TERM EXIT
193
155
  else
194
- log "Couldn't find $wrapperJarPath, downloading it ..."
156
+ die "cannot create temp dir"
157
+ fi
195
158
 
196
- if [ -n "$MVNW_REPOURL" ]; then
197
- wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
198
- else
199
- wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
200
- fi
201
- while IFS="=" read -r key value; do
202
- # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
203
- safeValue=$(echo "$value" | tr -d '\r')
204
- case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
205
- esac
206
- done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
207
- log "Downloading from: $wrapperUrl"
159
+ mkdir -p -- "${MAVEN_HOME%/*}"
208
160
 
209
- if $cygwin; then
210
- wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
211
- fi
161
+ # Download and Install Apache Maven
162
+ verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
163
+ verbose "Downloading from: $distributionUrl"
164
+ verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
212
165
 
213
- if command -v wget > /dev/null; then
214
- log "Found wget ... using wget"
215
- [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
216
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
217
- wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
218
- else
219
- wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
220
- fi
221
- elif command -v curl > /dev/null; then
222
- log "Found curl ... using curl"
223
- [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
224
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
225
- curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
226
- else
227
- curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
228
- fi
229
- else
230
- log "Falling back to using Java to download"
231
- javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
232
- javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
233
- # For Cygwin, switch paths to Windows format before running javac
234
- if $cygwin; then
235
- javaSource=$(cygpath --path --windows "$javaSource")
236
- javaClass=$(cygpath --path --windows "$javaClass")
237
- fi
238
- if [ -e "$javaSource" ]; then
239
- if [ ! -e "$javaClass" ]; then
240
- log " - Compiling MavenWrapperDownloader.java ..."
241
- ("$JAVA_HOME/bin/javac" "$javaSource")
242
- fi
243
- if [ -e "$javaClass" ]; then
244
- log " - Running MavenWrapperDownloader.java ..."
245
- ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
246
- fi
247
- fi
248
- fi
166
+ # select .zip or .tar.gz
167
+ if ! command -v unzip >/dev/null; then
168
+ distributionUrl="${distributionUrl%.zip}.tar.gz"
169
+ distributionUrlName="${distributionUrl##*/}"
249
170
  fi
250
- ##########################################################################################
251
- # End of extension
252
- ##########################################################################################
253
171
 
254
- # If specified, validate the SHA-256 sum of the Maven wrapper jar file
255
- wrapperSha256Sum=""
256
- while IFS="=" read -r key value; do
257
- case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
258
- esac
259
- done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
260
- if [ -n "$wrapperSha256Sum" ]; then
261
- wrapperSha256Result=false
262
- if command -v sha256sum > /dev/null; then
263
- if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
264
- wrapperSha256Result=true
172
+ # verbose opt
173
+ __MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
174
+ [ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
175
+
176
+ # normalize http auth
177
+ case "${MVNW_PASSWORD:+has-password}" in
178
+ '') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
179
+ has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
180
+ esac
181
+
182
+ if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
183
+ verbose "Found wget ... using wget"
184
+ wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
185
+ elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
186
+ verbose "Found curl ... using curl"
187
+ curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
188
+ elif set_java_home; then
189
+ verbose "Falling back to use Java to download"
190
+ javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
191
+ targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
192
+ cat >"$javaSource" <<-END
193
+ public class Downloader extends java.net.Authenticator
194
+ {
195
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
196
+ {
197
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
198
+ }
199
+ public static void main( String[] args ) throws Exception
200
+ {
201
+ setDefault( new Downloader() );
202
+ java.nio.file.Files.copy( new java.net.URL( args[0] ).openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
203
+ }
204
+ }
205
+ END
206
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
207
+ verbose " - Compiling Downloader.java ..."
208
+ "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
209
+ verbose " - Running Downloader.java ..."
210
+ "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
211
+ fi
212
+
213
+ # If specified, validate the SHA-256 sum of the Maven distribution zip file
214
+ if [ -n "${distributionSha256Sum-}" ]; then
215
+ distributionSha256Result=false
216
+ if [ "$MVN_CMD" = mvnd.sh ]; then
217
+ echo "Checksum validation is not supported for maven-mvnd." >&2
218
+ echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
219
+ exit 1
220
+ elif command -v sha256sum >/dev/null; then
221
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
222
+ distributionSha256Result=true
265
223
  fi
266
- elif command -v shasum > /dev/null; then
267
- if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
268
- wrapperSha256Result=true
224
+ elif command -v shasum >/dev/null; then
225
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
226
+ distributionSha256Result=true
269
227
  fi
270
228
  else
271
- echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
272
- echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
229
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
230
+ echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
273
231
  exit 1
274
232
  fi
275
- if [ $wrapperSha256Result = false ]; then
276
- echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
277
- echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
278
- echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
233
+ if [ $distributionSha256Result = false ]; then
234
+ echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
235
+ echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
279
236
  exit 1
280
237
  fi
281
238
  fi
282
239
 
283
- MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
284
-
285
- # For Cygwin, switch paths to Windows format before running java
286
- if $cygwin; then
287
- [ -n "$JAVA_HOME" ] &&
288
- JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
289
- [ -n "$CLASSPATH" ] &&
290
- CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
291
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
292
- MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
240
+ # unzip and move
241
+ if command -v unzip >/dev/null; then
242
+ unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
243
+ else
244
+ tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
293
245
  fi
246
+ printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
247
+ mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
294
248
 
295
- # Provide a "standardized" way to retrieve the CLI args that will
296
- # work with both Windows and non-Windows executions.
297
- MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
298
- export MAVEN_CMD_LINE_ARGS
299
-
300
- WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
301
-
302
- # shellcheck disable=SC2086 # safe args
303
- exec "$JAVACMD" \
304
- $MAVEN_OPTS \
305
- $MAVEN_DEBUG_OPTS \
306
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
307
- "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
308
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
249
+ clean || :
250
+ exec_maven "$@"