diff --git a/bin/foamCloneCase b/bin/foamCloneCase index 1cd4e9077..d3763421c 100755 --- a/bin/foamCloneCase +++ b/bin/foamCloneCase @@ -41,13 +41,17 @@ options: -latestTime clone the latest time directory -no-orig do not copy 0.orig directory -no-scripts do not copy shell scripts + -template search for source case directory in template directory paths Create a new case directory that includes time, system and constant directories, and shell scripts, of directory. The time directory is the first time directory by default. If no time directory exists, or it is 0, an exitsting 0.orig directory is copied by default. +Template directory paths are: USAGE + for _tp in $TEMPLATE_DIRS ; do echo " $_tp" ; done + echo "" } error() { @@ -61,9 +65,28 @@ cpIfPresent() { [ -e "$1" ] && echo "... ${1##*/}" && cp -r "$1" "$2" } +ver=$WM_PROJECT_VERSION +tmp_dir=templates +TEMPLATE_DIRS=" + ${HOME}/.OpenFOAM/appTemplates/$ver + ${HOME}/.OpenFOAM/$ver/$tmp_dir + ${HOME}/.OpenFOAM/$tmp_dir + ${WM_PROJECT_SITE:-$WM_PROJECT_INST_DIR/site}/$ver/$tmp_dir + ${WM_PROJECT_SITE:-$WM_PROJECT_INST_DIR/site}/$tmp_dir + $WM_PROJECT_DIR/etc/$tmp_dir" + +templateDir() { + for t in $TEMPLATE_DIRS + do + [ -d "$t/$1" ] && echo "$t/$1" && exit 0 + done + exit 1 +} + time_option="head -1" no_orig="" no_scripts="" +template="" # parse options while [ "$#" -gt 0 ] @@ -84,6 +107,10 @@ do no_scripts="true" shift 1 ;; + -template) + template="true" + shift 1 + ;; -*) error "unknown option: '$*'" ;; @@ -94,29 +121,38 @@ do done [ $# -eq 2 ] || error "Incorrect arguments specified" -foamListTimes -case "$1" >/dev/null 2>&1 || \ - error "'$1' is not a valid case directory" -[ -e "$2" ] && error "'$2' file/directory already exists, delete and re-run" +srcDir="$1" +[ -z "$template" ] || \ + srcDir="$(templateDir "$1")" || \ + error "'$1' not found in template directories" -echo "Making $2 case directory" -mkdir "$2" +foamListTimes -case "$srcDir" >/dev/null 2>&1 || \ + error "'$srcDir' is not a valid case directory" -echo "Copying directories from $1 to $2:" -cpIfPresent "$1/system" "$2" -cpIfPresent "$1/constant" "$2" +tgtDir=$2 -time_dir="$(foamListTimes -withZero -case "$1" | $time_option)" -cpIfPresent "$1/${time_dir}" "$2" +[ -e "$tgtDir" ] && \ + error "'$tgtDir' file/directory already exists, delete and re-run" + +echo "Making $tgtDir case directory" +mkdir "$tgtDir" + +echo "Copying directories from $srcDir to $tgtDir:" +cpIfPresent "$srcDir/system" "$tgtDir" +cpIfPresent "$srcDir/constant" "$tgtDir" + +time_dir="$(foamListTimes -withZero -case "$srcDir" | $time_option)" +cpIfPresent "$srcDir/${time_dir}" "$tgtDir" [ "${time_dir}" = "0" -o -z "${time_dir}" ] && [ -z "$no_orig" ] && \ -cpIfPresent "$1/0.orig" "$2" +cpIfPresent "$srcDir/0.orig" "$tgtDir" [ "$no_scripts" ] || \ - scripts="$(find "$1" -maxdepth 1 -type f -exec file {} \; | \ + scripts="$(find "$srcDir" -maxdepth 1 -type f -exec file {} \; | \ grep "shell script" | \ cut -d: -f1)" -[ "$scripts" ] && echo "Copying scripts from $1 to $2:" && \ - for s in $scripts ; do cpIfPresent "$s" "$2" ; done +[ "$scripts" ] && echo "Copying scripts from $srcDir to $tgtDir:" && \ + for s in $scripts ; do cpIfPresent "$s" "$tgtDir" ; done #------------------------------------------------------------------------------