Skip to content

Commit

Permalink
pull: add pull.ff configuration
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
David Aguilar authored and Junio C Hamano committed Jan 16, 2014
1 parent 4224916 commit b814da8
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
10 changes: 10 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 15 additions & 0 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 21 additions & 0 deletions t/t7601-merge-pull-config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand Down

0 comments on commit b814da8

Please sign in to comment.