dir: convert trace calls to trace2 equivalents
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
48bf2fa8ba
commit
7f9dd87922
50
dir.c
50
dir.c
|
@ -2751,15 +2751,46 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
|
|||
return root;
|
||||
}
|
||||
|
||||
static void emit_traversal_statistics(struct dir_struct *dir,
|
||||
struct repository *repo,
|
||||
const char *path,
|
||||
int path_len)
|
||||
{
|
||||
if (!trace2_is_enabled())
|
||||
return;
|
||||
|
||||
if (!path_len) {
|
||||
trace2_data_string("read_directory", repo, "path", "");
|
||||
} else {
|
||||
struct strbuf tmp = STRBUF_INIT;
|
||||
strbuf_add(&tmp, path, path_len);
|
||||
trace2_data_string("read_directory", repo, "path", tmp.buf);
|
||||
strbuf_release(&tmp);
|
||||
}
|
||||
|
||||
if (!dir->untracked)
|
||||
return;
|
||||
trace2_data_intmax("read_directory", repo,
|
||||
"node-creation", dir->untracked->dir_created);
|
||||
trace2_data_intmax("read_directory", repo,
|
||||
"gitignore-invalidation",
|
||||
dir->untracked->gitignore_invalidated);
|
||||
trace2_data_intmax("read_directory", repo,
|
||||
"directory-invalidation",
|
||||
dir->untracked->dir_invalidated);
|
||||
trace2_data_intmax("read_directory", repo,
|
||||
"opendir", dir->untracked->dir_opened);
|
||||
}
|
||||
|
||||
int read_directory(struct dir_struct *dir, struct index_state *istate,
|
||||
const char *path, int len, const struct pathspec *pathspec)
|
||||
{
|
||||
struct untracked_cache_dir *untracked;
|
||||
|
||||
trace_performance_enter();
|
||||
trace2_region_enter("dir", "read_directory", istate->repo);
|
||||
|
||||
if (has_symlink_leading_path(path, len)) {
|
||||
trace_performance_leave("read directory %.*s", len, path);
|
||||
trace2_region_leave("dir", "read_directory", istate->repo);
|
||||
return dir->nr;
|
||||
}
|
||||
|
||||
|
@ -2775,23 +2806,15 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
|
|||
QSORT(dir->entries, dir->nr, cmp_dir_entry);
|
||||
QSORT(dir->ignored, dir->ignored_nr, cmp_dir_entry);
|
||||
|
||||
trace_performance_leave("read directory %.*s", len, path);
|
||||
emit_traversal_statistics(dir, istate->repo, path, len);
|
||||
|
||||
trace2_region_leave("dir", "read_directory", istate->repo);
|
||||
if (dir->untracked) {
|
||||
static int force_untracked_cache = -1;
|
||||
static struct trace_key trace_untracked_stats = TRACE_KEY_INIT(UNTRACKED_STATS);
|
||||
|
||||
if (force_untracked_cache < 0)
|
||||
force_untracked_cache =
|
||||
git_env_bool("GIT_FORCE_UNTRACKED_CACHE", 0);
|
||||
trace_printf_key(&trace_untracked_stats,
|
||||
"node creation: %u\n"
|
||||
"gitignore invalidation: %u\n"
|
||||
"directory invalidation: %u\n"
|
||||
"opendir: %u\n",
|
||||
dir->untracked->dir_created,
|
||||
dir->untracked->gitignore_invalidated,
|
||||
dir->untracked->dir_invalidated,
|
||||
dir->untracked->dir_opened);
|
||||
if (force_untracked_cache &&
|
||||
dir->untracked == istate->untracked &&
|
||||
(dir->untracked->dir_opened ||
|
||||
|
@ -2802,6 +2825,7 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
|
|||
FREE_AND_NULL(dir->untracked);
|
||||
}
|
||||
}
|
||||
|
||||
return dir->nr;
|
||||
}
|
||||
|
||||
|
|
|
@ -57,6 +57,19 @@ iuc () {
|
|||
return $ret
|
||||
}
|
||||
|
||||
get_relevant_traces () {
|
||||
# From the GIT_TRACE2_PERF data of the form
|
||||
# $TIME $FILE:$LINE | d0 | main | data | r1 | ? | ? | read_directo | $RELEVANT_STAT
|
||||
# extract the $RELEVANT_STAT fields. We don't care about region_enter
|
||||
# or region_leave, or stats for things outside read_directory.
|
||||
INPUT_FILE=$1
|
||||
OUTPUT_FILE=$2
|
||||
grep data.*read_directo $INPUT_FILE |
|
||||
cut -d "|" -f 9 \
|
||||
>"$OUTPUT_FILE"
|
||||
}
|
||||
|
||||
|
||||
test_lazy_prereq UNTRACKED_CACHE '
|
||||
{ git update-index --test-untracked-cache; ret=$?; } &&
|
||||
test $ret -ne 1
|
||||
|
@ -129,19 +142,21 @@ EOF
|
|||
|
||||
test_expect_success 'status first time (empty cache)' '
|
||||
avoid_racy &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 3
|
||||
gitignore invalidation: 1
|
||||
directory invalidation: 0
|
||||
opendir: 4
|
||||
....path:
|
||||
....node-creation:3
|
||||
....gitignore-invalidation:1
|
||||
....directory-invalidation:0
|
||||
....opendir:4
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'untracked cache after first status' '
|
||||
|
@ -151,19 +166,21 @@ test_expect_success 'untracked cache after first status' '
|
|||
|
||||
test_expect_success 'status second time (fully populated cache)' '
|
||||
avoid_racy &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 0
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:0
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'untracked cache after second status' '
|
||||
|
@ -174,8 +191,8 @@ test_expect_success 'untracked cache after second status' '
|
|||
test_expect_success 'modify in root directory, one dir invalidation' '
|
||||
avoid_racy &&
|
||||
: >four &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -189,13 +206,15 @@ A two
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 1
|
||||
opendir: 1
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:1
|
||||
....opendir:1
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
|
||||
'
|
||||
|
||||
|
@ -223,8 +242,8 @@ EOF
|
|||
test_expect_success 'new .gitignore invalidates recursively' '
|
||||
avoid_racy &&
|
||||
echo four >.gitignore &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -238,13 +257,15 @@ A two
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 1
|
||||
directory invalidation: 1
|
||||
opendir: 4
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:1
|
||||
....directory-invalidation:1
|
||||
....opendir:4
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
|
||||
'
|
||||
|
||||
|
@ -272,8 +293,8 @@ EOF
|
|||
test_expect_success 'new info/exclude invalidates everything' '
|
||||
avoid_racy &&
|
||||
echo three >>.git/info/exclude &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -285,13 +306,15 @@ A two
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 1
|
||||
directory invalidation: 0
|
||||
opendir: 4
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:1
|
||||
....directory-invalidation:0
|
||||
....opendir:4
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'verify untracked cache dump' '
|
||||
|
@ -330,8 +353,8 @@ EOF
|
|||
'
|
||||
|
||||
test_expect_success 'status after the move' '
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -343,13 +366,15 @@ A one
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 1
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:1
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'verify untracked cache dump' '
|
||||
|
@ -389,8 +414,8 @@ EOF
|
|||
'
|
||||
|
||||
test_expect_success 'status after the move' '
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -402,13 +427,15 @@ A two
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 1
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:1
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'verify untracked cache dump' '
|
||||
|
@ -438,8 +465,8 @@ test_expect_success 'set up for sparse checkout testing' '
|
|||
'
|
||||
|
||||
test_expect_success 'status after commit' '
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -448,13 +475,15 @@ test_expect_success 'status after commit' '
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 2
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:2
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'untracked cache correct after commit' '
|
||||
|
@ -496,9 +525,9 @@ test_expect_success 'create/modify files, some of which are gitignored' '
|
|||
'
|
||||
|
||||
test_expect_success 'test sparse status with untracked cache' '
|
||||
: >../trace &&
|
||||
: >../trace.output &&
|
||||
avoid_racy &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../status.actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -509,13 +538,15 @@ test_expect_success 'test sparse status with untracked cache' '
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../status.actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 1
|
||||
directory invalidation: 2
|
||||
opendir: 2
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:1
|
||||
....directory-invalidation:2
|
||||
....opendir:2
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'untracked cache correct after status' '
|
||||
|
@ -539,8 +570,8 @@ EOF
|
|||
|
||||
test_expect_success 'test sparse status again with untracked cache' '
|
||||
avoid_racy &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../status.actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -551,13 +582,15 @@ test_expect_success 'test sparse status again with untracked cache' '
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../status.actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 0
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:0
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'set up for test of subdir and sparse checkouts' '
|
||||
|
@ -568,8 +601,8 @@ test_expect_success 'set up for test of subdir and sparse checkouts' '
|
|||
|
||||
test_expect_success 'test sparse status with untracked cache and subdir' '
|
||||
avoid_racy &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../status.actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
cat >../status.expect <<EOF &&
|
||||
|
@ -581,13 +614,15 @@ test_expect_success 'test sparse status with untracked cache and subdir' '
|
|||
EOF
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../status.actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 2
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 1
|
||||
opendir: 3
|
||||
....path:
|
||||
....node-creation:2
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:1
|
||||
....opendir:3
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'verify untracked cache dump (sparse/subdirs)' '
|
||||
|
@ -616,19 +651,21 @@ EOF
|
|||
|
||||
test_expect_success 'test sparse status again with untracked cache and subdir' '
|
||||
avoid_racy &&
|
||||
: >../trace &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace" \
|
||||
: >../trace.output &&
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
|
||||
git status --porcelain >../status.actual &&
|
||||
iuc status --porcelain >../status.iuc &&
|
||||
test_cmp ../status.expect ../status.iuc &&
|
||||
test_cmp ../status.expect ../status.actual &&
|
||||
get_relevant_traces ../trace.output ../trace.relevant &&
|
||||
cat >../trace.expect <<EOF &&
|
||||
node creation: 0
|
||||
gitignore invalidation: 0
|
||||
directory invalidation: 0
|
||||
opendir: 0
|
||||
....path:
|
||||
....node-creation:0
|
||||
....gitignore-invalidation:0
|
||||
....directory-invalidation:0
|
||||
....opendir:0
|
||||
EOF
|
||||
test_cmp ../trace.expect ../trace
|
||||
test_cmp ../trace.expect ../trace.relevant
|
||||
'
|
||||
|
||||
test_expect_success 'move entry in subdir from untracked to cached' '
|
||||
|
|
|
@ -334,7 +334,7 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
|
|||
git config core.fsmonitor .git/hooks/fsmonitor-test &&
|
||||
git update-index --untracked-cache &&
|
||||
git update-index --fsmonitor &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-before" \
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-before" \
|
||||
git status &&
|
||||
test-tool dump-untracked-cache >../before
|
||||
) &&
|
||||
|
@ -346,12 +346,12 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
|
|||
EOF
|
||||
(
|
||||
cd dot-git &&
|
||||
GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-after" \
|
||||
GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-after" \
|
||||
git status &&
|
||||
test-tool dump-untracked-cache >../after
|
||||
) &&
|
||||
grep "directory invalidation" trace-before >>before &&
|
||||
grep "directory invalidation" trace-after >>after &&
|
||||
grep "directory-invalidation" trace-before | cut -d"|" -f 9 >>before &&
|
||||
grep "directory-invalidation" trace-after | cut -d"|" -f 9 >>after &&
|
||||
# UNTR extension unchanged, dir invalidation count unchanged
|
||||
test_cmp before after
|
||||
'
|
||||
|
|
Loading…
Reference in New Issue