From 6292c7565652306aeae82fd9a25456590c4f532f Mon Sep 17 00:00:00 2001 From: Igor Demin Date: Thu, 25 Aug 2022 15:25:42 +0200 Subject: [PATCH] Fix publishing to ~/.gradle/.m2 instead of ~/.m2 (#282) Replacing gradlew with default implementation, and adding only env. variables default OUT_DIR, which also checked here isn't affected --- gradlew | 388 ++++++++++---------------------------------------------- 1 file changed, 66 insertions(+), 322 deletions(-) diff --git a/gradlew b/gradlew index 9ae82a8e0e1ed..fdbc5589023ba 100755 --- a/gradlew +++ b/gradlew @@ -1,6 +1,20 @@ -#!/usr/bin/env bash -set -o pipefail -set -e +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## ## @@ -8,61 +22,38 @@ set -e ## ############################################################################## -# --------- androidx specific code needed for build server. ------------------ - -SCRIPT_PATH="$(cd $(dirname $0) && pwd -P)" -if [ -n "$OUT_DIR" ] ; then - mkdir -p "$OUT_DIR" - OUT_DIR="$(cd $OUT_DIR && pwd -P)" - export GRADLE_USER_HOME="$OUT_DIR/.gradle" - export TMPDIR=$OUT_DIR -else - CHECKOUT_ROOT="$(cd $SCRIPT_PATH/../.. && pwd -P)" - export OUT_DIR="$CHECKOUT_ROOT/out" - export GRADLE_USER_HOME=~/.gradle -fi - -ORG_GRADLE_JVMARGS="$(cd $SCRIPT_PATH && grep org.gradle.jvmargs gradle.properties | sed 's/^/-D/')" -if [ -n "$DIST_DIR" ]; then - mkdir -p "$DIST_DIR" - DIST_DIR="$(cd $DIST_DIR && pwd -P)" - export LINT_PRINT_STACKTRACE=true - - #Set the initial heap size to match the max heap size, - #by replacing a string like "-Xmx1g" with one like "-Xms1g -Xmx1g" - MAX_MEM=24g - ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s/-Xmx\([^ ]*\)/-Xms$MAX_MEM -Xmx$MAX_MEM/")" - - # tell Gradle where to put a heap dump on failure - ORG_GRADLE_JVMARGS="$(echo $ORG_GRADLE_JVMARGS | sed "s|$| -XX:HeapDumpPath=$DIST_DIR|")" - - # We don't set a default DIST_DIR in an else clause here because Studio doesn't use gradlew - # and doesn't set DIST_DIR and we want gradlew and Studio to match -fi - -# unset ANDROID_BUILD_TOP so that Lint doesn't think we're building the platform itself -unset ANDROID_BUILD_TOP -# ---------------------------------------------------------------------------- - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. - -if [[ " ${@} " =~ " -PupdateLintBaseline " ]]; then - # remove when b/188666845 is complete - # Inform lint to not fail even when creating a baseline file - JAVA_OPTS="$JAVA_OPTS -Dlint.baselines.continue=true" -fi +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -73,6 +64,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -83,29 +75,10 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -platform_suffix="x86" -case "$(arch)" in - arm64* ) - platform_suffix="arm64" -esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -126,8 +99,6 @@ export ALLOW_PUBLIC_REPOS=1 export ANDROIDX_PROJECTS=COMPOSE export COMPOSE_CUSTOM_GROUP=org.jetbrains.compose -# ---------------------------------------------------------------------------- - # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -151,7 +122,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -171,10 +142,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -200,258 +172,30 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -#TODO: Remove HOME_SYSTEM_PROPERTY_ARGUMENT if https://github.com/gradle/gradle/issues/11433 gets fixed -HOME_SYSTEM_PROPERTY_ARGUMENT="" -if [ "$GRADLE_USER_HOME" != "" ]; then - HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME" -fi -if [ "$TMPDIR" != "" ]; then - TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR" -fi - -if [[ " ${@} " =~ " --clean " ]]; then - cleanCaches=true -else - cleanCaches=false -fi - -if [[ " ${@} " =~ " --no-ci " ]]; then - disableCi=true -else - disableCi=false -fi - -# workaround for https://github.com/gradle/gradle/issues/18386 -if [[ " ${@} " =~ " --profile " ]]; then - mkdir -p reports -fi - -# Expand some arguments -for compact in "--ci" "--strict" "--clean" "--no-ci"; do - expanded="" - if [ "$compact" == "--ci" ]; then - if [ "$disableCi" == "false" ]; then - expanded="--strict\ - --stacktrace\ - -Pandroidx.summarizeStderr\ - -Pandroidx.enableAffectedModuleDetection\ - --no-watch-fs" - fi - fi - if [ "$compact" == "--strict" ]; then - expanded="-Pandroidx.validateNoUnrecognizedMessages\ - -Pandroidx.verifyUpToDate\ - --no-watch-fs" - if [ "$USE_ANDROIDX_REMOTE_BUILD_CACHE" == "" ]; then - expanded="$expanded --offline" - fi - fi - # if compact is something else then we parsed the argument above but - # still have to remove it (expanded == "") to avoid confusing Gradle - - # check whether this particular compat argument was passed (and therefore needs expansion) - if [[ " ${@} " =~ " $compact " ]]; then - # Expand an individual argument - # Start by making a copy of our list of arguments and iterating through the copy - for arg in "$@"; do - # Remove this argument from our list of arguments. - # By the time we've completed this loop, we will have removed the original copy of - # each argument, and potentially re-added a new copy or an expansion of each. - shift - # Determine whether to expand this argument - if [ "$arg" == "$compact" ]; then - # Add the expansion to our arguments - set -- "$@" $expanded - if [ "$expanded" != "" ]; then - echo "gradlew expanded '$compact' into '$expanded'" - echo - fi - # We avoid re-adding this argument itself back into the list for two reasons: - # 1. This argument might not be directly understood by Gradle - # 2. We want to enforce that all behaviors enabled by this flag can be toggled independently, - # so we don't want it to be easy to inadvertently check for the presence of this flag - # specifically - else - # Add this argument back into our arguments - set -- "$@" "$arg" - fi - done - fi -done - -# check whether the user has requested profiling via yourkit -yourkitArgPrefix="androidx.profile.yourkitAgentPath" -yourkitAgentPath="" -if [[ " ${@}" =~ " -P$yourkitArgPrefix" ]]; then - for arg in "$@"; do - if echo "$arg" | grep "${yourkitArgPrefix}=" >/dev/null; then - yourkitAgentPath="$(echo "$arg" | sed "s/-P${yourkitArgPrefix}=//")" - fi - done - if [ "$yourkitAgentPath" == "" ]; then - echo "Error: $yourkitArgPrefix must be set to the path of the YourKit Java agent" >&2 - exit 1 - fi - if [ ! -e "$yourkitAgentPath" ]; then - echo "Error: $yourkitAgentPath does not exist" >&2 - exit 1 - fi - # add the agent to the path - export _JAVA_OPTIONS="$_JAVA_OPTIONS -agentpath:$yourkitAgentPath" - # add arguments - set -- "$@" --no-daemon --rerun-tasks - - # lots of blank lines because these messages are important - echo - echo - echo - echo - echo - # suggest --clean - if [ "$cleanCaches" == "false" ]; then - echo "When setting $yourkitArgPrefix you may also want to pass --clean" - fi - COLOR_YELLOW="\u001B[33m" - COLOR_CLEAR="\u001B[0m" - - echo -e "${COLOR_YELLOW}Also be sure to start the YourKit user interface and connect to the appropriate Java process (probably the Gradle Daemon)${COLOR_CLEAR}" - echo - echo - echo - echo - echo -fi - -if [[ " ${@} " =~ " --scan " ]]; then - if [[ " ${@} " =~ " --offline " ]]; then - echo "--scan incompatible with --offline" - echo "you could try --no-ci" - exit 1 - fi -fi - -function removeCaches() { - rm -rf $SCRIPT_PATH/.gradle - rm -rf $SCRIPT_PATH/buildSrc/.gradle - rm -f $SCRIPT_PATH/local.properties - if [ "$GRADLE_USER_HOME" != "" ]; then - rm -rf "$GRADLE_USER_HOME" - else - rm -rf ~/.gradle - fi - # https://github.com/gradle/gradle/issues/18386 - rm -rf $SCRIPT_PATH/reports - rm -rf $SCRIPT_PATH/build - rm -rf $OUT_DIR +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } +APP_ARGS=`save "$@"` -function runGradle() { - processOutput=false - if [[ " ${@} " =~ " -Pandroidx.validateNoUnrecognizedMessages " ]]; then - processOutput=true - fi - if [[ " ${@} " =~ " -Pandroidx.summarizeStderr " ]]; then - processOutput=true - fi - if [ "$processOutput" == "true" ]; then - wrapper="$SCRIPT_PATH/development/build_log_processor.sh" - else - wrapper="" - fi - - RETURN_VALUE=0 - PROJECT_CACHE_DIR_ARGUMENT="--project-cache-dir $OUT_DIR/gradle-project-cache" - if $wrapper "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG $PROJECT_CACHE_DIR_ARGUMENT "$ORG_GRADLE_JVMARGS" "$@"; then - RETURN_VALUE=0 - else - # Print AndroidX-specific help message if build fails - # Have to do this build-failure detection in gradlew rather than in build.gradle - # so that this message still prints even if buildSrc itself fails - echo - echo For help with unexpected failures, see development/diagnose-build-failure/README.md - echo - RETURN_VALUE=1 - fi +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - # If the caller specified where to save data, then also save the build scan data - if [ "$DIST_DIR" != "" ]; then - if [ "$GRADLE_USER_HOME" != "" ]; then - scanDir="$GRADLE_USER_HOME/build-scan-data" - if [ -e "$scanDir" ]; then - if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then - zipPath="$DIST_DIR/scan-up-to-date.zip" - else - zipPath="$DIST_DIR/scan.zip" - fi - rm -f "$zipPath" - cd "$GRADLE_USER_HOME/build-scan-data" - zip -q -r "$zipPath" . - cd - - fi - fi - fi - return $RETURN_VALUE -} - -if [ "$cleanCaches" == true ]; then - echo "IF ./gradlew --clean FIXES YOUR BUILD; OPEN A BUG." - echo "In nearly all cases, it should not be necessary to run a clean build." - echo - # one case where it is convenient to have a clean build is for double-checking that a build failure isn't due to an incremental build failure - # another case where it is convenient to have a clean build is for performance testing - # another case where it is convenient to have a clean build is when you're modifying the build and may have introduced some errors but haven't shared your changes yet (at which point you should have fixed the errors) - - echo "Stopping Gradle daemons" - runGradle --stop || true - echo - - backupDir=~/androidx-build-state-backup - ./development/diagnose-build-failure/impl/backup-state.sh "$backupDir" --move # prints that it is saving state into this dir" - - echo "To restore this state later, run:" - echo - echo " ./development/diagnose-build-failure/impl/restore-state.sh $backupDir" - echo - echo "Running Gradle" - echo -fi - -if [[ "$DISALLOW_TASK_EXECUTION" != "" ]]; then - echo "Setting 'DISALLOW_TASK_EXECUTION' directly is forbidden. Did you mean -Pandroidx.verifyUpToDate ?" - echo "See TaskUpToDateValidator.java for more information" - exit 1 -fi - -runGradle "$@" -# Check whether we were given the "-Pandroidx.verifyUpToDate" argument -if [[ " ${@} " =~ " -Pandroidx.verifyUpToDate " ]]; then - # Re-run Gradle, and find all tasks that are unexpectly out of date - if ! DISALLOW_TASK_EXECUTION=true runGradle "$@" --continue; then - echo >&2 - echo "TaskUpToDateValidator's second build failed. To reproduce, try running './gradlew -Pandroidx.verifyUpToDate '" >&2 - exit 1 - fi -fi +exec "$JAVACMD" "$@"