threads / patch / 1209

patchcg-commit chokes when given a very large list of files

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

## tl;dr

One message between Jul 12, 2005 and Jul 12, 2005. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Bryan Larsen· Jul 12, 2005, 11:20 UTC · lore
cg-commit currently chokes when passed a very large list of files.  Fix it.
This patch depends on your filenames not containing line feeds.  No big deal, lots of other parts of cogito break on filenames containing line feeds.
Signed-off-by: Bryan Larsen <bryan.larsen@gmail.com>
---
 cg-commit |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)
Show changes to cg-commit +5 −3
diff --git a/cg-commit b/cg-commit
--- a/cg-commit
+++ b/cg-commit
@@ -288,10 +288,12 @@ precommit_update () {
 		[ "$op" = "N" ] || [ "$op" = "D" ] || [ "$op" = "M" ] || op=M
 		eval "queue$op[\${#queue$op[@]}]=\"\$fname\""
 	done
+	IFS=$'\n'
 	# 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; }
+	[ "$queueN" ] && { ( echo "${queueN[*]}" | tr \\n \\0 | xargs -0 git-update-cache --add ${infoonly} -- ) || return 1; }
+	[ "$queueD" ] && { ( echo "${queueD[*]}" | tr \\n \\0 | xargs -0 git-update-cache --force-remove -- ) || return 1;  }
+	[ "$queueM" ] && { ( echo "${queueM[*]}" | tr \\n \\0 | xargs -0 git-update-cache ${infoonly} -- ) || return 1; }
+	IFS=$' \n\t'
 	return 0
 }
 

← back to recent threads