1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
#!/bin/sh
# $Id: update-htfonts 1141 2022-06-01 21:43:42Z karl $
# Public domain. Originally written by Karl Berry, 2022.
# don't bother with real option parsing.
if test $# -ne 3; then
cat <<END_USAGE
Usage: $0 [ diff | update ] HTF-DEVDIR HTF-INSTDIR
END_USAGE
exit 1
fi
verbose=true
prg=`basename $0`
cp="cp -pv"
mkdir="mkdir -v"
svn=svn
if test x"$1" = xdiff; then
shift
do_updates=false
cp="echo would $cp"
mkdir="echo would $mkdir"
svn="echo would $svn"
elif test x"$1" = xupdate; then
shift
do_updates=true
else
echo "$0: first arg must be \`diff' or \`update', not: $1" >&2
exit 1
fi
devdir=$1
instdir=$2
verbose=true
tmp=/tmp/htdif # prefix
if test ! -d "$devdir"; then
echo "$0: devdir not a directory: $devdir" >&2
exit 1
fi
if test ! -d "$instdir"; then
echo "$0: instdir not a directory: $instdir" >&2
exit 1
fi
# Function to copy SRC to DEST, or fail. Just calls $cp.
#
copy_file () {
src=$1; dest=$2
#
if $cp "$src" "$dest"; then :; else
echo "$0: copy ($cp) failed: $src -> $dest" >&2
exit 1
fi
}
# Function to compare SRC to DEST. Return zero if equivalent,
# nonzero if different (or DEST does not exist, etc.).
#
# Remove a timestamp string from both files for comparison:
# YYYY-MM-DD-HH:MM or just YYYY-MM-DD
#
htf_same () {
src=$1; dest=$2;
#
src_filtered=$tmp.s`basename "$src"`
dest_filtered=$tmp.d`basename "$dest"`
#
sed 's/20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]\(-[0-9][0-9]:[0-9][0-9]\)*//' \
$src >$src_filtered || exit 1
sed 's/20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]\(-[0-9][0-9]:[0-9][0-9]\)*//' \
$dest >$dest_filtered || exit 1
cmp -s "$src_filtered" "$dest_filtered"
}
# Iterate through all files in the dev directory.
echo "$prg: comparing $devdir"
echo "$prg: to $instdir"
>$tmp.0 # accumulate diffs here
#
find "$devdir" -type f -print | sort | while read devf; do
instf=`echo "$devf" | sed "s,^$devdir/,$instdir/,"`
#echo "$devf" | grep ec-mlm >/dev/null &&
#$verbose && echo "considering $devf -> $instf"
if test -r "$instf"; then
# we have a file in both directories; see if they are the same (enough).
if htf_same "$devf" "$instf"; then
: # $verbose && echo "`basename \"$devf\"`: same ($devf == $instf)"
else
$verbose && echo "`basename \"$devf\"`: diff ($devf != $instf)"
# save diff from (older) DEST to newer (SRC).
diff -u0 "$dest" "$src" >>$tmp.0
#
copy_file "$devf" "$instf"
fi
else
# no destination file. see if we have the containing directory.
destdirf=`dirname "$instf"`
if test -d "$destdirf"; then
# have directory, so add file.
$verbose && echo "newfile ($devf -> $instf)"
copy_file "$devf" "$instf"
$svn add "$instf" || exit 1
else
# don't even have directory. create it, then copy file.
$mkdir "$destdirf"
$verbose && echo "newdir ($devf -> $destdirf)"
if test ! -d "$destdirf"; then
echo "$0: could not make dest dir: $destdirf (for $devf->$instf)" >&2
exit 1
fi
$svn add "$destdirf" || exit 1
copy_file "$devf" "$instf"
$svn add "$instf" || exit 1
fi
fi
done
# check for extra files in $instdir
(cd "$devdir" && find . -type f -print | sort) >$tmp.devdir || exit 1
(cd "$instdir" && find . -type f -print | sort) >$tmp.instdir || exit 1
echo "$prg: files in devdir and not in instdir (should be empty):"
comm -23 $tmp.devdir $tmp.instdir
echo "$prg: files in instdir and not in devdir (you should remove):"
comm -13 $tmp.devdir $tmp.instdir
# maybe better to leave it for manual removal?
echo "$prg: done."
|