Packets: Add StringParser ostream operation
[senf.git] / _templates / add.sh
index 35d9df0..af6b2d8 100755 (executable)
@@ -2,7 +2,7 @@
 
 if [ -z "$1" ]; then
     cat <<EOF
-Usage: $0 <name>.<ext> [<author>]
+Usage: $0 [-f] <name>.<ext> [<author>]
 
 Will add the file with that name to the current directory by copying
 the appropriate template and replacing the @NAME@ placeholders
@@ -23,29 +23,40 @@ If <author> is given, it is also set correctly replaced. If <author>
 is unset but the environment variable SENF_AUTHOR is set, it's value
 is used. Otherwise, the @AUTHOR@ placeholder will need to be replaced
 manually.
+
+$0 will refrain from overwriting existing files except when the '-f'
+option is specified.
 EOF
     exit 1
 fi
 
 base="`dirname "$0"`"; base="`cd "$base"; pwd`"
 
-type="${1##*.}"
-name="`basename "$1" ".$type"`"
+if [ "$1" == "-f" ]; then
+    force=1
+    shift
+fi
+
+name="`basename "$1"`"
+case "$name" in
+    *.*) type=".${name#*.}"; name="${name%.$type}" ;;
+    *) type="" ;;
+esac
 
-if [ ! -r "$base/Example.$type" ] ; then
+if [ ! -r "$base/Example$type" ] ; then
     echo "Don't know about file type '$type'"
     exit 1
 fi
 
 [ -z "$2" ] || SENF_AUTHOR="$2"
 
-if [ -r "$1" ] ; then
+if [ -z "$force" -a -r "$1" ] ; then
     echo "Target file '$1' exists."
     exit 1
 fi
 
 sed -e "s/@NAME@/$name/g" -e "s/@AUTHOR@/${SENF_AUTHOR:-@AUTHOR@}/g" \
-    < "$base/Example.$type" \
+    < "$base/Example$type" \
     > "$1"
 
 svn add "$1"