Code

checkout: consolidate reset_{to_new,clean_to_new}()
authorJunio C Hamano <gitster@pobox.com>
Wed, 28 May 2008 21:59:40 +0000 (14:59 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 30 May 2008 00:35:10 +0000 (17:35 -0700)
These two were very similar functions with only tiny bit of difference.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-checkout.c

index cc97724c87aeb975f8b6e87bc891e98f678f11ee..9af5197b6060ce38c310d8b1f634c66e484ba1fc 100644 (file)
@@ -151,39 +151,29 @@ 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;
+struct checkout_opts {
+       int quiet;
+       int merge;
+       int force;
 
-       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;
-}
+       char *new_branch;
+       int new_branch_log;
+       enum branch_track track;
+};
 
-static int reset_clean_to_new(struct tree *tree, int quiet)
+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.skip_unmerged = 1;
+       opts.update = worktree;
+       opts.skip_unmerged = !worktree;
        opts.reset = 1;
        opts.merge = 1;
        opts.fn = oneway_merge;
-       opts.verbose_update = !quiet;
+       opts.verbose_update = !o->quiet;
        opts.src_index = &the_index;
        opts.dst_index = &the_index;
        parse_tree(tree);
@@ -193,16 +183,6 @@ static int reset_clean_to_new(struct tree *tree, int quiet)
        return 0;
 }
 
-struct checkout_opts {
-       int quiet;
-       int merge;
-       int force;
-
-       char *new_branch;
-       int new_branch_log;
-       enum branch_track track;
-};
-
 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;
                }