diff options
author | David Aguilar <davvid@gmail.com> | 2014-01-15 23:18:38 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-01-16 00:01:06 (GMT) |
commit | b814da891e8261b909fc5d9fb07b4e8b13989c2d (patch) | |
tree | 20bdca746012df5441dbfc5bdaab9a75e9649c7d | |
parent | 4224916ae979204f13db2996d9e32490e0acb90f (diff) | |
download | git-b814da891e8261b909fc5d9fb07b4e8b13989c2d.zip git-b814da891e8261b909fc5d9fb07b4e8b13989c2d.tar.gz git-b814da891e8261b909fc5d9fb07b4e8b13989c2d.tar.bz2 |
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>
-rw-r--r-- | Documentation/config.txt | 10 | ||||
-rwxr-xr-x | git-pull.sh | 15 | ||||
-rwxr-xr-x | t/t7601-merge-pull-config.sh | 21 |
3 files changed, 46 insertions, 0 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt index ab26963..7443f15 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -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 diff --git a/git-pull.sh b/git-pull.sh index b946fd9..44b792a 100755 --- a/git-pull.sh +++ b/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 diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh index 830a4c3..f768c90 100755 --- a/t/t7601-merge-pull-config.sh +++ b/t/t7601-merge-pull-config.sh @@ -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 && |