summaryrefslogtreecommitdiff
path: root/read-cache.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-22 15:08:15 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-22 15:08:15 -0700
commit2cb45e95438c113871fbbea5b4f629f9463034e7 (patch)
tree010a767b55ccb6b44c73024ab1fb8de536c5137c /read-cache.c
parent09d74b3b5ac634495e17b92b2b785fa996ffce97 (diff)
downloadgit-2cb45e95438c113871fbbea5b4f629f9463034e7.tar.gz
Don't care about st_dev in the index file
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.
Diffstat (limited to 'read-cache.c')
-rw-r--r--read-cache.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/read-cache.c b/read-cache.c
index 24ebe383d7..34c040ad6c 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -17,7 +17,7 @@ void fill_stat_cache_info(struct cache_entry *ce, struct stat *st)
{
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
@@ -50,7 +50,7 @@ int ce_match_stat(struct cache_entry *ce, struct stat *st)
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
@@ -65,9 +65,19 @@ int ce_match_stat(struct cache_entry *ce, struct stat *st)
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;