aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/linguist/samples.json391
-rwxr-xr-xsamples/Shell/sbt.script!432
2 files changed, 758 insertions, 65 deletions
diff --git a/lib/linguist/samples.json b/lib/linguist/samples.json
index b39aa80..0fec811 100644
--- a/lib/linguist/samples.json
+++ b/lib/linguist/samples.json
@@ -257,8 +257,8 @@
".gemrc"
]
},
- "tokens_total": 269398,
- "languages_total": 274,
+ "tokens_total": 270906,
+ "languages_total": 275,
"tokens": {
"Apex": {
"global": 70,
@@ -25170,23 +25170,23 @@
"/": 2
},
"Shell": {
- "SHEBANG#!bash": 5,
- "echo": 20,
+ "SHEBANG#!bash": 6,
+ "echo": 52,
"export": 6,
"PATH": 5,
"pkgname": 1,
"stud": 4,
- "-": 42,
+ "-": 182,
"git": 9,
"pkgver": 1,
"pkgrel": 1,
"pkgdesc": 1,
"arch": 1,
- "(": 16,
+ "(": 89,
"i686": 1,
"x86_64": 1,
- ")": 19,
- "url": 1,
+ ")": 134,
+ "url": 4,
"license": 1,
"depends": 1,
"libev": 1,
@@ -25198,26 +25198,26 @@
"https": 1,
"//github.com/bumptech/stud.git": 1,
"_gitname": 1,
- "build": 1,
- "{": 5,
+ "build": 2,
+ "{": 49,
"cd": 4,
"msg": 4,
- "if": 15,
- "[": 24,
- "d": 4,
- "]": 24,
- ";": 16,
- "then": 17,
- "&&": 4,
+ "if": 27,
+ "[": 70,
+ "d": 7,
+ "]": 70,
+ ";": 115,
+ "then": 29,
+ "&&": 54,
"pull": 3,
"origin": 1,
- "else": 6,
+ "else": 10,
"clone": 2,
- "fi": 15,
+ "fi": 24,
"rm": 2,
"rf": 1,
"make": 2,
- "}": 5,
+ "}": 47,
"package": 1,
"PREFIX": 1,
"/usr": 1,
@@ -25225,21 +25225,21 @@
"install": 2,
"Dm755": 1,
"init.stud": 1,
- "mkdir": 1,
- "p": 1,
- "#": 9,
+ "mkdir": 2,
+ "p": 2,
+ "#": 11,
"Bash": 1,
"script": 1,
- "to": 4,
- "the": 3,
+ "to": 15,
+ "the": 9,
"dotfile": 1,
- "repository": 2,
+ "repository": 3,
"does": 1,
- "a": 2,
+ "a": 7,
"lot": 1,
- "of": 1,
+ "of": 2,
"fun": 2,
- "stuff": 2,
+ "stuff": 3,
"like": 1,
"turning": 1,
"normal": 1,
@@ -25248,11 +25248,11 @@
".bashrc": 1,
"into": 1,
"symlinks": 1,
- "this": 1,
+ "this": 4,
"away": 1,
"optionally": 1,
"moving": 1,
- "old": 1,
+ "old": 4,
"files": 1,
"so": 1,
"that": 1,
@@ -25260,7 +25260,7 @@
"can": 1,
"be": 1,
"preserved": 1,
- "setting": 1,
+ "setting": 2,
"up": 1,
"cron": 1,
"job": 1,
@@ -25271,38 +25271,38 @@
"some": 1,
"more": 1,
"shopt": 1,
- "s": 2,
+ "s": 6,
"nocasematch": 1,
"This": 1,
"makes": 1,
"pattern": 1,
"matching": 1,
- "case": 2,
+ "case": 8,
"insensitive": 1,
"POSTFIX": 1,
"URL": 1,
"PUSHURL": 1,
"overwrite": 3,
- "true": 1,
+ "true": 2,
"print_help": 2,
- "e": 2,
- "exit": 7,
- "for": 3,
- "opt": 2,
- "in": 4,
- "@": 1,
- "do": 3,
+ "e": 4,
+ "exit": 9,
+ "for": 5,
+ "opt": 3,
+ "in": 14,
+ "@": 3,
+ "do": 7,
"k": 1,
- "|": 2,
+ "|": 14,
"keep": 1,
- "local": 3,
+ "local": 22,
"false": 2,
- "h": 1,
- "help": 1,
- "esac": 1,
- "done": 3,
- "f": 3,
- ".*": 1,
+ "h": 3,
+ "help": 3,
+ "esac": 6,
+ "done": 7,
+ "f": 11,
+ ".*": 2,
"o": 3,
"continue": 1,
"mv": 1,
@@ -25314,35 +25314,296 @@
".jobs.cron": 1,
"source": 3,
"/.bashrc": 1,
- "set": 2,
- "n": 2,
+ "set": 9,
+ "n": 7,
"x": 1,
- "unset": 3,
+ "unset": 6,
"system": 1,
- "exec": 1,
+ "exec": 3,
"rbenv": 2,
"versions": 1,
"bare": 1,
- "version": 1,
- "z": 3,
- "&": 4,
+ "version": 11,
+ "z": 4,
+ "&": 5,
"prefix": 1,
- "/dev/null": 2,
+ "/dev/null": 6,
"rvm_ignore_rvmrc": 1,
- "declare": 1,
+ "declare": 22,
"rvmrc": 3,
"rvm_rvmrc_files": 3,
"ef": 1,
"+": 1,
"GREP_OPTIONS": 1,
- "grep": 1,
- "printf": 1,
+ "grep": 6,
+ "printf": 4,
"rvm_path": 4,
"UID": 1,
- "elif": 2,
+ "elif": 4,
"rvm_is_not_a_shell_function": 2,
"rvm_path/scripts": 1,
"rvm": 1,
+ "r": 15,
+ "sbt_release_version": 2,
+ "sbt_snapshot_version": 2,
+ "SNAPSHOT": 3,
+ "sbt_jar": 3,
+ "sbt_dir": 2,
+ "sbt_create": 2,
+ "sbt_snapshot": 1,
+ "sbt_launch_dir": 3,
+ "scala_version": 3,
+ "java_home": 1,
+ "sbt_explicit_version": 7,
+ "verbose": 6,
+ "debug": 11,
+ "quiet": 6,
+ "build_props_sbt": 3,
+ "project/build.properties": 9,
+ "versionLine": 2,
+ "sbt.version": 3,
+ "versionString": 3,
+ "versionLine##sbt.version": 1,
+ "update_build_props_sbt": 2,
+ "ver": 5,
+ "return": 3,
+ "perl": 3,
+ "pi": 1,
+ "q": 4,
+ "||": 12,
+ "Updated": 1,
+ "file": 3,
+ "Previous": 1,
+ "value": 1,
+ "was": 1,
+ "sbt_version": 8,
+ "v": 5,
+ "echoerr": 3,
+ "vlog": 1,
+ "dlog": 8,
+ "get_script_path": 2,
+ "path": 11,
+ "L": 1,
+ "target": 1,
+ "readlink": 1,
+ "get_mem_opts": 3,
+ "mem": 4,
+ "perm": 6,
+ "/": 2,
+ "<": 2,
+ "codecache": 1,
+ "die": 2,
+ "make_url": 3,
+ "groupid": 1,
+ "category": 1,
+ "default_jvm_opts": 1,
+ "default_sbt_opts": 1,
+ "default_sbt_mem": 2,
+ "noshare_opts": 1,
+ "sbt_opts_file": 1,
+ "jvm_opts_file": 1,
+ "latest_28": 1,
+ "latest_29": 1,
+ "latest_210": 1,
+ "script_path": 1,
+ "script_dir": 1,
+ "script_name": 2,
+ "java_cmd": 2,
+ "java": 2,
+ "sbt_mem": 5,
+ "residual_args": 4,
+ "java_args": 3,
+ "scalac_args": 4,
+ "sbt_commands": 2,
+ "build_props_scala": 1,
+ "build.scala.versions": 1,
+ "versionLine##build.scala.versions": 1,
+ "%": 3,
+ "execRunner": 2,
+ "arg": 3,
+ "sbt_groupid": 3,
+ "*": 11,
+ "org.scala": 4,
+ "tools.sbt": 3,
+ "sbt": 18,
+ "sbt_artifactory_list": 2,
+ "version0": 2,
+ "curl": 4,
+ "list": 1,
+ "only": 2,
+ "F": 1,
+ "pe": 1,
+ "make_release_url": 2,
+ "releases": 1,
+ "make_snapshot_url": 2,
+ "snapshots": 1,
+ "head": 1,
+ "jar_url": 1,
+ "jar_file": 1,
+ "download_url": 2,
+ "jar": 3,
+ "dirname": 1,
+ "which": 4,
+ "fail": 1,
+ "silent": 1,
+ "output": 1,
+ "wget": 2,
+ "O": 1,
+ "acquire_sbt_jar": 1,
+ "sbt_url": 1,
+ "usage": 2,
+ "cat": 3,
+ "<<": 2,
+ "EOM": 3,
+ "Usage": 1,
+ "options": 4,
+ "print": 1,
+ "message": 1,
+ "runner": 1,
+ "is": 5,
+ "chattier": 1,
+ "log": 2,
+ "level": 2,
+ "Debug": 1,
+ "Error": 1,
+ "no": 9,
+ "colors": 2,
+ "disable": 1,
+ "ANSI": 1,
+ "color": 1,
+ "codes": 1,
+ "create": 2,
+ "start": 1,
+ "even": 1,
+ "current": 1,
+ "directory": 3,
+ "contains": 2,
+ "project": 1,
+ "dir": 3,
+ "<path>": 3,
+ "global": 1,
+ "settings/plugins": 1,
+ "default": 4,
+ "/.sbt/": 1,
+ "<version>": 1,
+ "boot": 3,
+ "shared": 1,
+ "/.sbt/boot": 1,
+ "series": 1,
+ "ivy": 2,
+ "Ivy": 1,
+ "/.ivy2": 1,
+ "<integer>": 1,
+ "memory": 1,
+ "share": 2,
+ "use": 1,
+ "all": 1,
+ "caches": 1,
+ "sharing": 1,
+ "offline": 3,
+ "put": 1,
+ "mode": 2,
+ "jvm": 2,
+ "<port>": 1,
+ "Turn": 1,
+ "on": 2,
+ "JVM": 1,
+ "debugging": 1,
+ "open": 1,
+ "at": 1,
+ "given": 2,
+ "port.": 1,
+ "batch": 2,
+ "Disable": 1,
+ "interactive": 1,
+ "The": 1,
+ "way": 1,
+ "accomplish": 1,
+ "pre": 1,
+ "there": 2,
+ "build.properties": 1,
+ "an": 1,
+ "property": 1,
+ "update": 1,
+ "disk.": 1,
+ "That": 1,
+ "scalacOptions": 3,
+ "S": 2,
+ "stripped": 1,
+ "In": 1,
+ "duplicated": 1,
+ "or": 1,
+ "conflicting": 1,
+ "order": 1,
+ "above": 1,
+ "shows": 1,
+ "precedence": 1,
+ "JAVA_OPTS": 1,
+ "lowest": 1,
+ "command": 1,
+ "line": 1,
+ "highest.": 1,
+ "addJava": 9,
+ "addSbt": 12,
+ "addScalac": 2,
+ "addResidual": 2,
+ "addResolver": 1,
+ "addDebugger": 2,
+ "get_jvm_opts": 2,
+ "process_args": 2,
+ "require_arg": 12,
+ "type": 1,
+ "while": 2,
+ "gt": 1,
+ "shift": 28,
+ "integer": 1,
+ "inc": 1,
+ "port": 1,
+ "snapshot": 1,
+ "launch": 1,
+ "scala": 3,
+ "home": 2,
+ "D*": 1,
+ "J*": 1,
+ "S*": 1,
+ "sbtargs": 3,
+ "IFS": 1,
+ "read": 1,
+ "<\"$sbt_opts_file\">": 1,
+ "process": 1,
+ "combined": 1,
+ "args": 2,
+ "reset": 1,
+ "residuals": 1,
+ "argumentCount=": 1,
+ "we": 1,
+ "were": 1,
+ "any": 1,
+ "opts": 1,
+ "eq": 1,
+ "0": 1,
+ "ThisBuild": 1,
+ "Update": 1,
+ "properties": 1,
+ "disk": 1,
+ "explicit": 1,
+ "gives": 1,
+ "us": 1,
+ "choice": 1,
+ "Detected": 1,
+ "Overriding": 1,
+ "alert": 1,
+ "them": 1,
+ "here": 1,
+ "argumentCount": 1,
+ "./build.sbt": 1,
+ "./project": 1,
+ "pwd": 1,
+ "doesn": 1,
+ "t": 1,
+ "understand": 1,
+ "iflast": 1,
+ "#residual_args": 1,
"SHEBANG#!sh": 2,
"SHEBANG#!zsh": 2
},
@@ -27452,7 +27713,7 @@
"Scheme": 3478,
"Scilab": 69,
"SCSS": 39,
- "Shell": 500,
+ "Shell": 2008,
"Standard ML": 243,
"SuperCollider": 135,
"Tea": 3,
@@ -27522,7 +27783,7 @@
"Scheme": 1,
"Scilab": 3,
"SCSS": 1,
- "Shell": 15,
+ "Shell": 16,
"Standard ML": 2,
"SuperCollider": 1,
"Tea": 1,
@@ -27537,5 +27798,5 @@
"XSLT": 1,
"YAML": 1
},
- "md5": "ca1d189ca79aa9c52370da78f2c2b4dd"
+ "md5": "73937d71c79ba8a2f9e085431017cb2d"
} \ No newline at end of file
diff --git a/samples/Shell/sbt.script! b/samples/Shell/sbt.script!
new file mode 100755
index 0000000..52de652
--- /dev/null
+++ b/samples/Shell/sbt.script!
@@ -0,0 +1,432 @@
+#!/usr/bin/env bash
+#
+# A more capable sbt runner, coincidentally also called sbt.
+# Author: Paul Phillips <paulp@typesafe.com>
+
+# todo - make this dynamic
+declare -r sbt_release_version=0.11.3
+declare -r sbt_snapshot_version=0.13.0-SNAPSHOT
+
+unset sbt_jar sbt_dir sbt_create sbt_snapshot sbt_launch_dir
+unset scala_version java_home sbt_explicit_version
+unset verbose debug quiet
+
+build_props_sbt () {
+ if [[ -f project/build.properties ]]; then
+ versionLine=$(grep ^sbt.version project/build.properties)
+ versionString=${versionLine##sbt.version=}
+ echo "$versionString"
+ fi
+}
+
+update_build_props_sbt () {
+ local ver="$1"
+ local old=$(build_props_sbt)
+
+ if [[ $ver == $old ]]; then
+ return
+ elif [[ -f project/build.properties ]]; then
+ perl -pi -e "s/^sbt\.version=.*\$/sbt.version=${ver}/" project/build.properties
+ grep -q '^sbt.version=' project/build.properties || echo "sbt.version=${ver}" >> project/build.properties
+
+ echo !!!
+ echo !!! Updated file project/build.properties setting sbt.version to: $ver
+ echo !!! Previous value was: $old
+ echo !!!
+ fi
+}
+
+sbt_version () {
+ if [[ -n $sbt_explicit_version ]]; then
+ echo $sbt_explicit_version
+ else
+ local v=$(build_props_sbt)
+ if [[ -n $v ]]; then
+ echo $v
+ else
+ echo $sbt_release_version
+ fi
+ fi
+}
+
+echoerr () {
+ echo 1>&2 "$@"
+}
+vlog () {
+ [[ $verbose || $debug ]] && echoerr "$@"
+}
+dlog () {
+ [[ $debug ]] && echoerr "$@"
+}
+
+# this seems to cover the bases on OSX, and someone will
+# have to tell me about the others.
+get_script_path () {
+ local path="$1"
+ [[ -L "$path" ]] || { echo "$path" ; return; }
+
+ local target=$(readlink "$path")
+ if [[ "${target:0:1}" == "/" ]]; then
+ echo "$target"
+ else
+ echo "$(dirname $path)/$target"
+ fi
+}
+
+# a ham-fisted attempt to move some memory settings in concert
+# so they need not be dicked around with individually.
+get_mem_opts () {
+ local mem=${1:-1536}
+ local perm=$(( $mem / 4 ))
+ (( $perm > 256 )) || perm=256
+ (( $perm < 1024 )) || perm=1024
+ local codecache=$(( $perm / 2 ))
+
+ echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
+}
+
+die() {
+ echo "Aborting: $@"
+ exit 1
+}
+
+make_url () {
+ groupid="$1"
+ category="$2"
+ version="$3"
+
+ echo "http://typesafe.artifactoryonline.com/typesafe/ivy-$category/$groupid/sbt-launch/$version/sbt-launch.jar"
+}
+
+declare -r default_jvm_opts="-Dfile.encoding=UTF8"
+declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled"
+declare -r default_sbt_mem=1536
+declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
+declare -r sbt_opts_file=".sbtopts"
+declare -r jvm_opts_file=".jvmopts"
+declare -r latest_28="2.8.2"
+declare -r latest_29="2.9.1"
+declare -r latest_210="2.10.0-SNAPSHOT"
+
+declare -r script_path=$(get_script_path "$BASH_SOURCE")
+declare -r script_dir="$(dirname $script_path)"
+declare -r script_name="$(basename $script_path)"
+
+# some non-read-onlies set with defaults
+declare java_cmd=java
+declare sbt_launch_dir="$script_dir/.lib"
+declare sbt_mem=$default_sbt_mem
+
+# pull -J and -D options to give to java.
+declare -a residual_args
+declare -a java_args
+declare -a scalac_args
+declare -a sbt_commands
+
+build_props_scala () {
+ if [[ -f project/build.properties ]]; then
+ versionLine=$(grep ^build.scala.versions project/build.properties)
+ versionString=${versionLine##build.scala.versions=}
+ echo ${versionString%% .*}
+ fi
+}
+
+execRunner () {
+ # print the arguments one to a line, quoting any containing spaces
+ [[ $verbose || $debug ]] && echo "# Executing command line:" && {
+ for arg; do
+ if printf "%s\n" "$arg" | grep -q ' '; then
+ printf "\"%s\"\n" "$arg"
+ else
+ printf "%s\n" "$arg"
+ fi
+ done
+ echo ""
+ }
+
+ exec "$@"
+}
+
+sbt_groupid () {
+ case $(sbt_version) in
+ 0.7.*) echo org.scala-tools.sbt ;;
+ 0.10.*) echo org.scala-tools.sbt ;;
+ 0.11.[12]) echo org.scala-tools.sbt ;;
+ *) echo org.scala-sbt ;;
+ esac
+}
+
+sbt_artifactory_list () {
+ local version0=$(sbt_version)
+ local version=${version0%-SNAPSHOT}
+ local url="http://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/$(sbt_groupid)/sbt-launch/"
+ dlog "Looking for snapshot list at: $url "
+
+ curl -s --list-only "$url" | \
+ grep -F $version | \
+ perl -e 'print reverse <>' | \
+ perl -pe 's#^<a href="([^"/]+).*#$1#;'
+}
+
+make_release_url () {
+ make_url $(sbt_groupid) releases $(sbt_version)
+}
+
+# argument is e.g. 0.13.0-SNAPSHOT
+# finds the actual version (with the build id) at artifactory
+make_snapshot_url () {
+ for ver in $(sbt_artifactory_list); do
+ local url=$(make_url $(sbt_groupid) snapshots $ver)
+ dlog "Testing $url"
+ curl -s --head "$url" >/dev/null
+ dlog "curl returned: $?"
+ echo "$url"
+ return
+ done
+}
+
+jar_url () {
+ case $(sbt_version) in
+ 0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;;
+ *-SNAPSHOT) make_snapshot_url ;;
+ *) make_release_url ;;
+ esac
+}
+
+jar_file () {
+ echo "$sbt_launch_dir/$1/sbt-launch.jar"
+}
+
+download_url () {
+ local url="$1"
+ local jar="$2"
+
+ echo "Downloading sbt launcher $(sbt_version):"
+ echo " From $url"
+ echo " To $jar"
+
+ mkdir -p $(dirname "$jar") && {
+ if which curl >/dev/null; then
+ curl --fail --silent "$url" --output "$jar"
+ elif which wget >/dev/null; then
+ wget --quiet -O "$jar" "$url"
+ fi
+ } && [[ -f "$jar" ]]
+}
+
+acquire_sbt_jar () {
+ sbt_url="$(jar_url)"
+ sbt_jar="$(jar_file $(sbt_version))"
+
+ [[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar"
+}
+
+usage () {
+ cat <<EOM
+Usage: $script_name [options]
+
+ -h | -help print this message
+ -v | -verbose this runner is chattier
+ -d | -debug set sbt log level to Debug
+ -q | -quiet set sbt log level to Error
+ -no-colors disable ANSI color codes
+ -sbt-create start sbt even if current directory contains no sbt project
+ -sbt-dir <path> path to global settings/plugins directory (default: ~/.sbt/<version>)
+ -sbt-boot <path> path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
+ -ivy <path> path to local Ivy repository (default: ~/.ivy2)
+ -mem <integer> set memory options (default: $sbt_mem, which is
+ $(get_mem_opts $sbt_mem) )
+ -no-share use all local caches; no sharing
+ -offline put sbt in offline mode
+ -jvm-debug <port> Turn on JVM debugging, open at the given port.
+ -batch Disable interactive mode
+
+ # sbt version (default: from project/build.properties if present, else latest release)
+ !!! The only way to accomplish this pre-0.12.0 if there is a build.properties file which
+ !!! contains an sbt.version property is to update the file on disk. That's what this does.
+ -sbt-version <version> use the specified version of sbt
+ -sbt-jar <path> use the specified jar as the sbt launcher
+ -sbt-snapshot use a snapshot version of sbt
+ -sbt-launch-dir <path> directory to hold sbt launchers (default: $sbt_launch_dir)
+
+ # scala version (default: as chosen by sbt)
+ -28 use $latest_28
+ -29 use $latest_29
+ -210 use $latest_210
+ -scala-home <path> use the scala build at the specified directory
+ -scala-version <version> use the specified version of scala
+
+ # java version (default: java from PATH, currently $(java -version |& grep version))
+ -java-home <path> alternate JAVA_HOME
+
+ # jvm options and output control
+ JAVA_OPTS environment variable holding jvm args, if unset uses "$default_jvm_opts"
+ SBT_OPTS environment variable holding jvm args, if unset uses "$default_sbt_opts"
+ .jvmopts if file is in sbt root, it is prepended to the args given to the jvm
+ .sbtopts if file is in sbt root, it is prepended to the args given to **sbt**
+ -Dkey=val pass -Dkey=val directly to the jvm
+ -J-X pass option -X directly to the jvm (-J is stripped)
+ -S-X add -X to sbt's scalacOptions (-S is stripped)
+
+In the case of duplicated or conflicting options, the order above
+shows precedence: JAVA_OPTS lowest, command line options highest.
+EOM
+}
+
+addJava () {
+ dlog "[addJava] arg = '$1'"
+ java_args=( "${java_args[@]}" "$1" )
+}
+addSbt () {
+ dlog "[addSbt] arg = '$1'"
+ sbt_commands=( "${sbt_commands[@]}" "$1" )
+}
+addScalac () {
+ dlog "[addScalac] arg = '$1'"
+ scalac_args=( "${scalac_args[@]}" "$1" )
+}
+addResidual () {
+ dlog "[residual] arg = '$1'"
+ residual_args=( "${residual_args[@]}" "$1" )
+}
+addResolver () {
+ addSbt "set resolvers in ThisBuild += $1"
+}
+addDebugger () {
+ addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
+}
+get_jvm_opts () {
+ # echo "${JAVA_OPTS:-$default_jvm_opts}"
+ # echo "${SBT_OPTS:-$default_sbt_opts}"
+
+ [[ -f "$jvm_opts_file" ]] && cat "$jvm_opts_file"
+}
+
+process_args ()
+{
+ require_arg () {
+ local type="$1"
+ local opt="$2"
+ local arg="$3"
+
+ if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then
+ die "$opt requires <$type> argument"
+ fi
+ }
+ while [[ $# -gt 0 ]]; do
+ case "$1" in
+ -h|-help) usage; exit 1 ;;
+ -v|-verbose) verbose=1 && shift ;;
+ -d|-debug) debug=1 && shift ;;
+ -q|-quiet) quiet=1 && shift ;;
+
+ -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;;
+ -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;;
+ -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;;
+ -no-share) addJava "$noshare_opts" && shift ;;
+ -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;;
+ -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;;
+ -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;;
+ -offline) addSbt "set offline := true" && shift ;;
+ -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;;
+ -batch) exec </dev/null && shift ;;
+
+ -sbt-create) sbt_create=true && shift ;;
+ -sbt-snapshot) sbt_explicit_version=$sbt_snapshot_version && shift ;;
+ -sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
+ -sbt-version) require_arg version "$1" "$2" && sbt_explicit_version="$2" && shift 2 ;;
+-sbt-launch-dir) require_arg path "$1" "$2" && sbt_launch_dir="$2" && shift 2 ;;
+ -scala-version) require_arg version "$1" "$2" && addSbt "set scalaVersion := \"$2\"" && shift 2 ;;
+ -scala-home) require_arg path "$1" "$2" && addSbt "set scalaHome in ThisBuild := Some(file(\"$2\"))" && shift 2 ;;
+ -java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;;
+
+ -D*) addJava "$1" && shift ;;
+ -J*) addJava "${1:2}" && shift ;;
+ -S*) addScalac "${1:2}" && shift ;;
+ -28) addSbt "++ $latest_28" && shift ;;
+ -29) addSbt "++ $latest_29" && shift ;;
+ -210) addSbt "++ $latest_210" && shift ;;
+
+ *) addResidual "$1" && shift ;;
+ esac
+ done
+
+ [[ $debug ]] && {
+ case $(sbt_version) in
+ 0.7.*) addSbt "debug" ;;
+ *) addSbt "set logLevel in Global := Level.Debug" ;;
+ esac
+ }
+ [[ $quiet ]] && {
+ case $(sbt_version) in
+ 0.7.*) ;;
+ *) addSbt "set logLevel in Global := Level.Error" ;;
+ esac
+ }
+}
+
+# if .sbtopts exists, prepend its contents to $@ so it can be processed by this runner
+[[ -f "$sbt_opts_file" ]] && {
+ sbtargs=()
+ while IFS= read -r arg; do
+ sbtargs=( "${sbtargs[@]}" "$arg" )
+ done <"$sbt_opts_file"
+
+ set -- "${sbtargs[@]}" "$@"
+}
+
+# process the combined args, then reset "$@" to the residuals
+process_args "$@"
+set -- "${residual_args[@]}"
+argumentCount=$#
+
+# set scalacOptions if we were given any -S opts
+[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[@]}\""
+
+# Update build.properties no disk to set explicit version - sbt gives us no choice
+[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version"
+echo "Detected sbt version $(sbt_version)"
+
+[[ -n "$scala_version" ]] && echo "Overriding scala version to $scala_version"
+
+# no args - alert them there's stuff in here
+(( $argumentCount > 0 )) || echo "Starting $script_name: invoke with -help for other options"
+
+# verify this is an sbt dir or -create was given
+[[ -f ./build.sbt || -d ./project || -n "$sbt_create" ]] || {
+ cat <<EOM
+$(pwd) doesn't appear to be an sbt project.
+If you want to start sbt anyway, run:
+ $0 -sbt-create
+
+EOM
+ exit 1
+}
+
+# pick up completion if present; todo
+[[ -f .sbt_completion.sh ]] && source .sbt_completion.sh
+
+# no jar? download it.
+[[ -f "$sbt_jar" ]] || acquire_sbt_jar || {
+ # still no jar? uh-oh.
+ echo "Download failed. Obtain the jar manually and place it at $sbt_jar"
+ exit 1
+}
+
+[[ -n "$sbt_dir" ]] || {
+ sbt_dir=~/.sbt/$(sbt_version)
+ addJava "-Dsbt.global.base=$sbt_dir"
+ echo "Using $sbt_dir as sbt dir, -sbt-dir to override."
+}
+
+# since sbt 0.7 doesn't understand iflast
+(( ${#residual_args[@]} == 0 )) && residual_args=( "shell" )
+
+# run sbt
+execRunner "$java_cmd" \
+ $(get_mem_opts $sbt_mem) \
+ $(get_jvm_opts) \
+ ${java_args[@]} \
+ -jar "$sbt_jar" \
+ "${sbt_commands[@]}" \
+ "${residual_args[@]}"