git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Add core.trustlowlevelstat for diffs in dev,ino,uid and gid
@ 2009-04-26 10:55 Robin Rosenberg
  2009-04-26 11:06 ` Robin Rosenberg
  0 siblings, 1 reply; 12+ messages in thread
From: Robin Rosenberg @ 2009-04-26 10:55 UTC (permalink / raw)
  To: junkio; +Cc: git, spearce, Robin Rosenberg

This reason we may want to ignore these fields is that the Java implementation 
of Git cannot set these fields properly. To mark this JGit sets these fields
to to UINT_MAX (all bits set).

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 Documentation/config.txt |    7 +++++++
 cache.h                  |    1 +
 config.c                 |    4 ++++
 environment.c            |    1 +
 read-cache.c             |    8 ++++----
 5 files changed, 17 insertions(+), 4 deletions(-)

In addition to this you may want to set core.trustctime to false

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 3188569..bdf05ba 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -135,6 +135,13 @@ core.trustctime::
 	crawlers and some backup systems).
 	See linkgit:git-update-index[1]. True by default.
 
+core.trustlowlevelstat::
+    If false, differences in the index in the dev, ino, uid and gid
+    fields are ignored. Useful when using git implementations that
+    cannot set these fields correctly, such as Java programs like JGit
+    used by the EGit plugin for Eclipse.
+	See linkgit:git-update-index[1]. True by default.
+
 core.quotepath::
 	The commands that output paths (e.g. 'ls-files',
 	'diff'), when not given the `-z` option, will quote
diff --git a/cache.h b/cache.h
index ab1294d..194021c 100644
--- a/cache.h
+++ b/cache.h
@@ -500,6 +500,7 @@ extern int delete_ref(const char *, const unsigned char *sha1, int delopt);
 /* Environment bits from configuration mechanism */
 extern int trust_executable_bit;
 extern int trust_ctime;
+extern int trust_lowlevelstat;
 extern int quote_path_fully;
 extern int has_symlinks;
 extern int ignore_case;
diff --git a/config.c b/config.c
index 8c1ae59..d8679e7 100644
--- a/config.c
+++ b/config.c
@@ -364,6 +364,10 @@ static int git_default_core_config(const char *var, const char *value)
 		trust_ctime = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "core.trustlowlevelstat")) {
+		trust_lowlevelstat = git_config_bool(var, value);
+		return 0;
+	}
 
 	if (!strcmp(var, "core.quotepath")) {
 		quote_path_fully = git_config_bool(var, value);
diff --git a/environment.c b/environment.c
index 4696885..194a289 100644
--- a/environment.c
+++ b/environment.c
@@ -14,6 +14,7 @@ char git_default_name[MAX_GITNAME];
 int user_ident_explicitly_given;
 int trust_executable_bit = 1;
 int trust_ctime = 1;
+int trust_lowlevelstat = 1;
 int has_symlinks = 1;
 int ignore_case;
 int assume_unchanged;
diff --git a/read-cache.c b/read-cache.c
index 45083ab..f8f497f 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -210,10 +210,10 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
 		changed |= CTIME_CHANGED;
 #endif
 
-	if ((ce->ce_uid != ~0u && ce->ce_uid != (unsigned int) st->st_uid) ||
-	    (ce->ce_gid != ~0u && ce->ce_gid != (unsigned int) st->st_gid))
+	if ((trust_lowlevelstat && ce->ce_uid != (unsigned int) st->st_uid) ||
+	    (trust_lowlevelstat && ce->ce_gid != (unsigned int) st->st_gid))
 		changed |= OWNER_CHANGED;
-	if (ce->ce_ino != ~0u && ce->ce_ino != (unsigned int) st->st_ino)
+	if (trust_lowlevelstat && ce->ce_ino != (unsigned int) st->st_ino)
 		changed |= INODE_CHANGED;
 
 #ifdef USE_STDEV
@@ -222,7 +222,7 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
 	 * clients will have different views of what "device"
 	 * the filesystem is on
 	 */
-	if (ce->ce_dev != ~0u && ce->ce_dev != (unsigned int) st->st_dev)
+	if (trust_lowlevelstat && ce->ce_dev != (unsigned int) st->st_dev)
 		changed |= INODE_CHANGED;
 #endif
 
-- 
1.6.3.rc2.1.g4f9e8.dirty

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2010-03-15  7:41 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-26 10:55 [PATCH] Add core.trustlowlevelstat for diffs in dev,ino,uid and gid Robin Rosenberg
2009-04-26 11:06 ` Robin Rosenberg
2009-04-26 12:06   ` [PATCH 1/2] Silence diffs due to use by non-C code Robin Rosenberg
2009-04-26 18:38   ` [PATCH] Add core.trustlowlevelstat for diffs in dev,ino,uid and gid Junio C Hamano
2009-04-26 19:25     ` Linus Torvalds
2009-04-26 22:02       ` Robin Rosenberg
2009-04-27  6:55       ` Junio C Hamano
2009-04-27 15:00         ` Linus Torvalds
2009-04-27 15:58           ` Kjetil Barvik
2010-03-14 20:51             ` Robin Rosenberg
2010-03-15  6:50               ` Junio C Hamano
2010-03-15  7:41                 ` Alex Riesen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).