MCPcopy Create free account
hub / github.com/git/git / traverse_trees

Function traverse_trees

tree-walk.c:434–560  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

432}
433
434int traverse_trees(struct index_state *istate,
435 int n, struct tree_desc *t,
436 struct traverse_info *info)
437{
438 int ret = 0;
439 struct name_entry *entry;
440 int i;
441 struct tree_desc_x *tx;
442 struct strbuf base = STRBUF_INIT;
443 int interesting = 1;
444 char *traverse_path;
445 struct repository *r = istate ? istate->repo : the_repository;
446
447 if (traverse_trees_cur_depth > r->settings.max_allowed_tree_depth)
448 return error("exceeded maximum allowed tree depth");
449
450 traverse_trees_count++;
451 traverse_trees_cur_depth++;
452
453 if (traverse_trees_cur_depth > traverse_trees_max_depth)
454 traverse_trees_max_depth = traverse_trees_cur_depth;
455
456 ALLOC_ARRAY(entry, n);
457 ALLOC_ARRAY(tx, n);
458
459 for (i = 0; i < n; i++) {
460 tx[i].d = t[i];
461 tx[i].skip = NULL;
462 }
463
464 if (info->prev) {
465 strbuf_make_traverse_path(&base, info->prev,
466 info->name, info->namelen);
467 strbuf_addch(&base, '/');
468 traverse_path = xstrndup(base.buf, base.len);
469 } else {
470 traverse_path = xstrndup(info->name, info->pathlen);
471 }
472 info->traverse_path = traverse_path;
473 for (;;) {
474 int trees_used;
475 unsigned long mask, dirmask;
476 const char *first = NULL;
477 int first_len = 0;
478 struct name_entry *e = NULL;
479 int len;
480
481 for (i = 0; i < n; i++) {
482 e = entry + i;
483 extended_entry_extract(tx + i, e, NULL, 0);
484 }
485
486 /*
487 * A tree may have "t-2" at the current location even
488 * though it may have "t" that is a subtree behind it,
489 * and another tree may return "t". We want to grab
490 * all "t" from all trees to match in such a case.
491 */

Callers 8

traverse_trees_wrapperFunction · 0.85
handle_deferred_entriesFunction · 0.85
collect_merge_infoFunction · 0.85
traverse_trees_recursiveFunction · 0.85
unpack_treesFunction · 0.85
merged_sparse_dirFunction · 0.85
trivial_merge_treesFunction · 0.85

Calls 12

errorFunction · 0.85
strbuf_addchFunction · 0.85
xstrndupFunction · 0.85
extended_entry_extractFunction · 0.85
tree_entry_lenFunction · 0.85
name_compareFunction · 0.85
entry_clearFunction · 0.85
prune_traversalFunction · 0.85
update_extended_entryFunction · 0.85
free_extended_entryFunction · 0.85
strbuf_releaseFunction · 0.85

Tested by

no test coverage detected