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