summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 09d74b3)
raw | patch | inline | side by side (parent: 09d74b3)
author | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Sun, 22 May 2005 22:08:15 +0000 (15:08 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Sun, 22 May 2005 22:08:15 +0000 (15:08 -0700) |
Thomas Glanzmann points out that it doesn't work well with different
clients accessing the repository over NFS - they have different views
on what the "device" for the filesystem is.
Of course, other filesystems may not even have stable inode numbers.
But we don't care. At least for now.
clients accessing the repository over NFS - they have different views
on what the "device" for the filesystem is.
Of course, other filesystems may not even have stable inode numbers.
But we don't care. At least for now.
Makefile | patch | blob | history | |
read-cache.c | patch | blob | history |
diff --git a/Makefile b/Makefile
index 3dec8b83e2fdde91ce649c9016d80014be6809d3..04f7d78718b9d5cc8ad815d1bf4c4d1c1113d366 100644 (file)
--- a/Makefile
+++ b/Makefile
# 1461501637330902918203684832716283019655932542976 hashes do not give you
# enough guarantees about no collisions between objects ever hapenning.
#
-# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
+# -DUSE_NSEC if you want git to care about sub-second file mtimes and ctimes.
+# -DUSE_STDEV if you want git to care about st_dev changing
+#
# Note that you need some new glibc (at least >2.2.4) for this, and it will
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
# break unless your underlying filesystem supports those sub-second times
diff --git a/read-cache.c b/read-cache.c
index 24ebe383d7a4e72c8cd461f90b4b06bf5cfdb0d1..34c040ad6c3bd3d2f2f4228ec2aefb9945e0ff84 100644 (file)
--- a/read-cache.c
+++ b/read-cache.c
{
ce->ce_ctime.sec = htonl(st->st_ctime);
ce->ce_mtime.sec = htonl(st->st_mtime);
-#ifdef NSEC
+#ifdef USE_NSEC
ce->ce_ctime.nsec = htonl(st->st_ctim.tv_nsec);
ce->ce_mtime.nsec = htonl(st->st_mtim.tv_nsec);
#endif
if (ce->ce_ctime.sec != htonl(st->st_ctime))
changed |= CTIME_CHANGED;
-#ifdef NSEC
+#ifdef USE_NSEC
/*
* nsec seems unreliable - not all filesystems support it, so
* as long as it is in the inode cache you get right nsec
if (ce->ce_uid != htonl(st->st_uid) ||
ce->ce_gid != htonl(st->st_gid))
changed |= OWNER_CHANGED;
- if (ce->ce_dev != htonl(st->st_dev) ||
- ce->ce_ino != htonl(st->st_ino))
+ if (ce->ce_ino != htonl(st->st_ino))
changed |= INODE_CHANGED;
+
+#ifdef USE_STDEV
+ /*
+ * st_dev breaks on network filesystems where different
+ * clients will have different views of what "device"
+ * the filesystem is on
+ */
+ if (ce->ce_dev != htonl(st->st_dev))
+ changed |= INODE_CHANGED;
+#endif
+
if (ce->ce_size != htonl(st->st_size))
changed |= DATA_CHANGED;
return changed;