Browse Source
Add a test to specify the desired behaviour that currently is not available in "git rebase -Xsubtree=...". * dg/subtree-rebase-test: contrib/subtree: Add a test for subtree rebase that loses commitsmaint
![gitster@pobox.com](/assets/img/avatar_default.png)
1 changed files with 119 additions and 0 deletions
@ -0,0 +1,119 @@
@@ -0,0 +1,119 @@
|
||||
#!/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 |
||||
|
||||
commit_message() { |
||||
git log --pretty=format:%s -1 "$1" |
||||
} |
||||
|
||||
test_expect_success 'setup' ' |
||||
test_commit README && |
||||
mkdir files && |
||||
( |
||||
cd files && |
||||
git init && |
||||
test_commit master1 && |
||||
test_commit master2 && |
||||
test_commit master3 |
||||
) && |
||||
git fetch files master && |
||||
git branch files-master FETCH_HEAD && |
||||
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 update-ref HEAD $commit && |
||||
( |
||||
cd files_subtree && |
||||
test_commit master4 |
||||
) && |
||||
test_commit files_subtree/master5 |
||||
' |
||||
|
||||
# FAILURE: Does not preserve master4. |
||||
test_expect_failure 'Rebase -Xsubtree --preserve-merges --onto commit 4' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-preserve-merges-4 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 && |
||||
verbose test "$(commit_message HEAD~)" = "files_subtree/master4" |
||||
' |
||||
|
||||
# FAILURE: Does not preserve master5. |
||||
test_expect_failure 'Rebase -Xsubtree --preserve-merges --onto commit 5' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-preserve-merges-5 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 && |
||||
verbose test "$(commit_message HEAD)" = "files_subtree/master5" |
||||
' |
||||
|
||||
# FAILURE: Does not preserve master4. |
||||
test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 4' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-keep-empty-4 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 && |
||||
verbose test "$(commit_message HEAD~2)" = "files_subtree/master4" |
||||
' |
||||
|
||||
# FAILURE: Does not preserve master5. |
||||
test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto commit 5' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-keep-empty-5 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 && |
||||
verbose test "$(commit_message HEAD~)" = "files_subtree/master5" |
||||
' |
||||
|
||||
# FAILURE: Does not preserve Empty. |
||||
test_expect_failure 'Rebase -Xsubtree --keep-empty --preserve-merges --onto empty commit' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-keep-empty-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 && |
||||
verbose test "$(commit_message HEAD)" = "Empty commit" |
||||
' |
||||
|
||||
# FAILURE: fatal: Could not parse object |
||||
test_expect_failure 'Rebase -Xsubtree --onto commit 4' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-onto-4 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 && |
||||
verbose test "$(commit_message HEAD~2)" = "files_subtree/master4" |
||||
' |
||||
|
||||
# FAILURE: fatal: Could not parse object |
||||
test_expect_failure 'Rebase -Xsubtree --onto commit 5' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-onto-5 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 && |
||||
verbose test "$(commit_message HEAD~)" = "files_subtree/master5" |
||||
' |
||||
# FAILURE: fatal: Could not parse object |
||||
test_expect_failure 'Rebase -Xsubtree --onto empty commit' ' |
||||
reset_rebase && |
||||
git checkout -b rebase-onto-empty 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 && |
||||
verbose test "$(commit_message HEAD)" = "Empty commit" |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue