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