Make the cache stat information comparator public.
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 9 Apr 2005 16:48:20 +0000 (09:48 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 9 Apr 2005 16:48:20 +0000 (09:48 -0700)
Like the cache filename finder, it's a generically useful function,
rather than something specific to the current "show-diff" thing.

cache.h
read-cache.c
show-diff.c

diff --git a/cache.h b/cache.h
index a23ad51..0038e8b 100644 (file)
--- 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);
index 44b4b0f..c42d2de 100644 (file)
@@ -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;
index 3c6d4f9..d9af29f 100644 (file)
@@ -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;