diff --git a/lib/linguist/samples.json b/lib/linguist/samples.json index b39aa80f..0fec811f 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, + "": 3, + "global": 1, + "settings/plugins": 1, + "default": 4, + "/.sbt/": 1, + "": 1, + "boot": 3, + "shared": 1, + "/.sbt/boot": 1, + "series": 1, + "ivy": 2, + "Ivy": 1, + "/.ivy2": 1, + "": 1, + "memory": 1, + "share": 2, + "use": 1, + "all": 1, + "caches": 1, + "sharing": 1, + "offline": 3, + "put": 1, + "mode": 2, + "jvm": 2, + "": 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 00000000..52de6527 --- /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 + +# 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#^/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 < path to global settings/plugins directory (default: ~/.sbt/) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem 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 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 use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-snapshot use a snapshot version of sbt + -sbt-launch-dir 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 use the scala build at the specified directory + -scala-version use the specified version of scala + + # java version (default: java from PATH, currently $(java -version |& grep version)) + -java-home 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 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 <