From: Linus Torvalds Date: Sat, 9 Apr 2005 16:48:20 +0000 (-0700) Subject: Make the cache stat information comparator public. X-Git-Tag: v0.99~941 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=734aab758cc2b9f5e2ed43375dbfec1b5bfde43b;p=git.git Make the cache stat information comparator public. Like the cache filename finder, it's a generically useful function, rather than something specific to the current "show-diff" thing. --- diff --git a/cache.h b/cache.h index a23ad51a..0038e8b8 100644 --- a/cache.h +++ b/cache.h @@ -71,9 +71,17 @@ unsigned int active_nr, active_alloc; #define alloc_nr(x) (((x)+16)*3/2) -/* Initialize the cache information */ +/* Initialize and use the cache information */ extern int read_cache(void); extern int cache_name_pos(const char *name, int namelen); +extern int cache_match_stat(struct cache_entry *ce, struct stat *st); + +#define MTIME_CHANGED 0x0001 +#define CTIME_CHANGED 0x0002 +#define OWNER_CHANGED 0x0004 +#define MODE_CHANGED 0x0008 +#define INODE_CHANGED 0x0010 +#define DATA_CHANGED 0x0020 /* Return a statically allocated filename matching the sha1 signature */ extern char *sha1_file_name(unsigned char *sha1); diff --git a/read-cache.c b/read-cache.c index 44b4b0fc..c42d2de3 100644 --- a/read-cache.c +++ b/read-cache.c @@ -222,6 +222,29 @@ static int error(const char * string) return -1; } +int cache_match_stat(struct cache_entry *ce, struct stat *st) +{ + unsigned int changed = 0; + + if (ce->mtime.sec != (unsigned int)st->st_mtim.tv_sec || + ce->mtime.nsec != (unsigned int)st->st_mtim.tv_nsec) + changed |= MTIME_CHANGED; + if (ce->ctime.sec != (unsigned int)st->st_ctim.tv_sec || + ce->ctime.nsec != (unsigned int)st->st_ctim.tv_nsec) + changed |= CTIME_CHANGED; + if (ce->st_uid != (unsigned int)st->st_uid || + ce->st_gid != (unsigned int)st->st_gid) + changed |= OWNER_CHANGED; + if (ce->st_mode != (unsigned int)st->st_mode) + changed |= MODE_CHANGED; + if (ce->st_dev != (unsigned int)st->st_dev || + ce->st_ino != (unsigned int)st->st_ino) + changed |= INODE_CHANGED; + if (ce->st_size != (unsigned int)st->st_size) + changed |= DATA_CHANGED; + return changed; +} + static int cache_name_compare(const char *name1, int len1, const char *name2, int len2) { int len = len1 < len2 ? len1 : len2; diff --git a/show-diff.c b/show-diff.c index 3c6d4f98..d9af29fd 100644 --- a/show-diff.c +++ b/show-diff.c @@ -5,36 +5,6 @@ */ #include "cache.h" -#define MTIME_CHANGED 0x0001 -#define CTIME_CHANGED 0x0002 -#define OWNER_CHANGED 0x0004 -#define MODE_CHANGED 0x0008 -#define INODE_CHANGED 0x0010 -#define DATA_CHANGED 0x0020 - -static int match_stat(struct cache_entry *ce, struct stat *st) -{ - unsigned int changed = 0; - - if (ce->mtime.sec != (unsigned int)st->st_mtim.tv_sec || - ce->mtime.nsec != (unsigned int)st->st_mtim.tv_nsec) - changed |= MTIME_CHANGED; - if (ce->ctime.sec != (unsigned int)st->st_ctim.tv_sec || - ce->ctime.nsec != (unsigned int)st->st_ctim.tv_nsec) - changed |= CTIME_CHANGED; - if (ce->st_uid != (unsigned int)st->st_uid || - ce->st_gid != (unsigned int)st->st_gid) - changed |= OWNER_CHANGED; - if (ce->st_mode != (unsigned int)st->st_mode) - changed |= MODE_CHANGED; - if (ce->st_dev != (unsigned int)st->st_dev || - ce->st_ino != (unsigned int)st->st_ino) - changed |= INODE_CHANGED; - if (ce->st_size != (unsigned int)st->st_size) - changed |= DATA_CHANGED; - return changed; -} - static void show_differences(struct cache_entry *ce, struct stat *cur, void *old_contents, unsigned long long old_size) { @@ -68,7 +38,7 @@ int main(int argc, char **argv) printf("%s: %s\n", ce->name, strerror(errno)); continue; } - changed = match_stat(ce, &st); + changed = cache_match_stat(ce, &st); if (!changed) { printf("%s: ok\n", ce->name); continue;