Merge branch 'master' of github.com:ZeusWPI/OBUS into master
This commit is contained in:
commit
4db6ca04c1
1 changed files with 46 additions and 42 deletions
|
@ -1,66 +1,70 @@
|
||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
# "Bash strict mode", see http://redsymbol.net/articles/unofficial-bash-strict-mode/
|
print() { printf '%s' "$1"; }
|
||||||
set -euo pipefail
|
println() { printf '%s\n' "$1"; }
|
||||||
IFS=$'\n\t'
|
|
||||||
|
|
||||||
# Go to the current working directory so things work if people are in a different one and e.g. use ../src/new_module.sh
|
# Go to the current working directory so things work if people are in a different one and e.g. use ../src/new_module.sh
|
||||||
cd "$(dirname "$0")"
|
cd -- "`dirname "$0"`"
|
||||||
|
|
||||||
# Make sure the template dir exists so we don't let people enter details unnecessarily
|
# Make sure the template dir exists so we don't let people enter details unnecessarily
|
||||||
if [ ! -d ./template_module ]; then
|
if [ ! -d ./template_module ]; then
|
||||||
echo "template_module doesn't exist" >&2
|
println "template_module doesn't exist" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ask for module name
|
# Ask for module name
|
||||||
read -p "Name of module (e.g. Oil gauge): " module_name
|
print "Name of module (e.g. Oil gauge): "
|
||||||
if [[ $module_name == *%* ]]; then
|
read module_name
|
||||||
echo "Module name must not contain %" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Determine a "clean" module name: lowercase, no spaces
|
# Determine a "clean" module name for paths: lowercase, no spaces
|
||||||
module="$(tr [A-Z] [a-z] <<< "$module_name")"
|
module="`print "$module_name" | tr [A-Z] [a-z] | sed "s/ /_/g;s/'//g"`"
|
||||||
module="${module// /_}"
|
|
||||||
module="${module//\'/}"
|
|
||||||
|
|
||||||
# Make sure `modules` directory exists and target directory doesn't
|
# Make sure `modules` directory exists and target directory doesn't
|
||||||
mkdir -p modules
|
mkdir -p modules
|
||||||
module_dir="modules/$module"
|
module_dir="modules/$module"
|
||||||
if [[ -e "$module_dir" ]]; then
|
if [ -e "$module_dir" ]; then
|
||||||
echo "$module_dir already exists" >&2
|
println "$module_dir already exists" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ask for author name
|
# Ask for author name
|
||||||
read -p "How would you like to be credited? Your name: " author
|
print "How would you like to be credited? Your name: "
|
||||||
if [[ $author == *%* ]]; then
|
read author
|
||||||
echo "Author name must not contain %" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Copy the template directory
|
# Copy the template directory
|
||||||
cp -r template_module "$module_dir"
|
cp -r -- template_module "$module_dir"
|
||||||
cd "$module_dir"
|
cd -- "$module_dir"
|
||||||
|
|
||||||
|
# Disallow % in fields that will be used in %-delimited ed substitution
|
||||||
|
assert_no_percent() {
|
||||||
|
case "$1" in
|
||||||
|
*"%"*) println "$2 must not contain %" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
assert_no_percent "$author" "Author name"
|
||||||
|
assert_no_percent "$module_name" "Module name"
|
||||||
|
assert_no_percent "$module" "Module path name"
|
||||||
|
|
||||||
# Fill in the blanks in the template
|
# Fill in the blanks in the template
|
||||||
if [ "$(uname)" == "Darwin" ]; then
|
# `sed -i` is not portable so we create something like it ourselves
|
||||||
sed -i '' -e "
|
reced() {
|
||||||
s/{YEAR}/$(date +%Y)/
|
for file in "$1"/*; do
|
||||||
s%{AUTHOR}%$author%
|
if [ -f "$file" ]; then
|
||||||
s%{MODULE_NAME}%$module_name%
|
ed "$file" <<HERE
|
||||||
s%{MODULE}%$module%
|
%s/{YEAR}/$(date +%Y)/
|
||||||
" $(find . -type f)
|
%s%{AUTHOR}%$author%
|
||||||
else
|
%s%{MODULE_NAME}%$module_name%
|
||||||
sed -i "
|
%s%{MODULE}%$module%
|
||||||
s/{YEAR}/$(date +%Y)/
|
wq
|
||||||
s%{AUTHOR}%$author%
|
HERE
|
||||||
s%{MODULE_NAME}%$module_name%
|
elif [ -d "$file" ]; then
|
||||||
s%{MODULE}%$module%
|
reced "$file"
|
||||||
" $(find -type f)
|
fi
|
||||||
fi
|
done
|
||||||
# Arduino IDE requires .ino sketches to have the same name as their directory
|
}
|
||||||
mv main.ino "$module.ino"
|
reced .
|
||||||
|
|
||||||
echo "The basic structure for your module is now ready in $module_dir"
|
# Arduino IDE requires .ino sketches to have the same name as their directory
|
||||||
|
mv -- main.ino "$module.ino"
|
||||||
|
|
||||||
|
println "The basic structure for your module is now ready in $module_dir"
|
||||||
|
|
Loading…
Reference in a new issue