On Wed, Jun 26, 2013 at 06:35:52PM -0400, Jeff King wrote:
> I am curious how often Cygwin gives us the false positive. If it is
> every time, then the check is not doing much good at all. Is it possible
> for you to instrument stat_validity_check to report how often it does or
> does not do anything useful?
Maybe like this:
diff --git a/read-cache.c b/read-cache.c
index d5201f9..19dcb69 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1958,6 +1958,14 @@ void stat_validity_clear(struct stat_validity *sv)
sv->sd = NULL;
}
+static int unchanged;
+static int attempts;
+static void print_stats(void)
+{
+ fprintf(stderr, "stat data was unchanged %d/%d\n",
+ unchanged, attempts);
+}
+
int stat_validity_check(struct stat_validity *sv, const char *path)
{
struct stat st;
@@ -1966,7 +1974,16 @@ int stat_validity_check(struct stat_validity *sv, const
char *path)
return sv->sd == NULL;
if (!sv->sd)
return 0;
- return S_ISREG(st.st_mode) && !match_stat_data(sv->sd, &st);
+ if (!S_ISREG(st.st_mode))
+ return 0;
+ if (!attempts++)
+ atexit(print_stats);
+ if (!match_stat_data(sv->sd, &st)) {
+ unchanged++;
+ return 1;
+ }
+ else
+ return 0;
}
void stat_validity_update(struct stat_validity *sv, int fd)
Running "t3211 -v", I see things like:
stat data was unchanged 3/3
stat data was unchanged 20/20
stat data was unchanged 2/2
Deleted branch yadda (was d1ff1c9).
stat data was unchanged 8/8
ok 8 - peeled refs survive deletion of packed ref
I am curious if you will see 0/20 or 19/20 there on Cygwin.
-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html