Re: [PATCH v3 contrib/subtree 1/1] Add a test for subtree rebase that loses commits
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Jan 17, 2016, 23:32 UTC
- Message-ID
- <CAPig+cTMAnbyT3-FFN4juUooosiydOCX-ETwTghpnKoOeXcMpQ@mail.gmail.com>
- In-Reply-To
- <ec1decfc5fd463f1e78a5aa2636c24fb11e80a62.1453072387.git.greened@obbligato.org>
On Sun, Jan 17, 2016 at 6:13 PM, David Greene <greened@obbligato.org> wrote:
Show 17 quoted lines
> From: David A. Greene <greened@obbligato.org> > > This test merges an external tree in as a subtree, makes some commits > on top of it and splits it back out. In the process the added commits > are lost or the rebase aborts with an internal error. The tests are > marked to expect failure so that we don't forget to fix it. > > Signed-off-by: David A. Greene <greened@obbligato.org> > --- > > Notes: > Change History: > > v1 - Initial version > v2 - Additional tests and code cleanup > v3 - Remove check_equal, mark comments on failure and remove > test_debug statements
Hmm, the v3 changes described here don't appear in this version. In fact, v2 and v3 are identical.
Show 90 quoted lines
> t/t3427-rebase-subtree.sh | 79 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 79 insertions(+)
>
> diff --git a/t/t3427-rebase-subtree.sh b/t/t3427-rebase-subtree.sh
> new file mode 100755
> index 0000000..add3b79
> --- /dev/null
> +++ b/t/t3427-rebase-subtree.sh
> @@ -0,0 +1,79 @@
> +#!/bin/sh
> +
> +test_description='git rebase tests for -Xsubtree
> +
> +This test runs git rebase and tests the subtree strategy.
> +'
> +. ./test-lib.sh
> +. "$TEST_DIRECTORY"/lib-rebase.sh
> +
> +check_equal() {
> + test_debug 'echo'
> + test_debug "echo \"check a:\" \"{$1}\""
> + test_debug "echo \" b:\" \"{$2}\""
> + test "$1" = "$2"
> +}
> +
> +last_commit_message() {
> + git log --pretty=format:%s -1
> +}
> +
> +test_expect_success 'setup' '
> + test_commit README &&
> + mkdir files &&
> + (
> + cd files &&
> + git init &&
> + test_commit master1 &&
> + test_commit master2 &&
> + test_commit master3
> + ) &&
> + test_debug "echo Add project master to master" &&
> + git fetch files master &&
> + git branch files-master FETCH_HEAD &&
> + test_debug "echo Add subtree master to master via subtree" &&
> + git read-tree --prefix=files_subtree files-master &&
> + git checkout -- files_subtree &&
> + tree=$(git write-tree) &&
> + head=$(git rev-parse HEAD) &&
> + rev=$(git rev-parse --verify files-master^0) &&
> + commit=$(git commit-tree -p $head -p $rev -m "Add subproject master" $tree) &&
> + git reset $commit &&
> + (
> + cd files_subtree &&
> + test_commit master4
> + ) &&
> + test_commit files_subtree/master5
> +'
> +
> +# Does not preserve master4 and master5.
> +test_expect_failure 'Rebase -Xsubtree --preserve-merges --onto' '
> + reset_rebase &&
> + git checkout -b rebase-preserve-merges master &&
> + git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
> + git commit -m "Empty commit" --allow-empty &&
> + git rebase -Xsubtree=files_subtree --preserve-merges --onto files-master master &&
> + check_equal "$(last_commit_message)" "files_subtree/master5"
> +'
> +
> +# Does not preserve master4, master5 and empty.
> +test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto' '
> + reset_rebase &&
> + git checkout -b rebase-keep-empty master &&
> + git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
> + git commit -m "Empty commit" --allow-empty &&
> + git rebase -Xsubtree=files_subtree --keep-empty --preserve-merges --onto files-master master &&
> + check_equal "$(last_commit_message)" "Empty commit"
> +'
> +
> +# fatal: Could not parse object
> +test_expect_failure 'Rebase -Xsubtree --onto' '
> + reset_rebase &&
> + git checkout -b rebase-onto master &&
> + git filter-branch --prune-empty -f --subdirectory-filter files_subtree &&
> + git commit -m "Empty commit" --allow-empty &&
> + git rebase -Xsubtree=files_subtree --onto files-master master &&
> + check_equal "$(last_commit_message)" "Empty commit"
> +'
> +
> +test_done
> --
> 2.6.1