#!/bin/sh
#Generate a new project from your HTML5 Boilerplate repo clone
#by: Rick Waldron & Michael Cetrulo
##first run
# $ cd html5-boilerplate/build
# $ chmod +x createproject.sh && ./createproject.sh [new_project]
##usage
# $ cd html5-boilerplate/build
# $ ./createproject.sh [new_project]
#
# If [new_project] is not specified the user we will prompted to enter it.
#
# The format of [new_project] should ideally be lowercase letters with no
# spaces as it represents the directory name that your new project will live
# in.
#
# If the new project is specified as just a name ( "foo" ) then the path
# will be a sibling to html5-boilerplate's directory.
#
# If the new project is specified with an absolute path ( "/home/user/foo" )
# that path will be used.
#
# find project root (also ensure script is ran from within repo)
version="1.0"
print_version() {
echo "$0 (c) 2011 by Rick Waldron & Michael Cetrulo version $version"
}
print_help() {
print_version
echo "USAGE: $0 [--src SRC] [--dst DST] NAME"
echo "OPTIONS:"
echo "--src -s SRC \t set the source directory where your html5boilerplate lives"
echo "--dst -d DST \t set the destination directory in which to create your project"
echo "--vcs VCS \t make the new location a VCS repository. Currently supported"
echo " \t VCSs are: git and hg(mercurial)."
echo "--commit -c \t if set will commit the copied h5bp sources into the VCS."
echo " \t this only works with the --vcs option set"
echo ""
echo "If --src is not set it will use the toplevel dir of the current git dir"
echo "this behaviour expects that you are in the git repository of h5bp under /build"
echo ""
echo "If --dst is not set it will try to create the directory in the current directory"
echo "You can also set the same options in the ~/.h5bprc file"
echo "Here are the possible options:"
echo "\tsrc\t\t-\tThe source directory from where h5bp is located"
echo "\tdst\t\t-\tThe destination in which the new project shoul be created"
echo "\twhich_vcs\t-\tThe vcs you want to use"
echo "\tcommit_init\t-\tset this to \"yes\" if you want to commit the contents of the new project"
echo "Here is an example for the syntax(It is basically how shell variables are set):"
echo ""
echo "src=\"~/src/html5boilerplate\""
echo "dst=\"~/src\""
echo "which_vcs=\"git\""
echo "commit_init=\"yes\""
echo ""
}
# this will be overridden if --src is set on the commandline
src="./"
dst="./"
project_name=""
with_vcs="no"
which_vcs=""
commit_init="no"
if [ -e $HOME/.h5bprc ]; then
. $HOME/.h5bprc
fi
while test "$1" != ""
do
case $1 in
--help|-h)
print_help
exit 0
;;
--version|-v)
print_version
exit 0
;;
--src|-s)
shift
if [ -d $1 ]
then
src="$1"
fi
;;
--dst|-d)
shift
if [ -d "$1" ]
then
dst="$1"
fi
;;
--vcs)
with_vcs="yes"
shift
which_vcs=$1
;;
--commit|-c)
commit_init="yes"
shift
;;
*)
project_name="$1"
shift
;;
esac
done
if [ ! -d "$src" ]; then
src=$(git rev-parse --show-toplevel) || {
echo "fatal: could not determine html5-boilerplate's root directory." >&2
exit 1
}
fi
dst="$dst/$project_name/"
if [ -d $dst ]
then
echo "ERROR: Project $project_name already exists at $dst"
exit 1
fi
#create new project
mkdir -p "$dst" || exit 1
#success message
echo "Created Directory: $dst"
cp -vr -- $src/css $src/js $src/img $src/build $src/*.html $src/*.xml $src/*.txt $src/*.png $src/*.ico $src/.htaccess "$dst"
if [ "$with_vcs" = "yes" ]
then
if [ "$which_vcs" = "git" ]
then
git init $dst
if [ "$commit_init" = "yes" ]
then
cd $dst
git add css js img build *.html *.xml *.txt *.png *.ico .htaccess
git commit -am 'initial commit'
fi
elif [ "$which_vcs" = "hg" ]
then
hg init $dst
if [ "$commit_init" = "yes" ]
then
cd $dst
hg add css js img build *.html *.xml *.txt *.png *.ico .htaccess
hg commit -m 'initial commit' css js img build *.html *.xml *.txt *.png *.ico .htaccess
fi
fi
fi
#success message
echo "Created Project: $dst"