Call graph_clear() in release_revisions(), this will free memory allocated by e.g. this command, which will now run without memory leaks: git -P log -1 --graph --no-graph --graph Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Taylor Blau <me@ttaylorr.com>
		
			
				
	
	
		
			141 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='git rebase with its hook(s)'
 | 
						|
 | 
						|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 | 
						|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 | 
						|
 | 
						|
TEST_PASSES_SANITIZE_LEAK=true
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
test_expect_success setup '
 | 
						|
	echo hello >file &&
 | 
						|
	git add file &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m initial &&
 | 
						|
	echo goodbye >file &&
 | 
						|
	git add file &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m second &&
 | 
						|
	git checkout -b side HEAD^ &&
 | 
						|
	echo world >git &&
 | 
						|
	git add git &&
 | 
						|
	test_tick &&
 | 
						|
	git commit -m side &&
 | 
						|
	git checkout main &&
 | 
						|
	git log --pretty=oneline --abbrev-commit --graph --all &&
 | 
						|
	git branch test side
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git rebase main &&
 | 
						|
	test "z$(cat git)" = zworld
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase -i' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	EDITOR=true git rebase -i main &&
 | 
						|
	test "z$(cat git)" = zworld
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'setup pre-rebase hook' '
 | 
						|
	test_hook --setup pre-rebase <<-\EOF
 | 
						|
	echo "$1,$2" >.git/PRE-REBASE-INPUT
 | 
						|
	EOF
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (1)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git rebase main &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,
 | 
						|
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (2)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git rebase main test &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (3)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git checkout main &&
 | 
						|
	git rebase main test &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (4)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	EDITOR=true git rebase -i main &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,
 | 
						|
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (5)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	EDITOR=true git rebase -i main test &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook gets correct input (6)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git checkout main &&
 | 
						|
	EDITOR=true git rebase -i main test &&
 | 
						|
	test "z$(cat git)" = zworld &&
 | 
						|
	test "z$(cat .git/PRE-REBASE-INPUT)" = zmain,test
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'setup pre-rebase hook that fails' '
 | 
						|
	test_hook --setup --clobber pre-rebase <<-\EOF
 | 
						|
	false
 | 
						|
	EOF
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook stops rebase (1)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	test_must_fail git rebase main &&
 | 
						|
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
 | 
						|
	test 0 = $(git rev-list HEAD...side | wc -l)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'pre-rebase hook stops rebase (2)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	test_must_fail env EDITOR=: git rebase -i main &&
 | 
						|
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
 | 
						|
	test 0 = $(git rev-list HEAD...side | wc -l)
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase --no-verify overrides pre-rebase (1)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	git rebase --no-verify main &&
 | 
						|
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
 | 
						|
	test "z$(cat git)" = zworld
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rebase --no-verify overrides pre-rebase (2)' '
 | 
						|
	git checkout test &&
 | 
						|
	git reset --hard side &&
 | 
						|
	EDITOR=true git rebase --no-verify -i main &&
 | 
						|
	test "z$(git symbolic-ref HEAD)" = zrefs/heads/test &&
 | 
						|
	test "z$(cat git)" = zworld
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |