summaryrefslogtreecommitdiff
path: root/scripts/readproperties.awk
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-12-29 22:16:51 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-12-29 22:16:51 -0800
commit409b2805e0f6263b4e64197bc09ae58202d45f5e (patch)
tree6ff446ede85aea997f0ca13bd720896adcde0aaf /scripts/readproperties.awk
parent841389bc6f879031a8d36a5ffcca5e3c0e1fdcef (diff)
parent3410d25e37820e8936acc3fc1a444069dc415524 (diff)
downloadscala-409b2805e0f6263b4e64197bc09ae58202d45f5e.tar.gz
scala-409b2805e0f6263b4e64197bc09ae58202d45f5e.tar.bz2
scala-409b2805e0f6263b4e64197bc09ae58202d45f5e.zip
Merge pull request #4225 from adriaanm/jobs
Refactor towards Travis CI-style: import jenkins-scripts jobs
Diffstat (limited to 'scripts/readproperties.awk')
-rw-r--r--scripts/readproperties.awk39
1 files changed, 39 insertions, 0 deletions
diff --git a/scripts/readproperties.awk b/scripts/readproperties.awk
new file mode 100644
index 0000000000..96da94775b
--- /dev/null
+++ b/scripts/readproperties.awk
@@ -0,0 +1,39 @@
+# Adapted from http://stackoverflow.com/questions/1682442/reading-java-properties-file-from-bash/2318840#2318840
+BEGIN {
+ FS="=";
+ n="";
+ v="";
+ c=0; # Not a line continuation.
+}
+/^\#/ { # The line is a comment. Breaks line continuation.
+ c=0;
+ next;
+}
+/\\$/ && (c==0) && (NF>=2) { # Name value pair with a line continuation...
+ e=index($0,"=");
+ n=substr($0,1,e-1);
+ v=substr($0,e+1,length($0) - e - 1); # Trim off the backslash.
+ c=1; # Line continuation mode.
+ next;
+}
+/^[^\\]+\\$/ && (c==1) { # Line continuation. Accumulate the value.
+ v= "" v substr($0,1,length($0)-1);
+ next;
+}
+((c==1) || (NF>=2)) && !/^[^\\]+\\$/ { # End of line continuation, or a single line name/value pair
+ if (c==0) { # Single line name/value pair
+ e=index($0,"=");
+ n=substr($0,1,e-1);
+ v=substr($0,e+1,length($0) - e);
+ } else { # Line continuation mode - last line of the value.
+ c=0; # Turn off line continuation mode.
+ v= "" v $0;
+ }
+ # Make sure the name is a legal shell variable name
+ gsub(/[^A-Za-z0-9_]/,"_",n);
+ # Silently drop everything that might confuse bash.
+ gsub(/[\n\r\\\t'"\$!]/,"",v);
+ print "export " n "=\"" v "\" || echo \"Failed to set " n "\""; # don't make bash crap out when a property could not be parsed
+ n = "";
+ v = "";
+}