checkout: consolidate reset_{to_new,clean_to_new}()

These two were very similar functions with only tiny bit of difference.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2008-05-28 14:59:40 -07:00
Родитель 84a5750bc5
Коммит 6286a08db3
1 изменённых файлов: 25 добавлений и 45 удалений

Просмотреть файл

@ -151,48 +151,6 @@ static void describe_detached_head(char *msg, struct commit *commit)
strbuf_release(&sb);
}
static int reset_to_new(struct tree *tree, int quiet)
{
struct unpack_trees_options opts;
struct tree_desc tree_desc;
memset(&opts, 0, sizeof(opts));
opts.head_idx = -1;
opts.update = 1;
opts.reset = 1;
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = !quiet;
opts.src_index = &the_index;
opts.dst_index = &the_index;
parse_tree(tree);
init_tree_desc(&tree_desc, tree->buffer, tree->size);
if (unpack_trees(1, &tree_desc, &opts))
return 128;
return 0;
}
static int reset_clean_to_new(struct tree *tree, int quiet)
{
struct unpack_trees_options opts;
struct tree_desc tree_desc;
memset(&opts, 0, sizeof(opts));
opts.head_idx = -1;
opts.skip_unmerged = 1;
opts.reset = 1;
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = !quiet;
opts.src_index = &the_index;
opts.dst_index = &the_index;
parse_tree(tree);
init_tree_desc(&tree_desc, tree->buffer, tree->size);
if (unpack_trees(1, &tree_desc, &opts))
return 128;
return 0;
}
struct checkout_opts {
int quiet;
int merge;
@ -203,6 +161,28 @@ struct checkout_opts {
enum branch_track track;
};
static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
{
struct unpack_trees_options opts;
struct tree_desc tree_desc;
memset(&opts, 0, sizeof(opts));
opts.head_idx = -1;
opts.update = worktree;
opts.skip_unmerged = !worktree;
opts.reset = 1;
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = !o->quiet;
opts.src_index = &the_index;
opts.dst_index = &the_index;
parse_tree(tree);
init_tree_desc(&tree_desc, tree->buffer, tree->size);
if (unpack_trees(1, &tree_desc, &opts))
return 128;
return 0;
}
struct branch_info {
const char *name; /* The short name used */
const char *path; /* The full name of a real branch */
@ -227,7 +207,7 @@ static int merge_working_tree(struct checkout_opts *opts,
read_cache();
if (opts->force) {
ret = reset_to_new(new->commit->tree, opts->quiet);
ret = reset_tree(new->commit->tree, opts, 1);
if (ret)
return ret;
} else {
@ -291,12 +271,12 @@ static int merge_working_tree(struct checkout_opts *opts,
add_files_to_cache(NULL, NULL, 0);
work = write_tree_from_memory();
ret = reset_to_new(new->commit->tree, opts->quiet);
ret = reset_tree(new->commit->tree, opts, 1);
if (ret)
return ret;
merge_trees(new->commit->tree, work, old->commit->tree,
new->name, "local", &result);
ret = reset_clean_to_new(new->commit->tree, opts->quiet);
ret = reset_tree(new->commit->tree, opts, 0);
if (ret)
return ret;
}