From c7fdc90e9b9244a8db49658adac0bcc915711c5f Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sat, 29 Jul 2017 18:50:05 +0900 Subject: [PATCH 01/24] add scala-2.12.3 (#45) --- plugins/scala-install/share/scala-2.12.3 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugins/scala-install/share/scala-2.12.3 diff --git a/plugins/scala-install/share/scala-2.12.3 b/plugins/scala-install/share/scala-2.12.3 new file mode 100644 index 0000000..7f72210 --- /dev/null +++ b/plugins/scala-install/share/scala-2.12.3 @@ -0,0 +1,4 @@ +sites=( + "http://www.scala-lang.org/files/archive" + ); +archive_file="scala-2.12.3.tgz" \ No newline at end of file From f961ae11a160affae88be6250c748e1de8222e82 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 03:19:21 +0900 Subject: [PATCH 02/24] fix dotty's version name --- plugins/scala-install/bin/scalaenv-install | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index 127a43a..ab9da5d 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -57,7 +57,14 @@ if [ -f "${recipe}" ]; then fi if [ $? ]; then echo "Extracting files..." - tar xf "${SCALAENV_ROOT}/versions/${archive_file}" -C "${SCALAENV_ROOT}/versions" + if [ $(echo ${SCALAENV_ROOT}/versions/${archive_file} | grep "dotty") ]; then + tar xf "${SCALAENV_ROOT}/versions/${archive_file}" -C "${SCALAENV_ROOT}/versions" + if [ -d ${SCALAENV_ROOT}/versions/${version}-bin-SNAPSHOT ]; then + mv "${SCALAENV_ROOT}/versions/${version}-bin-SNAPSHOT" "${SCALAENV_ROOT}/versions/${version}" + fi + else + tar xf "${SCALAENV_ROOT}/versions/${archive_file}" -C "${SCALAENV_ROOT}/versions" + fi if [ $? ]; then rm -f "${SCALAENV_ROOT}/versions/${archive_file}" test ! -z "${sha1sum_file}" && rm -f "${SCALAENV_ROOT}/versions/${sha1sum_file}" From 4a6df15560da98512fe81b7d9aa24558fecd94ad Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 03:30:48 +0900 Subject: [PATCH 03/24] check already installed version --- plugins/scala-install/bin/scalaenv-install | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index ab9da5d..616c8cc 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -45,6 +45,10 @@ if [ -f "${recipe}" ]; then echo "Installing ${version}:" for (( i=0; i<${#sites[@]}; ++i)) do + if [ -d ${SCALAENV_ROOT}/versions/${version} ]; then + echo "${version} is already installed." + break + fi mkdir -p "${SCALAENV_ROOT}/versions" cwd="$(pwd)" cd "${SCALAENV_ROOT}/versions" From 9c8f8e82a0b0fd9e405fbbeab414c84faa0bf60a Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 03:55:43 +0900 Subject: [PATCH 04/24] add a comment for scalaenv-install --- plugins/scala-install/bin/scalaenv-install | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index 616c8cc..c2ce1e8 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -1,5 +1,15 @@ #!/usr/bin/env bash - +# +# Summary: Install a Scala/Dotty version +# +# Usage: scalaenv install +# scalaenv install -l|--list +# scalaenv install --version +# +# -l/--list List all available versions +# -s/--skip-existing Skip if the version appears to be installed already +# +# Install available Scala versions set -e test -n "${SCALAENV_DEBUG}" && set -x From f3f4b365f4ce32b8d9c0c977592f539ce23d07fa Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 03:55:55 +0900 Subject: [PATCH 05/24] add scalaenv-uninstall --- plugins/scala-install/bin/scalaenv-uninstall | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 plugins/scala-install/bin/scalaenv-uninstall diff --git a/plugins/scala-install/bin/scalaenv-uninstall b/plugins/scala-install/bin/scalaenv-uninstall new file mode 100755 index 0000000..2e83cd8 --- /dev/null +++ b/plugins/scala-install/bin/scalaenv-uninstall @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# Summary: Uninstall a specific Scala version +# +# Usage: scalaenv uninstall [-f|--force] +# +# -f Attempt to remove the specified version without prompting +# for confirmation. If the version does not exist, do not +# display an error message. +# +set -e + +if [ "$1" = "--complete" ]; then + echo --force + exec scalaenv versions --bare +fi + +usage() { + scalaenv-help uninstall 2>/dev/null + [ -z "$1" ] || exit "$1" +} + +if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + usage 0 +fi + +unset FORCE +if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then + FORCE=true + shift +fi + +[ "$#" -eq 1 ] || usage 1 >&2 + +DEFINITION="$1" +case "$DEFINITION" in +"" | -* ) + usage 1 >&2 + ;; +esac + +VERSION_NAME="${DEFINITION##*/}" +PREFIX="${SCALAENV_ROOT}/versions/${VERSION_NAME}" + +if [ -z "$FORCE" ]; then + if [ ! -d "$PREFIX" ]; then + echo "scalaenv: version \`$VERSION_NAME\` not installed" >&2 + exit 1 + fi + + read -p "scalaenv: remove $PREFIX? " + case "$REPLY" in + y* | Y* ) ;; + * ) exit 1 ;; + esac +fi From 5e2027e7b159335bfe60bb4b4217f9421843267f Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 04:19:11 +0900 Subject: [PATCH 06/24] fix scalaenv-install --- plugins/scala-install/bin/scalaenv-install | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index c2ce1e8..c9974c0 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -4,10 +4,8 @@ # # Usage: scalaenv install # scalaenv install -l|--list -# scalaenv install --version # # -l/--list List all available versions -# -s/--skip-existing Skip if the version appears to be installed already # # Install available Scala versions set -e From 9ca61c1821ebcc82447bb97e15392a3c44f832eb Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 04:51:49 +0900 Subject: [PATCH 07/24] fix scalaenv-unistall --- plugins/scala-install/bin/scalaenv-uninstall | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/scala-install/bin/scalaenv-uninstall b/plugins/scala-install/bin/scalaenv-uninstall index 2e83cd8..1d9ac47 100755 --- a/plugins/scala-install/bin/scalaenv-uninstall +++ b/plugins/scala-install/bin/scalaenv-uninstall @@ -54,3 +54,8 @@ if [ -z "$FORCE" ]; then * ) exit 1 ;; esac fi + +if [ -d "$PREFIX" ]; then + rm -rf "$PREFIX" + scalaenv-rehash +fi From b8cb470686752a8a9454e6ee819f100e78a63b13 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Sun, 30 Jul 2017 09:29:33 +0900 Subject: [PATCH 08/24] fix the comment for scalaenv-install --- plugins/scala-install/bin/scalaenv-install | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index c9974c0..9c6c6b3 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -3,11 +3,8 @@ # Summary: Install a Scala/Dotty version # # Usage: scalaenv install -# scalaenv install -l|--list # -# -l/--list List all available versions -# -# Install available Scala versions +# Install available Scala/Dotty versions set -e test -n "${SCALAENV_DEBUG}" && set -x From 522104e0ceac68690d3b493aeba26ac900ff55a8 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 2 Aug 2017 10:41:40 +0900 Subject: [PATCH 09/24] fix the way to check if already installed the same version --- plugins/scala-install/bin/scalaenv-install | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index 9c6c6b3..399a653 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -48,12 +48,12 @@ recipe="$(abs_dirname ${0})/../share/${version}" if [ -f "${recipe}" ]; then source ${recipe} echo "Installing ${version}:" + if [ -d ${SCALAENV_ROOT}/versions/${version} ]; then + echo "${version} is already installed." + exit 1 + fi for (( i=0; i<${#sites[@]}; ++i)) do - if [ -d ${SCALAENV_ROOT}/versions/${version} ]; then - echo "${version} is already installed." - break - fi mkdir -p "${SCALAENV_ROOT}/versions" cwd="$(pwd)" cd "${SCALAENV_ROOT}/versions" From e30ef3088ac29d264008f383edfdc6b0238ab85d Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 2 Aug 2017 18:39:42 +0900 Subject: [PATCH 10/24] add scala-2.13.0-M2 (#46) --- plugins/scala-install/share/scala-2.13.0-M2 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugins/scala-install/share/scala-2.13.0-M2 diff --git a/plugins/scala-install/share/scala-2.13.0-M2 b/plugins/scala-install/share/scala-2.13.0-M2 new file mode 100644 index 0000000..216d6dd --- /dev/null +++ b/plugins/scala-install/share/scala-2.13.0-M2 @@ -0,0 +1,4 @@ +sites=( + "http://www.scala-lang.org/files/archive" + ); +archive_file="scala-2.13.0-M2.tgz" From d6057f7e0359ad8ee063d1a55b6775a98b8d3755 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Tue, 8 Aug 2017 09:02:03 +0900 Subject: [PATCH 11/24] fix scalaenv--version --- libexec/scalaenv---version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libexec/scalaenv---version b/libexec/scalaenv---version index 8ae4798..a095a31 100755 --- a/libexec/scalaenv---version +++ b/libexec/scalaenv---version @@ -12,7 +12,7 @@ set -e test -n "${SCALAENV_DEBUG}" && set -x -version="0.0.12" +version="0.0.14" if cd "${SCALAENV_ROOT}" 2> /dev/null; then git_revision="$(git describe --tags HEAD 2> /dev/null || true)" From 3c692e79c8195bff0e76aca3f607fbc348d4882c Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 9 Aug 2017 23:51:31 +0900 Subject: [PATCH 12/24] fix the old url --- libexec/scalaenv-help | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libexec/scalaenv-help b/libexec/scalaenv-help index cc4bb1f..ce067bc 100755 --- a/libexec/scalaenv-help +++ b/libexec/scalaenv-help @@ -146,7 +146,7 @@ if [ -z "$1" ] || [ "$1" == "scalaenv" ]; then print_summaries commands local global shell install uninstall rehash version versions which whence echo echo "See \`scalaenv help ' for information on a specific command." - echo "For full documentation, see: https://github.com/mazgi/scalaenv" + echo "For full documentation, see: https://github.com/scalaenv/scalaenv" else command="$1" if [ -n "$(command_path "$command")" ]; then From 3cfbc5a26ba98a9e464d756fcd12d1b1581fc5aa Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Tue, 15 Aug 2017 09:43:00 +0900 Subject: [PATCH 13/24] enhanced scalaenv-install (#47) - Add detailed explanations for the usage and error messages - Add new option, -f|--force, -l|--list and -h|--help - Run `scalaenv-rehash` after a successful installation - Some fixes --- plugins/scala-install/bin/scalaenv-install | 169 ++++++++++++++++----- 1 file changed, 129 insertions(+), 40 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index 399a653..87f9572 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -2,7 +2,13 @@ # # Summary: Install a Scala/Dotty version # -# Usage: scalaenv install +# Usage: scalaenv install [-f] +# scalaenv install -l|--list +# scalaenv install -h|--help +# +# -l/--list List all available versions +# -f/--force Install even if the version appears to be installed already +# -h/--help Show the usage for `scalaenv-install` # # Install available Scala/Dotty versions set -e @@ -19,6 +25,11 @@ if [ -z "${READLINK}" ]; then exit 1 fi +usage () { + scalaenv-help install 2>/dev/null + [ -z "$1" ] || exit "$1" +} + resolve_link() { ${READLINK} "${1}" } @@ -37,55 +48,133 @@ abs_dirname() { cd "${cwd}" } + +unset FORCE +unset VERSION + +for OPT in "$@"; do + case "$OPT" in + '-h' | '--help' ) + usage 0 + ;; + '-l' | '--list' ) + echo "All available versions:" + ls -1 $(abs_dirname $0)/../share + exit 0 + ;; + '-f' | '--force' ) + FORCE=true + shift 1 + ;; + '-' | '--' ) + shift 1 + param+=( "$@" ) + break + ;; + -*) + echo "$(basename $0): illegal option -- '$(echo $1 | sed 's/^-*//')'" 1>&2 + exit 1 + ;; + *) + if [[ ! -z "$1" ]] && [[ ! "$1" =~ ^-+ ]]; then + param+=( "$1" ) + shift 1 + fi + ;; + esac +done + +if [ -z $param ]; then + usage 1 +fi + +VERSION=${param} SHA1SUM=$(type -p sha1sum shasum | head -1) + if [ -z "${SHA1SUM}" ]; then echo "scala-install: connot find sha1sum - are you missing GNU coreutils?" >& 2 exit 1 fi -version=${1} -recipe="$(abs_dirname ${0})/../share/${version}" -if [ -f "${recipe}" ]; then - source ${recipe} - echo "Installing ${version}:" - if [ -d ${SCALAENV_ROOT}/versions/${version} ]; then - echo "${version} is already installed." - exit 1 +if [ -d ${SCALAENV_ROOT}/versions/${VERSION} ]; then + if [ -z "$FORCE" ]; then + echo "scalaenv: ${VERSION} already exists" >&2 + read -p "continue with installation? (y/N) " + case "$REPLY" in + y* | Y* ) ;; + * ) exit 1 ;; + esac fi - for (( i=0; i<${#sites[@]}; ++i)) - do - mkdir -p "${SCALAENV_ROOT}/versions" - cwd="$(pwd)" - cd "${SCALAENV_ROOT}/versions" - echo "Downloading ${version} archives..." - curl -#LO "${sites[$i]}/${archive_file}" - if [ ! -z "${sha1sum_file}" ]; then - curl -#LO "${sites[$i]}/${sha1sum_file}" - echo "Checking SHA-1 checksum..." - "${SHA1SUM}" --check "${sha1sum_file}" - fi - if [ $? ]; then - echo "Extracting files..." - if [ $(echo ${SCALAENV_ROOT}/versions/${archive_file} | grep "dotty") ]; then - tar xf "${SCALAENV_ROOT}/versions/${archive_file}" -C "${SCALAENV_ROOT}/versions" - if [ -d ${SCALAENV_ROOT}/versions/${version}-bin-SNAPSHOT ]; then - mv "${SCALAENV_ROOT}/versions/${version}-bin-SNAPSHOT" "${SCALAENV_ROOT}/versions/${version}" - fi - else - tar xf "${SCALAENV_ROOT}/versions/${archive_file}" -C "${SCALAENV_ROOT}/versions" +fi + +# scalaenv's recipe for installing scala/dotty binary +RECIPE="$(abs_dirname ${0})/../share/${VERSION}" + +# if PREFIX is existed, PREFIX_EXISTS is 1 +PREFIX="${SCALAENV_ROOT}/versions/${VERSION}" +[ -d "${PREFIX}" ] && PREFIX_EXISTS=1 + +scalaenv-build () { + if [ -f "${RECIPE}" ]; then + source ${RECIPE} + echo "Installing ${VERSION}:" + for (( i=0; i<${#sites[@]}; ++i)) + do + versions_dir="${SCALAENV_ROOT}/versions" + mkdir -p ${versions_dir} + cwd="$(pwd)" + cd "${SCALAENV_ROOT}/versions" + echo "Downloading ${VERSION} archives..." + curl -#LO "${sites[$i]}/${archive_file}" + if [ ! -z "${sha1sum_file}" ]; then + curl -#LO "${sites[$i]}/${sha1sum_file}" + echo "Checking SHA-1 checksum..." + "${SHA1SUM}" --check "${sha1sum_file}" fi if [ $? ]; then - rm -f "${SCALAENV_ROOT}/versions/${archive_file}" - test ! -z "${sha1sum_file}" && rm -f "${SCALAENV_ROOT}/versions/${sha1sum_file}" + echo "Extracting files..." + if [ -d "${versions_dir}/${VERSION}" ]; then + rm -rf "${versions_dir}/${VERSION}" + fi + mkdir -p "${versions_dir}/${VERSION}" && \ + tar xf "${versions_dir}/${archive_file}" \ + -C "${versions_dir}/${VERSION}" \ + --strip-components 1 + if [ $? ]; then + rm -f "${versions_dir}/${archive_file}" + test ! -z "${sha1sum_file}" && rm -f "${versions_dir}/${sha1sum_file}" + fi + echo "${VERSION} installed." + break fi - echo "${version} installed." - break - fi - cd "${cwd}" - echo "${version} install failed." - done + cd "${cwd}" + echo "${VERSION} install failed." + done + else + { + echo "$(basename $0): definition not found: ${VERSION}" + echo + echo "See all available versions with \`scalaenv install --list\`." + echo + echo -n "If the version you need is missing, try upgrading scalaenv." + echo + } >&2 + fi +} + +cleanup () { + [ -z "${PREFIX_EXISTS}" ] && rm -rf "$PREFIX" +} + +# Invoke `scalaenv-build` and record the exit status in $STATUS +STATUS=0 +scalaenv-build || STATUS="$?" + +# Run `scalaenv-rehash` after a successful installation +if [ "$STATUS" == "0" ]; then + scalaenv-rehash else - echo "All available versions:" - ls -1 $(abs_dirname $0)/../share + cleanup fi +exit "$STATUS" From 1027f72038546368b0f44189dc601fd50cf832fc Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Tue, 15 Aug 2017 20:31:10 +0900 Subject: [PATCH 14/24] Fix the behavior of `scalaenv` option --- libexec/scalaenv | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/libexec/scalaenv b/libexec/scalaenv index d884c26..e9be6e4 100755 --- a/libexec/scalaenv +++ b/libexec/scalaenv @@ -25,6 +25,14 @@ if [ -z "${READLINK}" ]; then exit 1 fi +abort() { + { if [ "$#" -eq 0 ]; then cat - + else echo "scalaenv: $*" + fi + } >&2 + exit 1 +} + resolve_link() { ${READLINK} "${1}" } @@ -86,20 +94,29 @@ shopt -u nullglob command="${1}" case "${command}" in - "" | "-h" | "--help" ) - echo -e "$(scalaenv-version)\n$(scalaenv-help)" >& 2 + "" ) + echo -e "$(scalaenv---version)\n$(scalaenv-help)" >& 2 | abort ;; - "-v" ) + "-h" | "--help" ) + exec scalaenv-help + ;; + "-v" | "--version" ) exec scalaenv---version ;; * ) command_path="$(command -v "scalaenv-${command}" || true)" - if [ -z "${command_path}" ]; then - echo "scalaenv: no such sub-command \"${command}\"" >& 2 - exit 1 - fi + [ -n "$command_path" ] || abort "no such command \`$command\`" + shift 1 - exec "${command_path}" "${@}" + if [ "$1" = --help ]; then + if [[ "$command" == "sh-"* ]]; then + echo "scalaenv help \"$command\"" + else + exec scalaenv-help "$command" + fi + else + exec "$command_path" "$@" + fi ;; esac From 2f6d3775809fdb31b693e2374213b9d1e9b84759 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Tue, 15 Aug 2017 21:02:04 +0900 Subject: [PATCH 15/24] Fix the comment for `scalaenv-uninstall` --- plugins/scala-install/bin/scalaenv-uninstall | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scala-install/bin/scalaenv-uninstall b/plugins/scala-install/bin/scalaenv-uninstall index 1d9ac47..5785081 100755 --- a/plugins/scala-install/bin/scalaenv-uninstall +++ b/plugins/scala-install/bin/scalaenv-uninstall @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Summary: Uninstall a specific Scala version +# Summary: Uninstall a specific Scala/Dotty version # # Usage: scalaenv uninstall [-f|--force] # From 3a8f4ea150dcdedb53e2b22fad822f6104b98f0a Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Tue, 15 Aug 2017 21:21:26 +0900 Subject: [PATCH 16/24] Fix the behavior of outputing usage --- libexec/scalaenv | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libexec/scalaenv b/libexec/scalaenv index e9be6e4..9697b57 100755 --- a/libexec/scalaenv +++ b/libexec/scalaenv @@ -95,7 +95,9 @@ shopt -u nullglob command="${1}" case "${command}" in "" ) - echo -e "$(scalaenv---version)\n$(scalaenv-help)" >& 2 | abort + { scalaenv---version + scalaenv-help + } | abort ;; "-h" | "--help" ) exec scalaenv-help From 902e8f03a14a9c995787536f1f9245c02627f906 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 06:46:53 +0900 Subject: [PATCH 17/24] Add completions for scalaenv-install --- plugins/scala-install/bin/scalaenv-install | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index 87f9572..e7d1c5e 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -25,6 +25,15 @@ if [ -z "${READLINK}" ]; then exit 1 fi +# Provide scalaenv completions +if [ "$1" = "--complete" ]; then + echo --list + echo --force + echo --help + echo --version + exit 1 +fi + usage () { scalaenv-help install 2>/dev/null [ -z "$1" ] || exit "$1" @@ -48,7 +57,6 @@ abs_dirname() { cd "${cwd}" } - unset FORCE unset VERSION From 42028f4c685341ad82716ddd691ea8e47c565c5d Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 08:57:40 +0900 Subject: [PATCH 18/24] Implement scala-build --- plugins/scala-install/bin/scala-build | 136 ++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 plugins/scala-install/bin/scala-build diff --git a/plugins/scala-install/bin/scala-build b/plugins/scala-install/bin/scala-build new file mode 100755 index 0000000..b4faed5 --- /dev/null +++ b/plugins/scala-install/bin/scala-build @@ -0,0 +1,136 @@ +#!/usr/bin/env bash +# +# Usage: scala-build [-kpv] +# scala-build --definitions +# scala-build --version +# +# --definitions List all built-in definitions +# --version Show version of python-build +# -g/--debug Build a debug version +# + +SCALA_BUILD_VERSION="20170816" + +OLDIFS="$IFS" + +set -E +exec 3<&2 # preserve original stderr at fd 3 + +SCALA_BUILD_DEFINITIONS="${SCALAENV_ROOT}"/plugins/scala-install/share + +set -E +exec 3<&2 # preserve original stderr at fd 3 + +lib() { + parse_options() { + OPTIONS=() + ARGUMENTS=() + local arg option index + + for arg in "$@"; do + if [ "${arg:0:1}" = "-" ]; then + if [ "${arg:1:1}" = "-" ]; then + OPTIONS[${#OPTIONS[*]}]="${arg:2}" + else + index=1 + while option="${arg:$index:1}"; do + [ -n "$option" ] || break + OPTIONS[${#OPTIONS[*]}]="$option" + index=$(($index+1)) + done + fi + else + ARGUMENTS[${#ARGUMENTS[*]}]="$arg" + fi + done + } + + if [ "$1" == "--$FUNCNAME" ]; then + declare -f "$FUNCNAME" + echo "$FUNCNAME \"\$1\";" + exit + fi +} +lib "$1" + +version() { + local git_revision + # Read the revision from git if the remote points to "scala-build" repository + if GIT_DIR="$SCALA_BUILD_INSTALL_PREFIX/../../.git" git remote -v 2>/dev/null | grep -q /pyenv; then + git_revision="$(GIT_DIR="$SCALA_BUILD_INSTALL_PREFIX/../../.git" git describe --tags HEAD 2>/dev/null || true)" + git_revision="${git_revision#v}" + fi + echo "scala-build ${git_revision:-$SCALA_BUILD_VERSION}" +} + +usage() { + sed -ne '/^#/!q;s/.\{1,2\}//;1,2d;p' < "$0" + [ -z "$1" ] || exit "$1" +} + +resolve_link() { + $(type -p greadlink readlink | head -1) "$1" +} + +abs_dirname() { + local cwd="$(pwd)" + local path="$1" + + while [ -n "$path" ]; do + cd "${path%/*}" + local name="${path##*/}" + path="$(resolve_link "$name" || true)" + done + + pwd + cd "$cwd" +} + +list_definitions() { + { [ -d "$SCALA_BUILD_DEFINITIONS" ] && \ + find "$SCALA_BUILD_DEFINITIONS" -maxdepth 1 -type f -print0 | xargs -0 -n 1 basename 2>/dev/null + } | sort_versions | uniq +} + +sort_versions() { + sed 'h; s/[+-]/./g; s/.p\([[:digit:]]\)/.z\1/; s/$/.z/; G; s/\n/ /' | \ + LC_ALL=C sort -t. -k 1,1 -k 2,2n -k 3,3n -k 4,4n -k 5,5n | awk '{print $2}' +} + +parse_options "$@" +for option in "${OPTIONS[@]}"; do + case "$option" in + "h" | "help" ) + version + echo + usage 0 + ;; + "definitions" ) + list_definitions + exit 0 + ;; + "version" ) + version + exit 0 + ;; + esac +done + +[ "${#ARGUMENTS[@]}" -eq 2 ] || usage 1 >&2 + +DEFINITION_PATH="${ARGUMENTS[0]}" +if [ -z "$DEFINITION_PATH" ]; then + usage 1 >&2 +elif [ ! -f "$DEFINITION_PATH" ]; then + for DEFINITION_DIR in "${SCALA_BUILD_DEFINITIONS[@]}"; do + if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then + DEFINITION_PATH="${DEFINITION_DIR}/${DEFINITION_PATH}" + break + fi + done + + if [ ! -f "$DEFINITION_PATH" ]; then + echo "scala-build: definition not found: ${DEFINITION_PATH}" >&2 + exit 2 + fi +fi From 4ca9bc159223daecf27ac1063718df1d97fd8f4c Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 08:57:55 +0900 Subject: [PATCH 19/24] Enable completion for installation of available versions --- plugins/scala-install/bin/scalaenv-install | 95 ++++++++++++---------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-install b/plugins/scala-install/bin/scalaenv-install index e7d1c5e..958e1ed 100755 --- a/plugins/scala-install/bin/scalaenv-install +++ b/plugins/scala-install/bin/scalaenv-install @@ -14,6 +14,8 @@ set -e test -n "${SCALAENV_DEBUG}" && set -x +export SCALA_BUILD_DEFINITIONS="${SCALAENV_ROOT}/plugins/scala-install/share" + if [ -z ${SCALAENV_ROOT} ]; then echo "\${SCALAENV_ROOT} is not defined." >& 2 exit 1 @@ -31,72 +33,79 @@ if [ "$1" = "--complete" ]; then echo --force echo --help echo --version - exit 1 + exec scala-build --definitions fi -usage () { - scalaenv-help install 2>/dev/null - [ -z "$1" ] || exit "$1" -} +# Load shared library functions +eval "$(scala-build --lib)" resolve_link() { - ${READLINK} "${1}" + $(type -p greadlink readlink | head -1) "$1" } abs_dirname() { local cwd="$(pwd)" - local path="${1}" + local path="$1" - while [ -n "${path}" ]; do + while [ -n "$path" ]; do cd "${path%/*}" local name="${path##*/}" - path="$(resolve_link "${name}" || true)" + path="$(resolve_link "$name" || true)" done pwd - cd "${cwd}" + cd "$cwd" +} + +usage () { + scalaenv-help install 2>/dev/null + [ -z "$1" ] || exit "$1" +} + +definitions() { + local query="$1" + scala-build --definitions | $(type -p ggrep grep | head -1) -F "$query" || true +} + +indent() { + sed 's/^/ /' } unset FORCE unset VERSION -for OPT in "$@"; do - case "$OPT" in - '-h' | '--help' ) - usage 0 - ;; - '-l' | '--list' ) - echo "All available versions:" - ls -1 $(abs_dirname $0)/../share - exit 0 - ;; - '-f' | '--force' ) - FORCE=true - shift 1 - ;; - '-' | '--' ) - shift 1 - param+=( "$@" ) - break - ;; - -*) - echo "$(basename $0): illegal option -- '$(echo $1 | sed 's/^-*//')'" 1>&2 - exit 1 - ;; - *) - if [[ ! -z "$1" ]] && [[ ! "$1" =~ ^-+ ]]; then - param+=( "$1" ) - shift 1 - fi - ;; +parse_options "$@" +for option in "${OPTIONS[@]}"; do + case "$option" in + "h" | "help" ) + usage 0 + ;; + "l" | "list" ) + echo "Available versions:" + definitions | indent + exit + ;; + "f" | "force" ) + FORCE=true + ;; + "version" ) + exec scala-build --version + ;; + * ) + usage 1 >&2 + ;; esac done -if [ -z $param ]; then - usage 1 -fi +[ "${#ARGUMENTS[@]}" -le 1 ] || usage 1 >&2 + +DEFINITION="${ARGUMENTS[0]}" +[ -n "$DEFINITION" ] || DEFINITION="$(pyenv-local 2>/dev/null || true)" +[ -n "$DEFINITION" ] || usage 1 >&2 + +[ -n "$VERSION" ] || VERSION="${DEFINITION##*/}" +[ -n "$DEBUG" ] && VERSION="${VERSION}-debug" -VERSION=${param} SHA1SUM=$(type -p sha1sum shasum | head -1) if [ -z "${SHA1SUM}" ]; then From 8f662c6ce3131ca710535689650ecba860454e26 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 09:36:50 +0900 Subject: [PATCH 20/24] Fix scalaenv-versions --- libexec/scalaenv-versions | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/libexec/scalaenv-versions b/libexec/scalaenv-versions index e81a909..cf83605 100755 --- a/libexec/scalaenv-versions +++ b/libexec/scalaenv-versions @@ -7,7 +7,22 @@ set -e test -n "${SCALAENV_DEBUG}" && set -x -if [ "${1}" = "--bare" ]; then +unset bare +# Provide scalaenv completions +for arg; do + case "$arg" in + --complete ) + echo --bare + exit ;; + --bare ) bare=1 ;; + * ) + scalaenv-help --usage versions >&2 + exit 1 + ;; + esac +done + +if [ -n "$bare" ]; then hit_prefix="" miss_prefix="" current_version="" @@ -37,4 +52,3 @@ for path in "${SCALAENV_ROOT}/versions/"*; do print_version "${path##*/}" fi done - From bc07dbb1fdde4dc7471f20176e4e58db13c4a045 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 09:37:09 +0900 Subject: [PATCH 21/24] Add completions for scalaenv-uninstall --- plugins/scala-install/bin/scalaenv-uninstall | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/scala-install/bin/scalaenv-uninstall b/plugins/scala-install/bin/scalaenv-uninstall index 5785081..db95617 100755 --- a/plugins/scala-install/bin/scalaenv-uninstall +++ b/plugins/scala-install/bin/scalaenv-uninstall @@ -10,8 +10,10 @@ # set -e +# Provide scalaenv completions if [ "$1" = "--complete" ]; then echo --force + echo --help exec scalaenv versions --bare fi @@ -44,11 +46,11 @@ PREFIX="${SCALAENV_ROOT}/versions/${VERSION_NAME}" if [ -z "$FORCE" ]; then if [ ! -d "$PREFIX" ]; then - echo "scalaenv: version \`$VERSION_NAME\` not installed" >&2 + echo "scalaenv: version \`$VERSION_NAME' not installed" >&2 exit 1 fi - read -p "scalaenv: remove $PREFIX? " + read -p "scalaenv: remove $PREFIX? [yN] " case "$REPLY" in y* | Y* ) ;; * ) exit 1 ;; From 4a60dadf4f2b516c2a347e119c161921ad40e17a Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Wed, 16 Aug 2017 09:57:50 +0900 Subject: [PATCH 22/24] Fix typo --- libexec/scalaenv-init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libexec/scalaenv-init b/libexec/scalaenv-init index 93375e2..92c148d 100755 --- a/libexec/scalaenv-init +++ b/libexec/scalaenv-init @@ -125,7 +125,7 @@ EOS ;; ksh ) cat < Date: Wed, 16 Aug 2017 21:22:19 +0900 Subject: [PATCH 23/24] Fix README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d40a95d..08fd295 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,10 @@ Please refer to [**sbtenv**](https://github.com/sbtenv/sbtenv) in the case of us ~~~ sh $ scalaenv install -l All available versions: - scala-2.10.1 - scala-2.10.2 - scala-2.10.3 - ... + scala-2.10.1 + scala-2.10.2 + scala-2.10.3 + ... ~~~ If want to install manually, please download scala archive and extract into `~/.scalaenv/versions/`. @@ -66,9 +66,9 @@ Please refer to [**sbtenv**](https://github.com/sbtenv/sbtenv) in the case of us $ tar xf scala-2.10.3.tgz -C ~/.scalaenv/versions/ ~~~ -#### Homebrew on Mac OSX +#### Homebrew on macOS -As an alternative to installation via GitHub checkout, you can install scalaenv using the [Homebrew package manager](http://brew.sh) on Mac OSX. +As an alternative to installation via GitHub checkout, you can install scalaenv using the [Homebrew package manager](http://brew.sh) on macOS. ~~~ sh $ brew update From 72c885b63ac87e48d4f3f62bef44b9da35912ca1 Mon Sep 17 00:00:00 2001 From: Yusuke Izawa Date: Thu, 17 Aug 2017 19:10:43 +0900 Subject: [PATCH 24/24] 0.0.15 --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 08fd295..8e26ec4 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,15 @@ $ brew upgrade --fetch-HEAD scalaenv ### Version History +**0.0.15** (Aug 17, 2017) + + - Implemented `saclaenv uninstall` + - Enhanced `scalaenv install` + - Added usage for `scalaenv install` + - Added completions for `scalaenv install` + - etc... + - Added new scala archives (**2.12.3** and **2.13.0-M2**) + **0.0.14** (Jul 28, 2017) * Added **dotty-0.2.0-RC1** * Supported for fish shell :tada: