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

[PATCH] cogito: allow filenames with spaces in cg-commit

From
JVJan Veldeman <jan.veldeman@advalvas.be>
Date
May 5, 2005, 15:40 UTC
Message-ID
<20050505154004.GA20329@fanta>
Fixes the filename handling in cg-commit.

To allow spaces in the filenames, the filenames are kept in an array. (The trick with zero bytes is harder to do when storing the filenames in a variable). "${commitfiles[@]}" is used where the filenames are needed as separate arguments, this expands into "file 1" "file 2" ... "${commitfiles[*]}" is used when a check is made for the existence of the parameter, this expands into "file1 file 2 ..."

The eval changedfiles=($(... | sed ...)) is used to place the result of git-diff-cache into the array. (I couldn't find a cleaner solution to do this)

Signed-off-by: Jan Veldeman <Jan.Veldeman@advalvas.be>
Index: cogito/cg-commit
===================================================================
--- cogito.orig/cg-commit	2005-05-05 17:13:44.000000000 +0200
+++ cogito/cg-commit	2005-05-05 17:34:37.000000000 +0200
@@ -22,8 +22,8 @@
 fi
 
 if [ "$1" ]; then
-	commitfiles="$@"
-	customfiles=$commitfiles
+	commitfiles=("$@")
+	customfiles="${commitfiles[*]}"
 
 	[ "$ignorecache" ] && die "-C and listing files to commit does not make sense"
 	[ -s .git/merging ] && die "cannot commit individual files when merging"
@@ -37,8 +37,9 @@
 	# be committed along automagically as well.
 
 	if [ ! "$ignorecache" ]; then
-		changedfiles=$(git-diff-cache $(tree-id) | cut -f 4-)
-		commitfiles="$addedfiles $remfiles $changedfiles"
+		eval changedfiles=($(git-diff-cache $(tree-id) | cut -f 4- | \
+			sed -e 's/^/"/' -e 's/$/"/'))
+		commitfiles=($addedfiles $remfiles "${changedfiles[@]}")
 	fi
 
 	merging=
@@ -46,11 +47,11 @@
 fi
 
 if [ ! "$ignorecache" ]; then
-	if [ ! "$commitfiles" ]; then
+	if [ ! "${commitfiles[*]}" ]; then
 		echo 'Nothing to commit.' >&2
 		exit 2
 	fi
-	for file in $commitfiles; do
+	for file in "${commitfiles[@]}"; do
 		# Prepend a letter describing whether it's addition,
 		# removal or update. Or call git status on those files.
 		echo $file;
@@ -76,13 +77,13 @@
 
 if [ ! "$ignorecache" ]; then
 	if [ "$customfiles" ]; then
-		echo $commitfiles | xargs git-update-cache --add --remove \
+		git-update-cache --add --remove "${commitfiles[@]}" \
 			|| die "update-cache failed"
 		export GIT_INDEX_FILE=$(mktemp -t gitci.XXXXXX)
 		git-read-tree $(tree-id)
 	fi
 	# TODO: Do the proper separation of adds, removes, and changes.
-	echo $commitfiles | xargs git-update-cache --add --remove \
+	git-update-cache --add --remove "${commitfiles[@]}" \
 		|| die "update-cache failed"
 fi
 
Message 1 of 1 in “cogito: allow filenames with spaces in cg-commit”
  1. cogito: allow filenames with spaces in cg-commitJan Veldeman, May 5, 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.