-function cvsdiff { cvs diff "$@" 2>&1| less; }; export -f cvsdiff
-function cvsdiffi { cvs diff "$@" 2>&1|grep -v '^?'|less; }; export -f cvsdiffi
-function cvsupdate { cvs update "$@" 2>&1| less; }; export -f cvsupdate
-function cvsupdatei { cvs update "$@" 2>&1|grep -v '^?'|less; }; export -f cvsupdatei
+# even when LANG is set to "en_US" it is lethal - strcoll() starts to sort case-insensitively!
+unset LANG
+
+function cvsdiff { cvs diff "$@" 2>&1|pipebuf -q| less; }; export -f cvsdiff
+function cvsdiffi { cvs diff "$@" 2>&1|pipebuf -q|grep -v '^?'|less; }; export -f cvsdiffi
+function cvsupdate { cvs update "$@" 2>&1|pipebuf -q| less; }; export -f cvsupdate
+function cvsupdatei { cvs update "$@" 2>&1|pipebuf -q|grep -v '^?'|less; }; export -f cvsupdatei
+function cvsfiles {
+ for i in `find . -name Entries|grep '/CVS/Entries$'`;do
+ j="`echo "$i"|sed 's,CVS/Entries$,,'`"
+ sed -n 's,^/\([^/]*\)/[^-].*$,'"$j"'\1,p' <$i
+ done \
+ | sed 's%^\./%%'
+ }; export -f cvsfiles
+function cvsignore {
+ for i in `find . -name .cvsignore`;do
+ j="`echo "$i"|sed 's,\.cvsignore$,,'`"
+ sed -n 's,^.*$,'"$j"'&,p' <$i
+ done
+ }; export -f cvsignore
+function cvsignorerm { cvsignore | xargs rm -f; }; export -f cvsignorerm
+function cvsignoreall {
+ (find -type f|sed -e '\#/CVS/[^/]*$#d' -e 's#^\./##';cvsfiles)|sort|uniq -c|sed -n "s/^ *1`echo -e '\t'`//p"
+ }; export -f cvsignoreall
+function cvsignoreallrm { cvsignoreall | xargs rm -f; }; export -f cvsignoreallrm