Add check program "git-check-racy"

This will help counting the racily clean paths, but it should be
useless for daily use.  Do not even enable it in the makefile.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-08-15 21:38:07 -07:00
parent 520cd3eca5
commit 42f774063d
3 changed files with 42 additions and 4 deletions

View File

@ -194,7 +194,11 @@ PROGRAMS = \
git-update-server-info$X \
git-upload-pack$X git-verify-pack$X \
git-pack-redundant$X git-var$X \
git-describe$X git-merge-tree$X git-blame$X git-imap-send$X
git-describe$X git-merge-tree$X git-blame$X git-imap-send$X \
$(EXTRA_PROGRAMS)
# Empty...
EXTRA_PROGRAMS =
BUILT_INS = \
git-format-patch$X git-show$X git-whatchanged$X \

28
check-racy.c Normal file
View File

@ -0,0 +1,28 @@
#include "cache.h"
int main(int ac, char **av)
{
int i;
int dirty, clean, racy;
dirty = clean = racy = 0;
read_cache();
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
struct stat st;
if (lstat(ce->name, &st)) {
error("lstat(%s): %s", ce->name, strerror(errno));
continue;
}
if (ce_match_stat(ce, &st, 0))
dirty++;
else if (ce_match_stat(ce, &st, 2))
racy++;
else
clean++;
}
printf("dirty %d, clean %d, racy %d\n", dirty, clean, racy);
return 0;
}

View File

@ -169,9 +169,11 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
return changed;
}
int ce_match_stat(struct cache_entry *ce, struct stat *st, int ignore_valid)
int ce_match_stat(struct cache_entry *ce, struct stat *st, int options)
{
unsigned int changed;
int ignore_valid = options & 01;
int assume_racy_is_modified = options & 02;
/*
* If it's marked as always valid in the index, it's
@ -200,8 +202,12 @@ int ce_match_stat(struct cache_entry *ce, struct stat *st, int ignore_valid)
*/
if (!changed &&
index_file_timestamp &&
index_file_timestamp <= ntohl(ce->ce_mtime.sec))
changed |= ce_modified_check_fs(ce, st);
index_file_timestamp <= ntohl(ce->ce_mtime.sec)) {
if (assume_racy_is_modified)
changed |= DATA_CHANGED;
else
changed |= ce_modified_check_fs(ce, st);
}
return changed;
}