diff options
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/read-cache.c b/read-cache.c index 53f1da815b..5703f30b6a 100644 --- a/read-cache.c +++ b/read-cache.c @@ -13,6 +13,16 @@ int cache_match_stat(struct cache_entry *ce, struct stat *st) { unsigned int changed = 0; + switch (ntohl(ce->ce_mode) & S_IFMT) { + case S_IFREG: + changed |= !S_ISREG(st->st_mode) ? TYPE_CHANGED : 0; + break; + case S_IFLNK: + changed |= !S_ISLNK(st->st_mode) ? TYPE_CHANGED : 0; + break; + default: + die("internal error: ce_mode is %o", ntohl(ce->ce_mode)); + } if (ce->ce_mtime.sec != htonl(st->st_mtime)) changed |= MTIME_CHANGED; if (ce->ce_ctime.sec != htonl(st->st_ctime)) |