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:
parent
520cd3eca5
commit
42f774063d
6
Makefile
6
Makefile
@ -194,7 +194,11 @@ PROGRAMS = \
|
|||||||
git-update-server-info$X \
|
git-update-server-info$X \
|
||||||
git-upload-pack$X git-verify-pack$X \
|
git-upload-pack$X git-verify-pack$X \
|
||||||
git-pack-redundant$X git-var$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 = \
|
BUILT_INS = \
|
||||||
git-format-patch$X git-show$X git-whatchanged$X \
|
git-format-patch$X git-show$X git-whatchanged$X \
|
||||||
|
28
check-racy.c
Normal file
28
check-racy.c
Normal 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;
|
||||||
|
}
|
12
read-cache.c
12
read-cache.c
@ -169,9 +169,11 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st)
|
|||||||
return changed;
|
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;
|
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
|
* 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 &&
|
if (!changed &&
|
||||||
index_file_timestamp &&
|
index_file_timestamp &&
|
||||||
index_file_timestamp <= ntohl(ce->ce_mtime.sec))
|
index_file_timestamp <= ntohl(ce->ce_mtime.sec)) {
|
||||||
changed |= ce_modified_check_fs(ce, st);
|
if (assume_racy_is_modified)
|
||||||
|
changed |= DATA_CHANGED;
|
||||||
|
else
|
||||||
|
changed |= ce_modified_check_fs(ce, st);
|
||||||
|
}
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user