[RFC PATCH 11/35] update: add --merge mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx>
---
 Documentation/git-update.txt |  4 ++++
 builtin/update.c             | 20 +++++++++++++++++++-
 t/t5563-update.sh            | 15 +++++++++++++++
 3 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-update.txt b/Documentation/git-update.txt
index df778b7ef4..075653c6fd 100644
--- a/Documentation/git-update.txt
+++ b/Documentation/git-update.txt
@@ -29,6 +29,10 @@ OPTIONS
 --ff::
 	Forces a fast-forward.
 
+-m::
+--merge::
+	Forces a merge.
+
 SEE ALSO
 --------
 linkgit:git-fetch[1], linkgit:git-fast-forward[1],
diff --git a/builtin/update.c b/builtin/update.c
index 34681fe21a..5946b383f5 100644
--- a/builtin/update.c
+++ b/builtin/update.c
@@ -8,7 +8,8 @@
 #include "dir.h"
 
 enum update_mode_type {
-	UPDATE_MODE_FAST_FORWARD = 0
+	UPDATE_MODE_FAST_FORWARD = 0,
+	UPDATE_MODE_MERGE
 };
 
 static enum update_mode_type mode = UPDATE_MODE_FAST_FORWARD;
@@ -22,6 +23,9 @@ static struct option update_options[] = {
 	OPT_SET_INT_F('f', "ff", &mode,
 		N_("incorporate changes by fast-forwarding"),
 		UPDATE_MODE_FAST_FORWARD, PARSE_OPT_NONEG),
+	OPT_SET_INT_F('m', "merge", &mode,
+		N_("incorporate changes by merging"),
+		UPDATE_MODE_MERGE, PARSE_OPT_NONEG),
 
 	OPT_END()
 };
@@ -50,6 +54,18 @@ static int run_fast_forward(void)
 	return ret;
 }
 
+static int run_merge(void)
+{
+	int ret;
+	struct strvec args = STRVEC_INIT;
+
+	strvec_pushl(&args, "merge", "FETCH_HEAD", NULL);
+
+	ret = run_command_v_opt(args.v, RUN_GIT_CMD);
+	strvec_clear(&args);
+	return ret;
+}
+
 int cmd_update(int argc, const char **argv, const char *prefix)
 {
 	if (!getenv("GIT_REFLOG_ACTION"))
@@ -68,6 +84,8 @@ int cmd_update(int argc, const char **argv, const char *prefix)
 
 	if (mode == UPDATE_MODE_FAST_FORWARD)
 		return run_fast_forward();
+	if (mode == UPDATE_MODE_MERGE)
+		return run_merge();
 
 	return 1;
 }
diff --git a/t/t5563-update.sh b/t/t5563-update.sh
index 951df41ac4..833a5285da 100755
--- a/t/t5563-update.sh
+++ b/t/t5563-update.sh
@@ -42,4 +42,19 @@ test_expect_success 'non-fast-forward update' '
 	)
 '
 
+test_expect_success 'git update non-fast-forward with merge' '
+	test_when_finished "rm -rf test" &&
+	(
+	git clone . test &&
+	cd test &&
+	git checkout -b other master^ &&
+	>new &&
+	git add new &&
+	git commit -m new &&
+	git checkout -b test -t other &&
+	git reset --hard master &&
+	git update --merge
+	)
+'
+
 test_done
-- 
2.32.0.36.g70aac2b1aa




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux