Merge branch 'hv/autosquash-config'

* hv/autosquash-config:
  add configuration variable for --autosquash option of interactive rebase
This commit is contained in:
Junio C Hamano 2010-08-31 16:15:03 -07:00
commit a621859101
4 changed files with 47 additions and 8 deletions

View file

@ -1549,6 +1549,9 @@ rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.
rebase.autosquash::
If set to true enable '--autosquash' option by default.
receive.autogc::
By default, git-receive-pack will run "git-gc --auto" after
receiving data from git-push and updating refs. You can stop

View file

@ -199,6 +199,9 @@ rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.
rebase.autosquash::
If set to true enable '--autosquash' option by default.
OPTIONS
-------
<newbase>::
@ -333,6 +336,7 @@ idea unless you know what you are doing (see BUGS below).
instead.
--autosquash::
--no-autosquash::
When the commit log message begins with "squash! ..." (or
"fixup! ..."), and there is a commit whose title begins with
the same ..., automatically modify the todo list of rebase -i
@ -341,6 +345,10 @@ idea unless you know what you are doing (see BUGS below).
commit from `pick` to `squash` (or `fixup`).
+
This option is only valid when the '--interactive' option is used.
+
If the '--autosquash' option is enabled by default using the
configuration variable `rebase.autosquash`, this option can be
used to override and disable this setting.
--no-ff::
With --interactive, cherry-pick all rebased commits instead of

View file

@ -111,6 +111,7 @@ VERBOSE=
OK_TO_SKIP_PRE_REBASE=
REBASE_ROOT=
AUTOSQUASH=
test "$(git config --bool rebase.autosquash)" = "true" && AUTOSQUASH=t
NEVER_FF=
GIT_CHERRY_PICK_HELP=" After resolving the conflicts,
@ -831,6 +832,9 @@ first and then run 'git rebase --continue' again."
--autosquash)
AUTOSQUASH=t
;;
--no-autosquash)
AUTOSQUASH=
;;
--onto)
shift
ONTO=$(parse_onto "$1") ||

View file

@ -21,38 +21,62 @@ test_expect_success setup '
git tag base
'
test_expect_success 'auto fixup' '
test_auto_fixup() {
git reset --hard base &&
echo 1 >file1 &&
git add -u &&
test_tick &&
git commit -m "fixup! first"
git tag final-fixup &&
git tag $1 &&
test_tick &&
git rebase --autosquash -i HEAD^^^ &&
git rebase $2 -i HEAD^^^ &&
git log --oneline >actual &&
test 3 = $(wc -l <actual) &&
git diff --exit-code final-fixup &&
git diff --exit-code $1 &&
test 1 = "$(git cat-file blob HEAD^:file1)" &&
test 1 = $(git cat-file commit HEAD^ | grep first | wc -l)
}
test_expect_success 'auto fixup (option)' '
test_auto_fixup final-fixup-option --autosquash
'
test_expect_success 'auto squash' '
test_expect_success 'auto fixup (config)' '
git config rebase.autosquash true &&
test_auto_fixup final-fixup-config-true &&
test_must_fail test_auto_fixup fixup-config-true-no --no-autosquash &&
git config rebase.autosquash false &&
test_must_fail test_auto_fixup final-fixup-config-false
'
test_auto_squash() {
git reset --hard base &&
echo 1 >file1 &&
git add -u &&
test_tick &&
git commit -m "squash! first"
git tag final-squash &&
git tag $1 &&
test_tick &&
git rebase --autosquash -i HEAD^^^ &&
git rebase $2 -i HEAD^^^ &&
git log --oneline >actual &&
test 3 = $(wc -l <actual) &&
git diff --exit-code final-squash &&
git diff --exit-code $1 &&
test 1 = "$(git cat-file blob HEAD^:file1)" &&
test 2 = $(git cat-file commit HEAD^ | grep first | wc -l)
}
test_expect_success 'auto squash (option)' '
test_auto_squash final-squash --autosquash
'
test_expect_success 'auto squash (config)' '
git config rebase.autosquash true &&
test_auto_squash final-squash-config-true &&
test_must_fail test_auto_squash squash-config-true-no --no-autosquash &&
git config rebase.autosquash false &&
test_must_fail test_auto_squash final-squash-config-false
'
test_expect_success 'misspelled auto squash' '