summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhealther <healther@users.noreply.github.com>2017-08-18 20:57:52 +0200
committerscheibelp <scheibel1@llnl.gov>2017-08-18 11:57:52 -0700
commitd6d2dff324347dc7dab1d453ef17378c752b8a78 (patch)
tree4bd05bb6fae77f3737164a57b365256a784c0c0c
parent6d155833c5a9f6c55e58d56e4aec09eb32fe1839 (diff)
downloadspack-d6d2dff324347dc7dab1d453ef17378c752b8a78.tar.gz
spack-d6d2dff324347dc7dab1d453ef17378c752b8a78.tar.bz2
spack-d6d2dff324347dc7dab1d453ef17378c752b8a78.tar.xz
spack-d6d2dff324347dc7dab1d453ef17378c752b8a78.zip
sbang support: add node-js and fix lua
This adds sbang hook support for node-js and fixes the sbang filter for lua (the character class exclusion was swallowing newlines and reporting a false positive if lua was mentioned anywhere in the file).
-rwxr-xr-xbin/sbang2
-rw-r--r--lib/spack/spack/hooks/sbang.py9
2 files changed, 10 insertions, 1 deletions
diff --git a/bin/sbang b/bin/sbang
index 0b883a5feb..ce4df4327c 100755
--- a/bin/sbang
+++ b/bin/sbang
@@ -104,6 +104,8 @@ lines=0
while read line && ((lines < 2)) ; do
if [[ "$line" = '#!'* ]]; then
interpreter="${line#\#!}"
+ elif [[ "$line" = '//!'*node* ]]; then
+ interpreter="${line#//!}"
elif [[ "$line" = '--!'*lua* ]]; then
interpreter="${line#--!}"
fi
diff --git a/lib/spack/spack/hooks/sbang.py b/lib/spack/spack/hooks/sbang.py
index e86f8260b8..cd3529dbb8 100644
--- a/lib/spack/spack/hooks/sbang.py
+++ b/lib/spack/spack/hooks/sbang.py
@@ -62,10 +62,17 @@ def filter_shebang(path):
if original.startswith(new_sbang_line):
return
+ # In the following, newlines have to be excluded in the regular expression
+ # else any mention of "lua" in the document will lead to spurious matches.
+
# Use --! instead of #! on second line for lua.
- if re.search(r'^#!(/[^/]*)*lua\b', original):
+ if re.search(r'^#!(/[^/\n]*)*lua\b', original):
original = re.sub(r'^#', '--', original)
+ # Use //! instead of #! on second line for node.js.
+ if re.search(r'^#!(/[^/\n]*)*node\b', original):
+ original = re.sub(r'^#', '//', original)
+
# Change non-writable files to be writable if needed.
saved_mode = None
if not os.access(path, os.W_OK):