threads / patch / 12272

patchAdd merge-subtree back

Subject: [PATCH] Add merge-subtree back

## tl;dr

6 messages between Feb 23, 2008 and Feb 28, 2008. Diffs are folded; open one to read it.

replies: 5people: 4as markdown or json

Junio C Hamano· Feb 23, 2008, 19:16 UTC · lore

An earlier commit e1b3a2c (Build-in merge-recursive) made the subtree merge strategy backend unavailable. This resurrects it.

A new test t6029 currently only tests the strategy is available, but it should be enhanced to check the real "subtree" case.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 Makefile                 |    8 +++-----
 git.c                    |    1 +
 t/t6029-merge-subtree.sh |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+), 5 deletions(-)
 create mode 100755 t/t6029-merge-subtree.sh
Show changes to 3 files +36 −5

Makefile, git.c, t/t6029-merge-subtree.sh

diff --git a/Makefile b/Makefile
index 90c0dd8..40fa41b 100644
--- a/Makefile
+++ b/Makefile
@@ -261,17 +261,18 @@ PROGRAMS = \
 # Empty...
 EXTRA_PROGRAMS =
 
+# List built-in command $C whose implementation cmd_$C() is not in
+# builtin-$C.o but is linked in as part of some other command.
 BUILT_INS = \
 	git-format-patch$X git-show$X git-whatchanged$X git-cherry$X \
 	git-get-tar-commit-id$X git-init$X git-repo-config$X \
 	git-fsck-objects$X git-cherry-pick$X git-peek-remote$X git-status$X \
+	git-merge-subtree$X \
 	$(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
 
 # what 'all' will build and 'install' will install, in gitexecdir
 ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
 
-ALL_PROGRAMS += git-merge-subtree$X
-
 # what 'all' will build but not install in gitexecdir
 OTHER_PROGRAMS = git$X gitweb/gitweb.cgi
 
@@ -807,9 +808,6 @@ help.o: help.c common-cmds.h GIT-CFLAGS
 		'-DGIT_MAN_PATH="$(mandir_SQ)"' \
 		'-DGIT_INFO_PATH="$(infodir_SQ)"' $<
 
-git-merge-subtree$X: git-merge-recursive$X
-	$(QUIET_BUILT_IN)$(RM) $@ && ln git-merge-recursive$X $@
-
 $(BUILT_INS): git$X
 	$(QUIET_BUILT_IN)$(RM) $@ && ln git$X $@
 
diff --git a/git.c b/git.c
index fc15686..bd424ea 100644
--- a/git.c
+++ b/git.c
@@ -332,6 +332,7 @@ static void handle_internal_command(int argc, const char **argv)
 		{ "merge-file", cmd_merge_file },
 		{ "merge-ours", cmd_merge_ours, RUN_SETUP },
 		{ "merge-recursive", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },
+		{ "merge-subtree", cmd_merge_recursive, RUN_SETUP | NEED_WORK_TREE },
 		{ "mv", cmd_mv, RUN_SETUP | NEED_WORK_TREE },
 		{ "name-rev", cmd_name_rev, RUN_SETUP },
 		{ "pack-objects", cmd_pack_objects, RUN_SETUP },
diff --git a/t/t6029-merge-subtree.sh b/t/t6029-merge-subtree.sh
new file mode 100755
index 0000000..3900a05
--- /dev/null
+++ b/t/t6029-merge-subtree.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+test_description='subtree merge strategy'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+	s="1 2 3 4 5 6 7 8"
+	for i in $s; do echo $i; done >hello &&
+	git add hello &&
+	git commit -m initial &&
+	git checkout -b side &&
+	echo >>hello world &&
+	git add hello &&
+	git commit -m second &&
+	git checkout master &&
+	for i in mundo $s; do echo $i; done >hello &&
+	git add hello &&
+	git commit -m master
+
+'
+
+test_expect_success 'subtree available and works like recursive' '
+
+	git merge -s subtree side &&
+	for i in mundo $s world; do echo $i; done >expect &&
+	diff -u expect hello
+
+'
+
+test_done
-- 
1.5.4.2.300.g8d945
Daniel Barkalow· Feb 24, 2008, 06:19 UTC · re: Junio C Hamano · lore

Re: [PATCH] Add merge-subtree back

On Sat, 23 Feb 2008, Junio C Hamano wrote:
> An earlier commit e1b3a2c (Build-in merge-recursive) made the
> subtree merge strategy backend unavailable.  This resurrects
> it.

That's really quite subtle. I think there should probably be a cmd_merge_subtree that shares almost everything with cmd_merge_recursive, but is a different function.

Or maybe there should be a "--subtree" option to merge that has that effect with arbitrary stratgeies by changing what gets sent to the strategy.

But restoring access to the strategy for now is obviously fine.
	-Daniel
*This .sig left intentionally blank*
Miklos Vajna· Feb 28, 2008, 01:51 UTC · re: Junio C Hamano · lore

[PATCH] New test to check the real "subtree" case

t6029 already checks if subtree available and works like recursive, but this new one actually tests the extra functionality the subtree merge strategy provides.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
On Sat, Feb 23, 2008 at 11:16:21AM -0800, Junio C Hamano <gitster@pobox.com> wrote:
> A new test t6029 currently only tests the strategy is available,
> but it should be enhanced to check the real "subtree" case.
i think something like this should do it.
 t/t3035-merge-subtree.sh |   54 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)
 create mode 100755 t/t3035-merge-subtree.sh
Show changes to t/t3035-merge-subtree.sh +54 −0
diff --git a/t/t3035-merge-subtree.sh b/t/t3035-merge-subtree.sh
new file mode 100755
index 0000000..e400dce
--- /dev/null
+++ b/t/t3035-merge-subtree.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+test_description='merge-subtree backend test'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	mkdir git-gui &&
+	cd git-gui &&
+	git init &&
+	echo git-gui > git-gui.sh &&
+	o1=$(git hash-object git-gui.sh) &&
+	git add git-gui.sh &&
+	git commit -m "initial git-gui" &&
+	cd .. &&
+	mkdir git &&
+	cd git &&
+	git init &&
+	echo git >git.c &&
+	o2=$(git hash-object git.c) &&
+	git add git.c &&
+	git commit -m "initial git"
+'
+
+test_expect_success 'initial merge' '
+	git remote add -f gui ../git-gui &&
+	git merge -s ours --no-commit gui/master &&
+	git read-tree --prefix=git-gui/ -u gui/master &&
+	git commit -m "Merge git-gui as our subdirectory" &&
+	git ls-files -s >actual &&
+	(
+		echo "100644 $o1 0	git-gui/git-gui.sh"
+		echo "100644 $o2 0	git.c"
+	) >expected &&
+	git diff -u expected actual
+'
+
+test_expect_success 'merge update' '
+	cd ../git-gui &&
+	echo git-gui2 > git-gui.sh &&
+	o3=$(git hash-object git-gui.sh) &&
+	git add git-gui.sh &&
+	git commit -m "update git-gui" &&
+	cd ../git &&
+	git pull -s subtree gui master &&
+	git ls-files -s >actual &&
+	(
+		echo "100644 $o3 0	git-gui/git-gui.sh"
+		echo "100644 $o2 0	git.c"
+	) >expected &&
+	git diff -u expected actual
+'
+
+test_done
-- 
1.5.4.3
Johannes Schindelin· Feb 28, 2008, 09:45 UTC · re: Miklos Vajna · lore

Re: [PATCH] New test to check the real "subtree" case

Hi,
On Thu, 28 Feb 2008, Miklos Vajna wrote:
Show 7 quoted lines
> On Sat, Feb 23, 2008 at 11:16:21AM -0800, Junio C Hamano <gitster@pobox.com> wrote:
> > A new test t6029 currently only tests the strategy is available,
> > but it should be enhanced to check the real "subtree" case.
> 
> i think something like this should do it.
> 
>  t/t3035-merge-subtree.sh |   54 ++++++++++++++++++++++++++++++++++++++++++++++
Why yet another file?  Why not enhance t6029, as suggested?

Ciao, Dscho

Miklos Vajna· Feb 28, 2008, 12:36 UTC · re: Johannes Schindelin · lore

[PATCH] Improve t6029 to check the real "subtree" case

t6029 already checks if subtree available and works like recursive. This patch adds code to test test the extra functionality the subtree merge strategy provides.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
---
On Thu, Feb 28, 2008 at 09:45:03AM +0000, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> Why yet another file?  Why not enhance t6029, as suggested?
here it is.
 t/t6029-merge-subtree.sh |   47 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)
Show changes to t/t6029-merge-subtree.sh +47 −0
diff --git a/t/t6029-merge-subtree.sh b/t/t6029-merge-subtree.sh
index 3900a05..35d66e8 100755
--- a/t/t6029-merge-subtree.sh
+++ b/t/t6029-merge-subtree.sh
@@ -29,4 +29,51 @@ test_expect_success 'subtree available and works like recursive' '
 
 '
 
+test_expect_success 'setup' '
+	mkdir git-gui &&
+	cd git-gui &&
+	git init &&
+	echo git-gui > git-gui.sh &&
+	o1=$(git hash-object git-gui.sh) &&
+	git add git-gui.sh &&
+	git commit -m "initial git-gui" &&
+	cd .. &&
+	mkdir git &&
+	cd git &&
+	git init &&
+	echo git >git.c &&
+	o2=$(git hash-object git.c) &&
+	git add git.c &&
+	git commit -m "initial git"
+'
+
+test_expect_success 'initial merge' '
+	git remote add -f gui ../git-gui &&
+	git merge -s ours --no-commit gui/master &&
+	git read-tree --prefix=git-gui/ -u gui/master &&
+	git commit -m "Merge git-gui as our subdirectory" &&
+	git ls-files -s >actual &&
+	(
+		echo "100644 $o1 0	git-gui/git-gui.sh"
+		echo "100644 $o2 0	git.c"
+	) >expected &&
+	git diff -u expected actual
+'
+
+test_expect_success 'merge update' '
+	cd ../git-gui &&
+	echo git-gui2 > git-gui.sh &&
+	o3=$(git hash-object git-gui.sh) &&
+	git add git-gui.sh &&
+	git commit -m "update git-gui" &&
+	cd ../git &&
+	git pull -s subtree gui master &&
+	git ls-files -s >actual &&
+	(
+		echo "100644 $o3 0	git-gui/git-gui.sh"
+		echo "100644 $o2 0	git.c"
+	) >expected &&
+	git diff -u expected actual
+'
+
 test_done
-- 
1.5.4
Johannes Schindelin· Feb 28, 2008, 14:57 UTC · re: Miklos Vajna · lore

Re: [PATCH] Improve t6029 to check the real "subtree" case

Hi,
On Thu, 28 Feb 2008, Miklos Vajna wrote:
> On Thu, Feb 28, 2008 at 09:45:03AM +0000, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > Why yet another file?  Why not enhance t6029, as suggested?
> 
> here it is.
Thanks.
Show 9 quoted lines
> diff --git a/t/t6029-merge-subtree.sh b/t/t6029-merge-subtree.sh
> index 3900a05..35d66e8 100755
> --- a/t/t6029-merge-subtree.sh
> +++ b/t/t6029-merge-subtree.sh
> @@ -29,4 +29,51 @@ test_expect_success 'subtree available and works like recursive' '
>  
>  '
>  
> +test_expect_success 'setup' '
I'd call this 'setup subproject', but that's just nitpicking.

Ciao, Dscho

← back to recent threads