@@ -254,6 +254,11 @@ void apply_virtualfilesystem(struct index_state *istate)
254254{
255255 char * buf , * entry ;
256256 int i ;
257+ int nr_unknown = 0 ;
258+ int nr_vfs_dirs = 0 ;
259+ int nr_vfs_rows = 0 ;
260+ int nr_bulk_skip = 0 ;
261+ int nr_explicit_skip = 0 ;
257262
258263 if (!git_config_get_virtualfilesystem ())
259264 return ;
@@ -271,35 +276,63 @@ void apply_virtualfilesystem(struct index_state *istate)
271276 if (buf [i ] == '\0' ) {
272277 int pos , len ;
273278
279+ nr_vfs_rows ++ ;
280+
274281 len = buf + i - entry ;
275282
276283 /* look for a directory wild card (ie "dir1/") */
277284 if (buf [i - 1 ] == '/' ) {
285+ nr_vfs_dirs ++ ;
278286 if (ignore_case )
279287 adjust_dirname_case (istate , entry );
280288 pos = index_name_pos (istate , entry , len );
281289 if (pos < 0 ) {
282290 pos = - pos - 1 ;
283291 while (pos < istate -> cache_nr && !fspathncmp (istate -> cache [pos ]-> name , entry , len )) {
292+ if (istate -> cache [pos ]-> ce_flags & CE_SKIP_WORKTREE )
293+ nr_bulk_skip ++ ;
284294 istate -> cache [pos ]-> ce_flags &= ~CE_SKIP_WORKTREE ;
285295 pos ++ ;
286296 }
287297 }
288298 } else {
289299 if (ignore_case ) {
290300 struct cache_entry * ce = index_file_exists (istate , entry , len , ignore_case );
291- if (ce )
301+ if (ce ) {
302+ if (ce -> ce_flags & CE_SKIP_WORKTREE )
303+ nr_explicit_skip ++ ;
292304 ce -> ce_flags &= ~CE_SKIP_WORKTREE ;
305+ }
306+ else {
307+ nr_unknown ++ ;
308+ }
293309 } else {
294310 int pos = index_name_pos (istate , entry , len );
295- if (pos >= 0 )
311+ if (pos >= 0 ) {
312+ if (istate -> cache [pos ]-> ce_flags & CE_SKIP_WORKTREE )
313+ nr_explicit_skip ++ ;
296314 istate -> cache [pos ]-> ce_flags &= ~CE_SKIP_WORKTREE ;
315+ }
316+ else {
317+ nr_unknown ++ ;
318+ }
297319 }
298320 }
299321
300322 entry += len + 1 ;
301323 }
302324 }
325+
326+ if (nr_vfs_rows > 0 ) {
327+ trace2_data_intmax ("vfs" , the_repository , "apply/tracked" , nr_bulk_skip + nr_explicit_skip );
328+
329+ trace2_data_intmax ("vfs" , the_repository , "apply/vfs_rows" , nr_vfs_rows );
330+ trace2_data_intmax ("vfs" , the_repository , "apply/vfs_dirs" , nr_vfs_dirs );
331+
332+ trace2_data_intmax ("vfs" , the_repository , "apply/nr_unknown" , nr_unknown );
333+ trace2_data_intmax ("vfs" , the_repository , "apply/nr_bulk_skip" , nr_bulk_skip );
334+ trace2_data_intmax ("vfs" , the_repository , "apply/nr_explicit_skip" , nr_explicit_skip );
335+ }
303336}
304337
305338/*
0 commit comments