unpack-trees: special case read-tree debugging as internal usage

builtin/read-tree.c has some special functionality explicitly designed
for debugging unpack-trees.[ch].  Associated with that is two fields
that no other external caller would or should use.  Mark these as
internal to unpack-trees, but allow builtin/read-tree to read or write
them for this special case.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Elijah Newren 2023-02-27 15:28:19 +00:00 committed by Junio C Hamano
parent 0d680a7158
commit 1ca13dd3ca
3 changed files with 19 additions and 19 deletions

View File

@ -87,9 +87,9 @@ static int debug_merge(const struct cache_entry * const *stages,
{ {
int i; int i;


printf("* %d-way merge\n", o->merge_size); printf("* %d-way merge\n", o->internal.merge_size);
debug_stage("index", stages[0], o); debug_stage("index", stages[0], o);
for (i = 1; i <= o->merge_size; i++) { for (i = 1; i <= o->internal.merge_size; i++) {
char buf[24]; char buf[24];
xsnprintf(buf, sizeof(buf), "ent#%d", i); xsnprintf(buf, sizeof(buf), "ent#%d", i);
debug_stage(buf, stages[i], o); debug_stage(buf, stages[i], o);
@ -144,7 +144,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
OPT__DRY_RUN(&opts.dry_run, N_("don't update the index or the work tree")), OPT__DRY_RUN(&opts.dry_run, N_("don't update the index or the work tree")),
OPT_BOOL(0, "no-sparse-checkout", &opts.skip_sparse_checkout, OPT_BOOL(0, "no-sparse-checkout", &opts.skip_sparse_checkout,
N_("skip applying sparse checkout filter")), N_("skip applying sparse checkout filter")),
OPT_BOOL(0, "debug-unpack", &opts.debug_unpack, OPT_BOOL(0, "debug-unpack", &opts.internal.debug_unpack,
N_("debug unpack-trees")), N_("debug unpack-trees")),
OPT_CALLBACK_F(0, "recurse-submodules", NULL, OPT_CALLBACK_F(0, "recurse-submodules", NULL,
"checkout", "control recursive updating of submodules", "checkout", "control recursive updating of submodules",
@ -247,7 +247,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
opts.head_idx = 1; opts.head_idx = 1;
} }


if (opts.debug_unpack) if (opts.internal.debug_unpack)
opts.fn = debug_merge; opts.fn = debug_merge;


/* If we're going to prime_cache_tree later, skip cache tree update */ /* If we're going to prime_cache_tree later, skip cache tree update */
@ -263,7 +263,7 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
if (unpack_trees(nr_trees, t, &opts)) if (unpack_trees(nr_trees, t, &opts))
return 128; return 128;


if (opts.debug_unpack || opts.dry_run) if (opts.internal.debug_unpack || opts.dry_run)
return 0; /* do not write the index out */ return 0; /* do not write the index out */


/* /*

View File

@ -839,7 +839,7 @@ static int traverse_by_cache_tree(int pos, int nr_entries, int nr_names,
mark_ce_used(src[0], o); mark_ce_used(src[0], o);
} }
free(tree_ce); free(tree_ce);
if (o->debug_unpack) if (o->internal.debug_unpack)
printf("Unpacked %d entries from %s to %s using cache-tree\n", printf("Unpacked %d entries from %s to %s using cache-tree\n",
nr_entries, nr_entries,
o->src_index->cache[pos]->name, o->src_index->cache[pos]->name,
@ -1488,7 +1488,7 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
while (!p->mode) while (!p->mode)
p++; p++;


if (o->debug_unpack) if (o->internal.debug_unpack)
debug_unpack_callback(n, mask, dirmask, names, info); debug_unpack_callback(n, mask, dirmask, names, info);


/* Are we supposed to look at the index too? */ /* Are we supposed to look at the index too? */
@ -1929,7 +1929,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
init_split_index(&o->internal.result); init_split_index(&o->internal.result);
} }
oidcpy(&o->internal.result.oid, &o->src_index->oid); oidcpy(&o->internal.result.oid, &o->src_index->oid);
o->merge_size = len; o->internal.merge_size = len;
mark_all_ce_unused(o->src_index); mark_all_ce_unused(o->src_index);


o->internal.result.fsmonitor_last_update = o->internal.result.fsmonitor_last_update =
@ -2882,9 +2882,9 @@ int twoway_merge(const struct cache_entry * const *src,
const struct cache_entry *oldtree = src[1]; const struct cache_entry *oldtree = src[1];
const struct cache_entry *newtree = src[2]; const struct cache_entry *newtree = src[2];


if (o->merge_size != 2) if (o->internal.merge_size != 2)
return error("Cannot do a twoway merge of %d trees", return error("Cannot do a twoway merge of %d trees",
o->merge_size); o->internal.merge_size);


if (oldtree == o->df_conflict_entry) if (oldtree == o->df_conflict_entry)
oldtree = NULL; oldtree = NULL;
@ -2964,9 +2964,9 @@ int bind_merge(const struct cache_entry * const *src,
const struct cache_entry *old = src[0]; const struct cache_entry *old = src[0];
const struct cache_entry *a = src[1]; const struct cache_entry *a = src[1];


if (o->merge_size != 1) if (o->internal.merge_size != 1)
return error("Cannot do a bind merge of %d trees", return error("Cannot do a bind merge of %d trees",
o->merge_size); o->internal.merge_size);
if (a && old) if (a && old)
return o->quiet ? -1 : return o->quiet ? -1 :
error(ERRORMSG(o, ERROR_BIND_OVERLAP), error(ERRORMSG(o, ERROR_BIND_OVERLAP),
@ -2990,9 +2990,9 @@ int oneway_merge(const struct cache_entry * const *src,
const struct cache_entry *old = src[0]; const struct cache_entry *old = src[0];
const struct cache_entry *a = src[1]; const struct cache_entry *a = src[1];


if (o->merge_size != 1) if (o->internal.merge_size != 1)
return error("Cannot do a oneway merge of %d trees", return error("Cannot do a oneway merge of %d trees",
o->merge_size); o->internal.merge_size);


if (!a || a == o->df_conflict_entry) if (!a || a == o->df_conflict_entry)
return deleted_entry(old, old, o); return deleted_entry(old, old, o);
@ -3027,8 +3027,8 @@ int stash_worktree_untracked_merge(const struct cache_entry * const *src,
const struct cache_entry *worktree = src[1]; const struct cache_entry *worktree = src[1];
const struct cache_entry *untracked = src[2]; const struct cache_entry *untracked = src[2];


if (o->merge_size != 2) if (o->internal.merge_size != 2)
BUG("invalid merge_size: %d", o->merge_size); BUG("invalid merge_size: %d", o->internal.merge_size);


if (worktree && untracked) if (worktree && untracked)
return error(_("worktree and untracked commit have duplicate entries: %s"), return error(_("worktree and untracked commit have duplicate entries: %s"),

View File

@ -65,7 +65,6 @@ struct unpack_trees_options {
skip_unmerged, skip_unmerged,
initial_checkout, initial_checkout,
diff_index_cached, diff_index_cached,
debug_unpack,
skip_sparse_checkout, skip_sparse_checkout,
quiet, quiet,
exiting_early, exiting_early,
@ -78,7 +77,6 @@ struct unpack_trees_options {
merge_fn_t fn; merge_fn_t fn;


int head_idx; int head_idx;
int merge_size;


struct cache_entry *df_conflict_entry; struct cache_entry *df_conflict_entry;
void *unpack_data; void *unpack_data;
@ -90,8 +88,10 @@ struct unpack_trees_options {


struct unpack_trees_options_internal { struct unpack_trees_options_internal {
unsigned int nontrivial_merge, unsigned int nontrivial_merge,
show_all_errors; show_all_errors,
debug_unpack; /* used by read-tree debugging */


int merge_size; /* used by read-tree debugging */
int cache_bottom; int cache_bottom;
const char *msgs[NB_UNPACK_TREES_WARNING_TYPES]; const char *msgs[NB_UNPACK_TREES_WARNING_TYPES];
struct strvec msgs_to_free; struct strvec msgs_to_free;