Maintain local CVS branch from foreign source tree
authorshort <>
Thu, 6 Mar 2003 13:43:59 +0000 (13:43 +0000)
committershort <>
Thu, 6 Mar 2003 13:43:59 +0000 (13:43 +0000)
bin/cvsbranchdiff [new file with mode: 0755]

diff --git a/bin/cvsbranchdiff b/bin/cvsbranchdiff
new file mode 100755 (executable)
index 0000000..b6dcf24
--- /dev/null
@@ -0,0 +1,36 @@
+#! /bin/sh
+#
+#      $Id$
+
+
+if [ $# = 0 ];then
+       echo 'currendir == CVS (old) version; $1 == dir w/new version; [$2 == "print"]'
+       exit 1
+       fi
+
+t=/tmp/cvsbranchdiff.$$
+trap 'rm -rf $t' EXIT
+rm -rf $t
+mkdir $t
+function findnice
+{
+       find "$1" -not -regex '.*/CVS\(\|/[^/]+\)$' '(' '!' -type d -o -printf "%P/\n" ')' '(' '!' -type f -o -printf "%P\n" ')'|sort
+}
+(findnice .   ;echo "/") >$t/old
+(findnice "$1"         ) >$t/new
+diff -u999999 $t/old $t/new|sed -e '1,/^@@.*@@$/d' >$t/diff
+if [ "$2" = print ];then
+       grep '^[+-]' $t/diff
+       exit 0
+       fi
+echo '#! /bin/sh'
+echo 'set -ex'
+sed \
+               -e 's#^[+]\(.*\)/$#mkdir '\''./\1'\''; cvs add -kk '\''\1'\''#' \
+               -e 's#^[+]\(.*[^/]\)$#cp -p '\'"$1"'/\1'\'' '\''./\1'\''; cvs add -kk '\''\1'\''#' \
+               -e '\#^[-]\(.*\)/$#d' \
+               -e 's#^[-]\(.*[^/]\)$#cvs remove -f '\''\1'\''#' \
+               -e '\#^[ ]\(.*\)/$#d' \
+               -e 's#^[ ]\(.*[^/]\)$#cmp -s '\'"$1"'/\1'\'' '\''./\1'\'' || cp -p '\'"$1"'/\1'\'' '\''./\1'\''#' \
+               <$t/diff
+echo 'echo done'