diff options
author | eschnett <eschnett@4f5cb9a8-4dd8-4c2d-9bbd-173fa4467843> | 2010-03-29 10:45:17 +0000 |
---|---|---|
committer | eschnett <eschnett@4f5cb9a8-4dd8-4c2d-9bbd-173fa4467843> | 2010-03-29 10:45:17 +0000 |
commit | f33a18fee7267ff212baec75795ecb13670643e8 (patch) | |
tree | 26461682ee96a7bd5f8da6879432d88fe49e2124 /m/copy-if-changed.sh | |
parent | d7ddbe354ebe7072ff6687124e5f620d56a16b28 (diff) |
Make self-updating work again after moving the "m" directory into the
thorn.
Add README.
Re-generate thorn.
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/WeylScal4/trunk@51 4f5cb9a8-4dd8-4c2d-9bbd-173fa4467843
Diffstat (limited to 'm/copy-if-changed.sh')
-rw-r--r-- | m/copy-if-changed.sh | 127 |
1 files changed, 78 insertions, 49 deletions
diff --git a/m/copy-if-changed.sh b/m/copy-if-changed.sh index 46356f7..a8403d0 100644 --- a/m/copy-if-changed.sh +++ b/m/copy-if-changed.sh @@ -1,71 +1,100 @@ #! /bin/bash +set -e + src=$1 dst=$2 # Copy tree $src to tree $dst -# Both $src and $dst must be directories. $dst is created if it does -# not exist - -# All files in the source tree are checked; if they already exist in -# the destination tree and are identical, they are ignored, otherwise -# they are copied. Missing directories are created. - -# All files in the destination tree are checked; if they do not exist -# in the source tree, they are deleted. if test -z "$src" || test -z "$dst" || test "$src" = "$dst"; then echo "Usage: $0 <src> <dst>" exit 1 fi -test -d $src || exit 2 -test -e $dst || mkdir -p $dst -test -d $dst || exit 3 -# Create all directories -for dir in $(cd $src && find . -type d); do - dstdir=$dst/$dir - if test -d $dstdir; then - : # directory exists; do nothing - else - echo mkdir $dstdir - mkdir -p $dstdir - fi -done -# Delete directories which do not exist -for dir in $(cd $dst && find . -type d); do - srcdir=$src/$dir - dstdir=$dst/$dir - if test -d $srcdir; then - : # directory exists; do nothing - else - echo rm -rf $dstdir - #rm -rf $dstdir - fi -done -# Copy files that differ -for file in $(cd $src && find . -type f); do - srcfile=$src/$file - dstfile=$dst/$file +if test -f $src; then + + # Both $src and $dst must be files. + + test -f $dst || exit 3 + + # Copy file if it differs + srcfile=$src + dstfile=$dst if cmp -s $srcfile $dstfile; then : # unchanged; do nothing else echo cp $srcfile cp $srcfile $dstfile fi -done + +fi -# Delete files which do not exist -for file in $(cd $dst && find . -type f); do - srcfile=$src/$file - dstfile=$dst/$file - if test -e $srcfile; then - : # file exists; do nothing - else - echo rm $dstfile - rm $dstfile - fi -done + + +if test -d $src; then + + # Both $src and $dst must be directories. $dst is created if it + # does not exist + + # All files in the source tree are checked; if they already exist + # in the destination tree and are identical, they are ignored, + # otherwise they are copied. Missing directories are created. + + # All files in the destination tree are checked; if they do not + # exist in the source tree, they are deleted. + + test -e $dst || mkdir -p $dst + test -d $dst || exit 3 + + # Create all directories + for dir in $(cd $src && find . -type d); do + dstdir=$dst/$dir + if test -d $dstdir; then + : # directory exists; do nothing + else + echo mkdir $dstdir + mkdir -p $dstdir + fi + done + + # Delete directories which do not exist + for dir in $(cd $dst && find . -name 'CVS' -prune -name '.svn' -prune -name '.git' -prune -name '.hg' -prune -name '_darcs' -prune -type d -print); do + srcdir=$src/$dir + dstdir=$dst/$dir + if test -d $srcdir; then + : # directory exists; do nothing + else + echo rm -rf $dstdir + rm -rf $dstdir + fi + done + + # Copy files that differ + for file in $(cd $src && find . -type f); do + srcfile=$src/$file + dstfile=$dst/$file + if cmp -s $srcfile $dstfile; then + : # unchanged; do nothing + else + echo cp $srcfile + cp $srcfile $dstfile + fi + done + + # Delete files which do not exist + for file in $(cd $dst && find . -name 'CVS' -prune -name '.svn' -prune -name '.git' -prune -name '.hg' -prune -name '_darcs' -prune -type f -print); do + srcfile=$src/$file + dstfile=$dst/$file + if test -e $srcfile; then + : # file exists; do nothing + else + echo rm $dstfile + rm $dstfile + fi + done + +fi |