Skip to content

Commit

Permalink
Make the cache stat information comparator public.
Browse files Browse the repository at this point in the history
Like the cache filename finder, it's a generically useful function,
rather than something specific to the current "show-diff" thing.
  • Loading branch information
Linus Torvalds committed Apr 9, 2005
1 parent eb38c22 commit 734aab7
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 32 deletions.
10 changes: 9 additions & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
23 changes: 23 additions & 0 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
32 changes: 1 addition & 31 deletions show-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 734aab7

Please sign in to comment.