cg-commit currently chokes when passed a very large list of files.  Fix it.

Resent again.  This time we completely avoid messing with IFS, resulting 
in support for filenames with line feeds.

Signed-off-by: Bryan Larsen <[EMAIL PROTECTED]>
---

 cg-Xlib   |   18 ++++++++++++++++++
 cg-commit |    6 +++---
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/cg-Xlib b/cg-Xlib
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -49,6 +49,24 @@ mktemp () {
        $(which mktemp) $dirarg $prefix"$1"
 }
 
+
+# this function is useful when you want to execute a command that's bigger
+# than the system's limit.
+#
+# this is similar to piping output to xargs -0r
+# 
+# example usage:  eval_via_xargs "git-update-cache --add --" "$@"
+eval_via_xargs () {
+    local cmd=$1
+    shift
+    if [ "$1" ] ; then 
+       ( for f in "$@" ; do
+           echo -ne ${f}\\000
+       done ) | xargs -0 $cmd
+    fi
+}
+
+
 stat () {
        if [ "$1" != "-c" ] || [ "$2" != "%s" ]; then
                echo "INTERNAL ERROR: Unsupported stat call $@" >&2
diff --git a/cg-commit b/cg-commit
--- a/cg-commit
+++ b/cg-commit
@@ -289,9 +289,9 @@ precommit_update () {
                eval "[EMAIL PROTECTED]"\$fname\""
        done
        # XXX: Do we even need to do the --add and --remove update-caches?
-       [ "$queueN" ] && { git-update-cache --add ${infoonly} -- "[EMAIL 
PROTECTED]" || return 1; }
-       [ "$queueD" ] && { git-update-cache --force-remove -- "[EMAIL 
PROTECTED]" || return 1; }
-       [ "$queueM" ] && { git-update-cache ${infoonly} -- "[EMAIL PROTECTED]" 
|| return 1; }
+       eval_via_xargs "git-update-cache --add ${infoonly} --" "[EMAIL 
PROTECTED]" || return 1
+       eval_via_xargs "git-update-cache --force-remove --" "[EMAIL PROTECTED]" 
|| return 1
+       eval_via_xargs "git-update-cache ${infoonly} --" "[EMAIL PROTECTED]" || 
return 1
        return 0
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to