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

Re: [PATCH] Only update the cygwin-related configuration during state auto-setup

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 24, 2008, 05:54 UTC
Message-ID
<7viqri35dq.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<81b0412b0810230607sfea05ddm62bd03f837fc922e@mail.gmail.com>
"Alex Riesen" <raa.lkml@gmail.com> writes:
> Otherwise the other global settings which were already read and set up will
> be overwritten ...
This is the answer to the question I asked in:
 http://thread.gmane.org/gmane.comp.version-control.git/97986/focus=98066
Perhaps we should use a separate variable as the original patch did, in:
  http://article.gmane.org/gmane.comp.version-control.git/97987
How about doing it like this instead?
diff --git i/compat/cygwin.c w/compat/cygwin.c
index f196753..ebac148 100644
--- i/compat/cygwin.c
+++ w/compat/cygwin.c
@@ -91,26 +91,32 @@ static int cygwin_stat(const char *path, struct stat *buf)
  * functions should be used. The choice is determined by core.ignorecygwinfstricks.
  * Reading this option is not always possible immediately as git_dir may be
  * not be set yet. So until it is set, use cygwin lstat/stat functions.
- * However, if the trust_executable_bit is set, we must use the Cygwin posix
+ * However, if core.filemode is set, we must use the Cygwin posix
  * stat/lstat as the Windows stat fuctions do not determine posix filemode.
+ *
+ * Note that git_cygwin_config() does NOT call git_default_config() and this
+ * is deliberate.  Many commands read from config to establish initial
+ * values in variables and later tweak them from elsewhere (e.g. command line).
+ * init_stat() is called lazily on demand, typically much late in the program,
+ * and calling git_default_config() from here would break such variables.
  */
 static int native_stat = 1;
-extern int trust_executable_bit;
+static int core_filemode;
 
 static int git_cygwin_config(const char *var, const char *value, void *cb)
 {
-	if (!strcmp(var, "core.ignorecygwinfstricks")) {
+	if (!strcmp(var, "core.ignorecygwinfstricks"))
 		native_stat = git_config_bool(var, value);
-		return 0;
-	}
-	return git_default_config(var, value, cb);
+	else if (!strcmp(var, "core.filemode"))
+		core_filemode = git_config_bool(var, value);
+	return 0;
 }
 
 static int init_stat(void)
 {
 	if (have_git_dir()) {
 		git_config(git_cygwin_config, NULL);
-		if (!trust_executable_bit && native_stat) {
+		if (!core_filemode && native_stat) {
 			cygwin_stat_fn = cygwin_stat;
 			cygwin_lstat_fn = cygwin_lstat;
 		} else {
Previous: Alex RiesenNext: Alex Riesen
Message 3 of 7 in “Only update the cygwin-related configuration during state auto-setup”
  1. Only update the cygwin-related configuration during state auto-setupAlex Riesen, Oct 23, 2008
  2. Alex RiesenOct 23, 2008
  3. Junio C HamanoOct 24, 2008
  4. Alex RiesenOct 24, 2008
  5. Nanako ShiraishiOct 27, 2008
  6. Junio C HamanoOct 28, 2008
  7. Alex RiesenOct 28, 2008

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.