Skip to content

Commit

Permalink
Add check program "git-check-racy"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Aug 16, 2006
1 parent 520cd3e commit 42f7740
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
28 changes: 28 additions & 0 deletions check-racy.c
Original file line number Diff line number Diff line change
@@ -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 changes: 9 additions & 3 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 42f7740

Please sign in to comment.