Skip to content

Commit 5a4af29

Browse files
committed
fix for #156
1 parent d72578e commit 5a4af29

File tree

2 files changed

+92
-40
lines changed

2 files changed

+92
-40
lines changed

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name := "swagger-codegen"
77

88
version := "2.0.13"
99

10-
scalaVersion := "2.10.0"
10+
scalaVersion := "2.10.1"
1111

1212
crossVersion := CrossVersion.full
1313

@@ -22,7 +22,7 @@ libraryDependencies ++= Seq(
2222
"io.backchat.inflector" %% "scala-inflector" % "1.3.5",
2323
"commons-io" % "commons-io" % "2.3",
2424
"ch.qos.logback" % "logback-classic" % "1.0.13" % "provided",
25-
"org.rogach" %% "scallop" % "0.9.4",
25+
"org.rogach" %% "scallop" % "0.8.1",
2626
"junit" % "junit" % "4.11" % "test",
2727
"org.scalatest" %% "scalatest" % "1.9.1" % "test"
2828
)

sbt

Lines changed: 90 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,32 @@
44
# Author: Paul Phillips <[email protected]>
55

66
# todo - make this dynamic
7-
declare -r sbt_release_version=0.12.2
7+
declare -r sbt_release_version=0.12.4
8+
declare -r sbt_beta_version=0.13.0-RC4
89
declare -r sbt_snapshot_version=0.13.0-SNAPSHOT
910

1011
declare sbt_jar sbt_dir sbt_create sbt_snapshot sbt_launch_dir
1112
declare scala_version java_home sbt_explicit_version
1213
declare verbose debug quiet noshare batch trace_level log_level
14+
declare sbt_saved_stty
1315

16+
echoerr () { [[ -z $quiet ]] && echo "$@" >&2; }
17+
vlog () { [[ -n "$verbose$debug" ]] && echoerr "$@"; }
18+
dlog () { [[ -n $debug ]] && echoerr "$@"; }
19+
20+
# we'd like these set before we get around to properly processing arguments
1421
for arg in "$@"; do
1522
case $arg in
16-
-q|-quiet) quiet=true ;;
17-
*) ;;
23+
-q|-quiet) quiet=true ;;
24+
-d|-debug) debug=true ;;
25+
-v|-verbose) verbose=true ;;
26+
*) ;;
1827
esac
1928
done
2029

2130
build_props_sbt () {
2231
if [[ -r project/build.properties ]]; then
23-
versionLine=$(grep ^sbt.version project/build.properties)
32+
versionLine=$(grep ^sbt.version project/build.properties | tr -d '\r')
2433
versionString=${versionLine##sbt.version=}
2534
echo "$versionString"
2635
fi
@@ -36,10 +45,10 @@ update_build_props_sbt () {
3645
perl -pi -e "s/^sbt\.version=.*\$/sbt.version=${ver}/" project/build.properties
3746
grep -q '^sbt.version=' project/build.properties || echo "sbt.version=${ver}" >> project/build.properties
3847

39-
echo !!!
40-
echo !!! Updated file project/build.properties setting sbt.version to: $ver
41-
echo !!! Previous value was: $old
42-
echo !!!
48+
echoerr !!!
49+
echoerr !!! Updated file project/build.properties setting sbt.version to: $ver
50+
echoerr !!! Previous value was: $old
51+
echoerr !!!
4352
fi
4453
}
4554

@@ -56,16 +65,20 @@ sbt_version () {
5665
fi
5766
}
5867

59-
echoerr () {
60-
[[ -z $quiet ]] && echo "$@" >&2
61-
}
62-
vlog () {
63-
[[ $verbose || $debug ]] && echoerr "$@"
64-
}
65-
dlog () {
66-
[[ $debug ]] && echoerr "$@"
68+
# restore stty settings (echo in particular)
69+
onSbtRunnerExit() {
70+
[[ -n $sbt_saved_stty ]] || return
71+
dlog ""
72+
dlog "restoring stty: $sbt_saved_stty"
73+
stty $sbt_saved_stty
74+
unset sbt_saved_stty
6775
}
6876

77+
# save stty and trap exit, to ensure echo is reenabled if we are interrupted.
78+
trap onSbtRunnerExit EXIT
79+
sbt_saved_stty=$(stty -g 2>/dev/null)
80+
dlog "Saved stty: $sbt_saved_stty"
81+
6982
# this seems to cover the bases on OSX, and someone will
7083
# have to tell me about the others.
7184
get_script_path () {
@@ -93,6 +106,24 @@ make_url () {
93106
echo "http://typesafe.artifactoryonline.com/typesafe/ivy-$category/$groupid/sbt-launch/$version/sbt-launch.jar"
94107
}
95108

109+
readarr () {
110+
while read ; do
111+
eval "$1+=(\"$REPLY\")"
112+
done
113+
}
114+
115+
init_default_option_file () {
116+
local overriding_var=${!1}
117+
local default_file=$2
118+
if [[ ! -r "$default_file" && $overriding_var =~ ^@(.*)$ ]]; then
119+
local envvar_file=${BASH_REMATCH[1]}
120+
if [[ -r $envvar_file ]]; then
121+
default_file=$envvar_file
122+
fi
123+
fi
124+
echo $default_file
125+
}
126+
96127
declare -r default_jvm_opts="-Dfile.encoding=UTF8 -XX:MaxPermSize=256m -Xms512m -Xmx1g -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC"
97128
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
98129
declare -r latest_28="2.8.2"
@@ -105,11 +136,8 @@ declare -r script_name="$(basename $script_path)"
105136

106137
# some non-read-onlies set with defaults
107138
declare java_cmd=java
108-
declare sbt_launch_dir="$script_dir/.lib"
109-
declare sbt_universal_launcher="$script_dir/lib/sbt-launch.jar"
110-
declare sbt_jar=$sbt_universal_launcher
111-
declare sbt_opts_file=.sbtopts
112-
declare jvm_opts_file=.jvmopts
139+
declare sbt_opts_file=$(init_default_option_file SBT_OPTS .sbtopts)
140+
declare jvm_opts_file=$(init_default_option_file JVM_OPTS .jvmopts)
113141

114142
# pull -J and -D options to give to java.
115143
declare -a residual_args
@@ -123,8 +151,10 @@ declare -a extra_jvm_opts extra_sbt_opts
123151
# if set, use JAVA_HOME over java found in path
124152
[[ -e "$JAVA_HOME/bin/java" ]] && java_cmd="$JAVA_HOME/bin/java"
125153

126-
# use ~/.sbt/launch to store sbt jars if script_dir is not writable
127-
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$HOME/.sbt/launch"
154+
# directory to store sbt launchers
155+
declare sbt_launch_dir="$HOME/.sbt/launchers"
156+
[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir"
157+
[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers)"
128158

129159
build_props_scala () {
130160
if [[ -r project/build.properties ]]; then
@@ -156,7 +186,7 @@ execRunner () {
156186
# I'm sure there's some way to get our hands on the pid and wait for it
157187
# but it exceeds my present level of ambition.
158188
else
159-
exec "$@"
189+
{ "$@"; }
160190
fi
161191
}
162192

@@ -207,7 +237,10 @@ jar_url () {
207237
}
208238

209239
jar_file () {
210-
echo "$sbt_launch_dir/$1/sbt-launch.jar"
240+
case $1 in
241+
0.13.*) echo "$sbt_launch_dir/$1/sbt-launch.jar" ;;
242+
*) echo "$sbt_launch_dir/$sbt_release_version/sbt-launch.jar" ;;
243+
esac
211244
}
212245

213246
download_url () {
@@ -257,9 +290,10 @@ Usage: $script_name [options]
257290
# sbt version (default: from project/build.properties if present, else latest release)
258291
!!! The only way to accomplish this pre-0.12.0 if there is a build.properties file which
259292
!!! contains an sbt.version property is to update the file on disk. That's what this does.
260-
-sbt-version <version> use the specified version of sbt
293+
-sbt-version <version> use the specified version of sbt (default: $sbt_release_version)
261294
-sbt-jar <path> use the specified jar as the sbt launcher
262-
-sbt-snapshot use a snapshot version of sbt
295+
-sbt-beta use a beta version of sbt (currently: $sbt_beta_version)
296+
-sbt-snapshot use a snapshot version of sbt (currently: $sbt_snapshot_version)
263297
-sbt-launch-dir <path> directory to hold sbt launchers (default: $sbt_launch_dir)
264298
265299
# scala version (default: as chosen by sbt)
@@ -270,19 +304,23 @@ Usage: $script_name [options]
270304
-scala-version <version> use the specified version of scala
271305
-binary-version <version> use the specified scala version when searching for dependencies
272306
273-
# java version (default: java from PATH, currently $(java -version |& grep version))
307+
# java version (default: java from PATH, currently $(java -version 2>&1 | grep version))
274308
-java-home <path> alternate JAVA_HOME
275309
276310
# passing options to the jvm - note it does NOT use JAVA_OPTS due to pollution
277311
# The default set is used if JVM_OPTS is unset and no -jvm-opts file is found
278312
<default> $default_jvm_opts
279-
JVM_OPTS environment variable holding jvm args
313+
JVM_OPTS environment variable holding either the jvm args directly, or
314+
the reference to a file containing jvm args if given path is prepended by '@' (e.g. '@/etc/jvmopts')
315+
Note: "@"-file is overridden by local '.jvmopts' or '-jvm-opts' argument.
280316
-jvm-opts <path> file containing jvm args (if not given, .jvmopts in project root is used if present)
281317
-Dkey=val pass -Dkey=val directly to the jvm
282318
-J-X pass option -X directly to the jvm (-J is stripped)
283319
284320
# passing options to sbt, OR to this runner
285-
SBT_OPTS environment variable holding sbt args
321+
SBT_OPTS environment variable holding either the sbt args directly, or
322+
the reference to a file containing sbt args if given path is prepended by '@' (e.g. '@/etc/sbtopts')
323+
Note: "@"-file is overridden by local '.sbtopts' or '-sbt-opts' argument.
286324
-sbt-opts <path> file containing sbt args (if not given, .sbtopts in project root is used if present)
287325
-S-X add -X to sbt's scalacOptions (-S is stripped)
288326
EOM
@@ -308,7 +346,8 @@ addResolver () {
308346
addSbt "set resolvers in ThisBuild += $1"
309347
}
310348
addDebugger () {
311-
addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
349+
addJava "-Xdebug"
350+
addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
312351
}
313352
setScalaVersion () {
314353
addSbt "set scalaVersion in ThisBuild := \"$1\""
@@ -349,6 +388,7 @@ process_args ()
349388

350389
-sbt-create) sbt_create=true && shift ;;
351390
-sbt-snapshot) sbt_explicit_version=$sbt_snapshot_version && shift ;;
391+
-sbt-beta) sbt_explicit_version=$sbt_beta_version && shift ;;
352392
-sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
353393
-sbt-version) require_arg version "$1" "$2" && sbt_explicit_version="$2" && shift 2 ;;
354394
-sbt-launch-dir) require_arg path "$1" "$2" && sbt_launch_dir="$2" && shift 2 ;;
@@ -375,12 +415,21 @@ process_args ()
375415
# process the direct command line arguments
376416
process_args "$@"
377417

418+
# skip #-styled comments
419+
readConfigFile() {
420+
while read line; do echo ${line/\#*/} | grep -vE '^\s*$'; done < $1
421+
}
422+
378423
# if there are file/environment sbt_opts, process again so we
379424
# can supply args to this runner
380425
if [[ -r "$sbt_opts_file" ]]; then
381-
readarray -t extra_sbt_opts < "$sbt_opts_file"
382-
elif [[ -n "$SBT_OPTS" ]]; then
426+
vlog "Using sbt options defined in file $sbt_opts_file"
427+
readarr extra_sbt_opts < <(readConfigFile "$sbt_opts_file")
428+
elif [[ -n "$SBT_OPTS" && !($SBT_OPTS =~ ^@.*) ]]; then
429+
vlog "Using sbt options defined in variable \$SBT_OPTS"
383430
extra_sbt_opts=( $SBT_OPTS )
431+
else
432+
vlog "No extra sbt options have been defined"
384433
fi
385434

386435
[[ -n $extra_sbt_opts ]] && process_args "${extra_sbt_opts[@]}"
@@ -402,12 +451,12 @@ setTraceLevel() {
402451

403452
# Update build.properties no disk to set explicit version - sbt gives us no choice
404453
[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version"
405-
echoerr "Detected sbt version $(sbt_version)"
454+
vlog "Detected sbt version $(sbt_version)"
406455

407-
[[ -n "$scala_version" ]] && echo "Overriding scala version to $scala_version"
456+
[[ -n "$scala_version" ]] && echoerr "Overriding scala version to $scala_version"
408457

409458
# no args - alert them there's stuff in here
410-
(( $argumentCount > 0 )) || echo "Starting $script_name: invoke with -help for other options"
459+
(( $argumentCount > 0 )) || vlog "Starting $script_name: invoke with -help for other options"
411460

412461
# verify this is an sbt dir or -create was given
413462
[[ -r ./build.sbt || -d ./project || -n "$sbt_create" ]] || {
@@ -441,10 +490,13 @@ else
441490
fi
442491

443492
if [[ -r "$jvm_opts_file" ]]; then
444-
readarray -t extra_jvm_opts < "$jvm_opts_file"
445-
elif [[ -n "$JVM_OPTS" ]]; then
493+
vlog "Using jvm options defined in file $jvm_opts_file"
494+
readarr extra_jvm_opts < <(readConfigFile "$jvm_opts_file")
495+
elif [[ -n "$JVM_OPTS" && !($JVM_OPTS =~ ^@.*) ]]; then
496+
vlog "Using jvm options defined in \$JVM_OPTS variable"
446497
extra_jvm_opts=( $JVM_OPTS )
447498
else
499+
vlog "Using default jvm options"
448500
extra_jvm_opts=( $default_jvm_opts )
449501
fi
450502

0 commit comments

Comments
 (0)