git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH UPDATED] cg-commit chokes when given a very large list of files

From
Bryan Larsen <bryanlarsen@yahoo.com>
Date
Jul 18, 2005, 04:37 UTC
Message-ID
<20050718043713.22322.21445.sendpatchset@bryan-larsens-ibook-g4.local>
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 <bryan.larsen@gmail.com>
---
 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 "queue$op[\${#queue$op[@]}]=\"\$fname\""
 	done
 	# XXX: Do we even need to do the --add and --remove update-caches?
-	[ "$queueN" ] && { git-update-cache --add ${infoonly} -- "${queueN[@]}" || return 1; }
-	[ "$queueD" ] && { git-update-cache --force-remove -- "${queueD[@]}" || return 1; }
-	[ "$queueM" ] && { git-update-cache ${infoonly} -- "${queueM[@]}" || return 1; }
+	eval_via_xargs "git-update-cache --add ${infoonly} --" "${queueN[@]}" || return 1
+	eval_via_xargs "git-update-cache --force-remove --" "${queueD[@]}" || return 1
+	eval_via_xargs "git-update-cache ${infoonly} --" "${queueM[@]}" || return 1
 	return 0
 }
 
Message 1 of 1 in “cg-commit chokes when given a very large list of files”
  1. cg-commit chokes when given a very large list of filesBryan Larsen, Jul 18, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.