[PATCH 9/9] merge: use new "reset" function instead of running "git read-tree"
flat view
DORMANTno replies
From: Christian Couder <hidden>
Date: 2016-06-15 22:48:11
Subsystem:
the rest · Maintainer:
Linus Torvalds
This simplifies "git merge" code and make it more efficient in some cases. Signed-off-by: Christian Couder <redacted> --- builtin-merge.c | 31 +++++++++++-------------------- 1 files changed, 11 insertions(+), 20 deletions(-)
diff --git a/builtin-merge.c b/builtin-merge.c
index 3aaec7b..de2343a 100644
--- a/builtin-merge.c
+++ b/builtin-merge.c@@ -25,6 +25,7 @@ #include "help.h" #include "merge-recursive.h" #include "resolve-undo.h" +#include "reset.h" #define DEFAULT_TWOHEAD (1<<0) #define DEFAULT_OCTOPUS (1<<1)
@@ -231,24 +232,14 @@ static void save_state(void) die("not a valid object: %s", buffer.buf); } -static void reset_hard(unsigned const char *sha1, int verbose) +static void reset_hard(const char *prefix, unsigned const char *sha1, int verbose) { - int i = 0; - const char *args[6]; - - args[i++] = "read-tree"; - if (verbose) - args[i++] = "-v"; - args[i++] = "--reset"; - args[i++] = "-u"; - args[i++] = sha1_to_hex(sha1); - args[i] = NULL; - - if (run_command_v_opt(args, RUN_GIT_CMD)) - die("read-tree failed"); + int res = reset(sha1_to_hex(sha1), prefix, HARD, !verbose, 0, 0, NULL); + if (res) + die("hard reset failed"); } -static void restore_state(void) +static void restore_state(const char *prefix) { struct strbuf sb = STRBUF_INIT; const char *args[] = { "stash", "apply", NULL, NULL };
@@ -256,7 +247,7 @@ static void restore_state(void) if (is_null_sha1(stash)) return; - reset_hard(head, 1); + reset_hard(prefix, head, 1); args[2] = sha1_to_hex(stash);
@@ -970,7 +961,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) die("%s - not something we can merge", argv[0]); update_ref("initial pull", "HEAD", remote_head->sha1, NULL, 0, DIE_ON_ERR); - reset_hard(remote_head->sha1, 0); + reset_hard(prefix, remote_head->sha1, 0); return 0; } else { struct strbuf msg = STRBUF_INIT;
@@ -1167,7 +1158,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) int ret; if (i) { printf("Rewinding the tree to pristine...\n"); - restore_state(); + restore_state(prefix); } if (use_strategies_nr != 1) printf("Trying merge strategy %s...\n",
@@ -1228,7 +1219,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) * it up. */ if (!best_strategy) { - restore_state(); + restore_state(prefix); if (use_strategies_nr > 1) fprintf(stderr, "No merge strategy handled the merge.\n");
@@ -1240,7 +1231,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) ; /* We already have its result in the working tree. */ else { printf("Rewinding the tree to pristine...\n"); - restore_state(); + restore_state(prefix); printf("Using the %s to prepare resolving by hand.\n", best_strategy); try_merge_strategy(best_strategy, common, head_arg);
--
1.6.6.1.557.g77031