diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-09-14 02:22:00 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-07 15:00:14 -0800 |
commit | ba655da537a999670c7b21e0446e774a1f9733ea (patch) | |
tree | ccefcf54ec019795f4a6fd0a3372294f2a9041eb /builtin-read-tree.c | |
parent | 730f72840cc50c523fe4cdd796ea2d2fc4571a28 (diff) | |
download | git-ba655da537a999670c7b21e0446e774a1f9733ea.tar.gz |
read-tree --debug-unpack
A debugging patch.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-read-tree.c')
-rw-r--r-- | builtin-read-tree.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/builtin-read-tree.c b/builtin-read-tree.c index 2a3a32cbfe..0c1f40d10d 100644 --- a/builtin-read-tree.c +++ b/builtin-read-tree.c @@ -64,6 +64,34 @@ static int exclude_per_directory_cb(const struct option *opt, const char *arg, return 0; } +static void debug_stage(const char *label, struct cache_entry *ce, + struct unpack_trees_options *o) +{ + printf("%s ", label); + if (!ce) + printf("(missing)\n"); + else if (ce == o->df_conflict_entry) + printf("(conflict)\n"); + else + printf("%06o #%d %s %.8s\n", + ce->ce_mode, ce_stage(ce), ce->name, + sha1_to_hex(ce->sha1)); +} + +static int debug_merge(struct cache_entry **stages, struct unpack_trees_options *o) +{ + int i; + + printf("* %d-way merge\n", o->merge_size); + debug_stage("index", stages[0], o); + for (i = 1; i <= o->merge_size; i++) { + char buf[24]; + sprintf(buf, "ent#%d", i); + debug_stage(buf, stages[i], o); + } + return 0; +} + static struct lock_file lock_file; int cmd_read_tree(int argc, const char **argv, const char *unused_prefix) @@ -98,6 +126,8 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix) PARSE_OPT_NONEG, exclude_per_directory_cb }, OPT_SET_INT('i', NULL, &opts.index_only, "don't check the working tree after merging", 1), + OPT_SET_INT(0, "debug-unpack", &opts.debug_unpack, + "debug unpack-trees", 1), OPT_END() }; @@ -165,6 +195,9 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix) opts.head_idx = 1; } + if (opts.debug_unpack) + opts.fn = debug_merge; + cache_tree_free(&active_cache_tree); for (i = 0; i < nr_trees; i++) { struct tree *tree = trees[i]; @@ -174,6 +207,9 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix) if (unpack_trees(nr_trees, t, &opts)) return 128; + if (opts.debug_unpack) + return 0; /* do not write the index out */ + /* * When reading only one tree (either the most basic form, * "-m ent" or "--reset ent" form), we can obtain a fully |