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

make update-index --chmod work with multiple files and --stdin

From
Alex Riesen <raa.lkml@gmail.com>
Date
Apr 22, 2006, 20:46 UTC
Message-ID
<20060422204642.GA7676@steel.home>

I had a project where lots of files were "accidentally" marked +x, and doing plain "git-update-index --chmod=-x" for each file was too slow. Besides, it's somewhat inconsistent, that --chmod does work only for one subsequent file.

---
Yes, windows again.
 update-index.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)
5c7b9c2d187f36ba8b5632d2125f2bd19abb3564
diff --git a/update-index.c b/update-index.c
index 1efac27..c3c2000 100644
--- a/update-index.c
+++ b/update-index.c
@@ -350,6 +350,7 @@ static int chmod_path(int flip, const ch
 		return -1;
 	}
 	active_cache_changed = 1;
+	report("chmod %cx '%s'", flip, path);
 	return 0;
 }
 
@@ -478,6 +479,7 @@ int main(int argc, const char **argv)
 	int read_from_stdin = 0;
 	const char *prefix = setup_git_directory();
 	int prefix_length = prefix ? strlen(prefix) : 0;
+	char chmod_mode = 0;
 
 	git_config(git_default_config);
 
@@ -544,8 +546,7 @@ int main(int argc, const char **argv)
 			    !strcmp(path, "--chmod=+x")) {
 				if (argc <= i+1)
 					die("git-update-index: %s <path>", path);
-				if (chmod_path(path[8], argv[++i]))
-					die("git-update-index: %s cannot chmod %s", path, argv[i]);
+				chmod_mode = path[8];
 				continue;
 			}
 			if (!strcmp(path, "--assume-unchanged")) {
@@ -594,6 +595,11 @@ int main(int argc, const char **argv)
 			die("unknown option %s", path);
 		}
 		update_one(path, prefix, prefix_length);
+		if ( chmod_mode ) {
+			if (chmod_path(chmod_mode, path))
+				die("git-update-index: cannot chmod %cx %s",
+				    chmod_mode, path);
+		}
 	}
 	if (read_from_stdin) {
 		struct strbuf buf;
@@ -608,6 +614,12 @@ int main(int argc, const char **argv)
 			else
 				path_name = buf.buf;
 			update_one(path_name, prefix, prefix_length);
+			if ( chmod_mode ) {
+				const char *p = prefix_path(prefix, prefix_length, path_name);
+				if (chmod_path(chmod_mode, p))
+					die("git-update-index: cannot chmod %cx %s",
+					    chmod_mode, p);
+			}
 			if (path_name != buf.buf)
 				free(path_name);
 		}
-- 
1.3.0.gc2941
Next: Junio C Hamano
Message 1 of 4 in “make update-index --chmod work with multiple files and --stdin”
  1. Alex RiesenApr 22, 2006
  2. Junio C HamanoApr 23, 2006
  3. Alex RiesenApr 23, 2006
  4. Alex RiesenApr 23, 2006

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.