Code

Merge branch 'pn/commit-autosquash' into next
authorJunio C Hamano <gitster@pobox.com>
Thu, 25 Nov 2010 00:00:32 +0000 (16:00 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Nov 2010 00:00:32 +0000 (16:00 -0800)
* pn/commit-autosquash:
  add tests of commit --squash
  commit: --squash option for use with rebase --autosquash
  add tests of commit --fixup
  commit: --fixup option for use with rebase --autosquash
  pretty.c: teach format_commit_message() to reencode the output
  commit: helper methods to reduce redundant blocks of code

Conflicts:
t/t3415-rebase-autosquash.sh

1  2 
builtin/commit.c
builtin/log.c
cache.h
t/t3415-rebase-autosquash.sh

Simple merge
diff --cc builtin/log.c
Simple merge
diff --cc cache.h
Simple merge
index ca16b70373b5595f4a5e3c460638c7aa2edb8663,0028533e0bfb544598ca6dc0de489bf9948b4eb4..b38be8e93723991d717b6b7fb690560efb58c36d
@@@ -94,78 -95,28 +95,102 @@@ test_expect_success 'misspelled auto sq
        test 0 = $(git rev-list final-missquash...HEAD | wc -l)
  '
  
 +test_expect_success 'auto squash that matches 2 commits' '
 +      git reset --hard base &&
 +      echo 4 >file4 &&
 +      git add file4 &&
 +      test_tick &&
 +      git commit -m "first new commit" &&
 +      echo 1 >file1 &&
 +      git add -u &&
 +      test_tick &&
 +      git commit -m "squash! first" &&
 +      git tag final-multisquash &&
 +      test_tick &&
 +      git rebase --autosquash -i HEAD~4 &&
 +      git log --oneline >actual &&
 +      test 4 = $(wc -l <actual) &&
 +      git diff --exit-code final-multisquash &&
 +      test 1 = "$(git cat-file blob HEAD^^:file1)" &&
 +      test 2 = $(git cat-file commit HEAD^^ | grep first | wc -l) &&
 +      test 1 = $(git cat-file commit HEAD | grep first | wc -l)
 +'
 +
 +test_expect_success 'auto squash that matches a commit after the squash' '
 +      git reset --hard base &&
 +      echo 1 >file1 &&
 +      git add -u &&
 +      test_tick &&
 +      git commit -m "squash! third" &&
 +      echo 4 >file4 &&
 +      git add file4 &&
 +      test_tick &&
 +      git commit -m "third commit" &&
 +      git tag final-presquash &&
 +      test_tick &&
 +      git rebase --autosquash -i HEAD~4 &&
 +      git log --oneline >actual &&
 +      test 5 = $(wc -l <actual) &&
 +      git diff --exit-code final-presquash &&
 +      test 0 = "$(git cat-file blob HEAD^^:file1)" &&
 +      test 1 = "$(git cat-file blob HEAD^:file1)" &&
 +      test 1 = $(git cat-file commit HEAD | grep third | wc -l) &&
 +      test 1 = $(git cat-file commit HEAD^ | grep third | wc -l)
 +'
 +test_expect_success 'auto squash that matches a sha1' '
 +      git reset --hard base &&
 +      echo 1 >file1 &&
 +      git add -u &&
 +      test_tick &&
 +      git commit -m "squash! $(git rev-parse --short HEAD^)" &&
 +      git tag final-shasquash &&
 +      test_tick &&
 +      git rebase --autosquash -i HEAD^^^ &&
 +      git log --oneline >actual &&
 +      test 3 = $(wc -l <actual) &&
 +      git diff --exit-code final-shasquash &&
 +      test 1 = "$(git cat-file blob HEAD^:file1)" &&
 +      test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l)
 +'
 +
 +test_expect_success 'auto squash that matches longer sha1' '
 +      git reset --hard base &&
 +      echo 1 >file1 &&
 +      git add -u &&
 +      test_tick &&
 +      git commit -m "squash! $(git rev-parse --short=11 HEAD^)" &&
 +      git tag final-longshasquash &&
 +      test_tick &&
 +      git rebase --autosquash -i HEAD^^^ &&
 +      git log --oneline >actual &&
 +      test 3 = $(wc -l <actual) &&
 +      git diff --exit-code final-longshasquash &&
 +      test 1 = "$(git cat-file blob HEAD^:file1)" &&
 +      test 1 = $(git cat-file commit HEAD^ | grep squash | wc -l)
 +'
 +
+ test_auto_commit_flags () {
+       git reset --hard base &&
+       echo 1 >file1 &&
+       git add -u &&
+       test_tick &&
+       git commit --$1 first-commit &&
+       git tag final-commit-$1 &&
+       test_tick &&
+       git rebase --autosquash -i HEAD^^^ &&
+       git log --oneline >actual &&
+       test 3 = $(wc -l <actual) &&
+       git diff --exit-code final-commit-$1 &&
+       test 1 = "$(git cat-file blob HEAD^:file1)" &&
+       test $2 = $(git cat-file commit HEAD^ | grep first | wc -l)
+ }
+ test_expect_success 'use commit --fixup' '
+       test_auto_commit_flags fixup 1
+ '
+ test_expect_success 'use commit --squash' '
+       test_auto_commit_flags squash 2
+ '
  test_done