120 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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
 |