t / t3405-rebase-malformed.shon commit t4045: abstract away SHA-1-specific constants (5c02428)
   1#!/bin/sh
   2
   3test_description='rebase should handle arbitrary git message'
   4
   5. ./test-lib.sh
   6. "$TEST_DIRECTORY"/lib-rebase.sh
   7
   8cat >F <<\EOF
   9This is an example of a commit log message
  10that does not  conform to git commit convention.
  11
  12It has two paragraphs, but its first paragraph is not friendly
  13to oneline summary format.
  14EOF
  15
  16cat >G <<\EOF
  17commit log message containing a diff
  18EOF
  19
  20
  21test_expect_success setup '
  22
  23        >file1 &&
  24        >file2 &&
  25        git add file1 file2 &&
  26        test_tick &&
  27        git commit -m "Initial commit" &&
  28        git branch diff-in-message &&
  29        git branch empty-message-merge &&
  30
  31        git checkout -b multi-line-subject &&
  32        cat F >file2 &&
  33        git add file2 &&
  34        test_tick &&
  35        git commit -F F &&
  36
  37        git cat-file commit HEAD | sed -e "1,/^\$/d" >F0 &&
  38
  39        git checkout diff-in-message &&
  40        echo "commit log message containing a diff" >G &&
  41        echo "" >>G &&
  42        cat G >file2 &&
  43        git add file2 &&
  44        git diff --cached >>G &&
  45        test_tick &&
  46        git commit -F G &&
  47
  48        git cat-file commit HEAD | sed -e "1,/^\$/d" >G0 &&
  49
  50        git checkout empty-message-merge &&
  51        echo file3 >file3 &&
  52        git add file3 &&
  53        git commit --allow-empty-message -m "" &&
  54
  55        git checkout master &&
  56
  57        echo One >file1 &&
  58        test_tick &&
  59        git add file1 &&
  60        git commit -m "Second commit"
  61'
  62
  63test_expect_success 'rebase commit with multi-line subject' '
  64
  65        git rebase master multi-line-subject &&
  66        git cat-file commit HEAD | sed -e "1,/^\$/d" >F1 &&
  67
  68        test_cmp F0 F1 &&
  69        test_cmp F F0
  70'
  71
  72test_expect_success 'rebase commit with diff in message' '
  73        git rebase master diff-in-message &&
  74        git cat-file commit HEAD | sed -e "1,/^$/d" >G1 &&
  75        test_cmp G0 G1 &&
  76        test_cmp G G0
  77'
  78
  79test_expect_success 'rebase -m commit with empty message' '
  80        test_must_fail git rebase -m master empty-message-merge &&
  81        git rebase --abort &&
  82        git rebase -m --allow-empty-message master empty-message-merge
  83'
  84
  85test_expect_success 'rebase -i commit with empty message' '
  86        git checkout diff-in-message &&
  87        set_fake_editor &&
  88        test_must_fail env FAKE_COMMIT_MESSAGE=" " FAKE_LINES="reword 1" \
  89                git rebase -i HEAD^ &&
  90        git rebase --abort &&
  91        FAKE_COMMIT_MESSAGE=" " FAKE_LINES="reword 1" \
  92                git rebase -i --allow-empty-message HEAD^
  93'
  94
  95test_done