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.
This commit is contained in:
Linus Torvalds 2005-04-09 09:48:20 -07:00
Родитель eb38c22f53
Коммит 734aab758c
3 изменённых файлов: 33 добавлений и 32 удалений

10
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);

Просмотреть файл

@ -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;

Просмотреть файл

@ -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;