pull: add pull.ff configuration
Add a `pull.ff` configuration option that is analogous to the `merge.ff` option. This allows us to control the fast-forward behavior for pull-initiated merges only. Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									4224916ae9
								
							
						
					
					
						commit
						b814da891e
					
				|  | @ -1877,6 +1877,16 @@ pretty.<name>:: | |||
| 	Note that an alias with the same name as a built-in format | ||||
| 	will be silently ignored. | ||||
|  | ||||
| pull.ff:: | ||||
| 	By default, Git does not create an extra merge commit when merging | ||||
| 	a commit that is a descendant of the current commit. Instead, the | ||||
| 	tip of the current branch is fast-forwarded. When set to `false`, | ||||
| 	this variable tells Git to create an extra merge commit in such | ||||
| 	a case (equivalent to giving the `--no-ff` option from the command | ||||
| 	line). When set to `only`, only such fast-forward merges are | ||||
| 	allowed (equivalent to giving the `--ff-only` option from the | ||||
| 	command line). | ||||
|  | ||||
| pull.rebase:: | ||||
| 	When true, rebase branches on top of the fetched branch, instead | ||||
| 	of merging the default branch from the default remote when "git | ||||
|  |  | |||
							
								
								
									
										15
									
								
								git-pull.sh
								
								
								
								
							
							
						
						
									
										15
									
								
								git-pull.sh
								
								
								
								
							|  | @ -52,6 +52,21 @@ if test -z "$rebase" | |||
| then | ||||
| 	rebase=$(bool_or_string_config pull.rebase) | ||||
| fi | ||||
|  | ||||
| # Setup default fast-forward options via `pull.ff` | ||||
| pull_ff=$(git config pull.ff) | ||||
| case "$pull_ff" in | ||||
| false) | ||||
| 	no_ff=--no-ff | ||||
| 	break | ||||
| 	;; | ||||
| only) | ||||
| 	ff_only=--ff-only | ||||
| 	break | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
|  | ||||
| dry_run= | ||||
| while : | ||||
| do | ||||
|  |  | |||
|  | @ -38,6 +38,27 @@ test_expect_success 'merge c1 with c2' ' | |||
| 	test -f c2.c | ||||
| ' | ||||
|  | ||||
| test_expect_success 'fast-forward pull succeeds with "true" in pull.ff' ' | ||||
| 	git reset --hard c0 && | ||||
| 	test_config pull.ff true && | ||||
| 	git pull . c1 && | ||||
| 	test "$(git rev-parse HEAD)" = "$(git rev-parse c1)" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'fast-forward pull creates merge with "false" in pull.ff' ' | ||||
| 	git reset --hard c0 && | ||||
| 	test_config pull.ff false && | ||||
| 	git pull . c1 && | ||||
| 	test "$(git rev-parse HEAD^1)" = "$(git rev-parse c0)" && | ||||
| 	test "$(git rev-parse HEAD^2)" = "$(git rev-parse c1)" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'pull prevents non-fast-forward with "only" in pull.ff' ' | ||||
| 	git reset --hard c1 && | ||||
| 	test_config pull.ff only && | ||||
| 	test_must_fail git pull . c3 | ||||
| ' | ||||
|  | ||||
| test_expect_success 'merge c1 with c2 (ours in pull.twohead)' ' | ||||
| 	git reset --hard c1 && | ||||
| 	git config pull.twohead ours && | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Aguilar
						David Aguilar