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.maint
parent
eb38c22f53
commit
734aab758c
10
cache.h
10
cache.h
|
@ -71,9 +71,17 @@ unsigned int active_nr, active_alloc;
|
||||||
|
|
||||||
#define alloc_nr(x) (((x)+16)*3/2)
|
#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 read_cache(void);
|
||||||
extern int cache_name_pos(const char *name, int namelen);
|
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 */
|
/* Return a statically allocated filename matching the sha1 signature */
|
||||||
extern char *sha1_file_name(unsigned char *sha1);
|
extern char *sha1_file_name(unsigned char *sha1);
|
23
read-cache.c
23
read-cache.c
|
@ -222,6 +222,29 @@ static int error(const char * string)
|
||||||
return -1;
|
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)
|
static int cache_name_compare(const char *name1, int len1, const char *name2, int len2)
|
||||||
{
|
{
|
||||||
int len = len1 < len2 ? len1 : len2;
|
int len = len1 < len2 ? len1 : len2;
|
32
show-diff.c
32
show-diff.c
|
@ -5,36 +5,6 @@
|
||||||
*/
|
*/
|
||||||
#include "cache.h"
|
#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,
|
static void show_differences(struct cache_entry *ce, struct stat *cur,
|
||||||
void *old_contents, unsigned long long old_size)
|
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));
|
printf("%s: %s\n", ce->name, strerror(errno));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
changed = match_stat(ce, &st);
|
changed = cache_match_stat(ce, &st);
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
printf("%s: ok\n", ce->name);
|
printf("%s: ok\n", ce->name);
|
||||||
continue;
|
continue;
|
Loading…
Reference in New Issue