зеркало из https://github.com/microsoft/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.
This commit is contained in:
Родитель
eb38c22f53
Коммит
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)
|
||||
|
||||
/* 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);
|
23
read-cache.c
23
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;
|
32
show-diff.c
32
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;
|
Загрузка…
Ссылка в новой задаче