t / t3415-rebase-autosquash.shon commit test-lib: introduce test_line_count to measure files (fb3340a)
   1#!/bin/sh
   2
   3test_description='auto squash'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8        echo 0 >file0 &&
   9        git add . &&
  10        test_tick &&
  11        git commit -m "initial commit" &&
  12        echo 0 >file1 &&
  13        echo 2 >file2 &&
  14        git add . &&
  15        test_tick &&
  16        git commit -m "first commit" &&
  17        echo 3 >file3 &&
  18        git add . &&
  19        test_tick &&
  20        git commit -m "second commit" &&
  21        git tag base
  22'
  23
  24test_auto_fixup() {
  25        git reset --hard base &&
  26        echo 1 >file1 &&
  27        git add -u &&
  28        test_tick &&
  29        git commit -m "fixup! first" &&
  30
  31        git tag $1 &&
  32        test_tick &&
  33        git rebase $2 -i HEAD^^^ &&
  34        git log --oneline >actual &&
  35        test 3 = $(wc -l <actual) &&
  36        git diff --exit-code $1 &&
  37        test 1 = "$(git cat-file blob HEAD^:file1)" &&
  38        test 1 = $(git cat-file commit HEAD^ | grep first | wc -l)
  39}
  40
  41test_expect_success 'auto fixup (option)' '
  42        test_auto_fixup final-fixup-option --autosquash
  43'
  44
  45test_expect_success 'auto fixup (config)' '
  46        git config rebase.autosquash true &&
  47        test_auto_fixup final-fixup-config-true &&
  48        test_must_fail test_auto_fixup fixup-config-true-no --no-autosquash &&
  49        git config rebase.autosquash false &&
  50        test_must_fail test_auto_fixup final-fixup-config-false
  51'
  52
  53test_auto_squash() {
  54        git reset --hard base &&
  55        echo 1 >file1 &&
  56        git add -u &&
  57        test_tick &&
  58        git commit -m "squash! first" &&
  59
  60        git tag $1 &&
  61        test_tick &&
  62        git rebase $2 -i HEAD^^^ &&
  63        git log --oneline >actual &&
  64        test 3 = $(wc -l <actual) &&
  65        git diff --exit-code $1 &&
  66        test 1 = "$(git cat-file blob HEAD^:file1)" &&
  67        test 2 = $(git cat-file commit HEAD^ | grep first | wc -l)
  68}
  69
  70test_expect_success 'auto squash (option)' '
  71        test_auto_squash final-squash --autosquash
  72'
  73
  74test_expect_success 'auto squash (config)' '
  75        git config rebase.autosquash true &&
  76        test_auto_squash final-squash-config-true &&
  77        test_must_fail test_auto_squash squash-config-true-no --no-autosquash &&
  78        git config rebase.autosquash false &&
  79        test_must_fail test_auto_squash final-squash-config-false
  80'
  81
  82test_expect_success 'misspelled auto squash' '
  83        git reset --hard base &&
  84        echo 1 >file1 &&
  85        git add -u &&
  86        test_tick &&
  87        git commit -m "squash! forst" &&
  88        git tag final-missquash &&
  89        test_tick &&
  90        git rebase --autosquash -i HEAD^^^ &&
  91        git log --oneline >actual &&
  92        test 4 = $(wc -l <actual) &&
  93        git diff --exit-code final-missquash &&
  94        test 0 = $(git rev-list final-missquash...HEAD | wc -l)
  95'
  96
  97test_done