[PATCH] Add core.trustlowlevelstat for diffs in dev,ino,uid and gid

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]