t / t3406-rebase-message.shon commit rebase -i: demonstrate obscure loose object cache bug (26527ed)
   1#!/bin/sh
   2
   3test_description='messages from rebase operation'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        test_commit O fileO &&
   9        test_commit X fileX &&
  10        test_commit A fileA &&
  11        test_commit B fileB &&
  12        test_commit Y fileY &&
  13
  14        git checkout -b topic O &&
  15        git cherry-pick A B &&
  16        test_commit Z fileZ &&
  17        git tag start
  18'
  19
  20test_expect_success 'rebase -m' '
  21        git rebase -m master >report &&
  22        >expect &&
  23        sed -n -e "/^Already applied: /p" \
  24                -e "/^Committed: /p" report >actual &&
  25        test_cmp expect actual
  26'
  27
  28test_expect_success 'rebase against master twice' '
  29        git rebase master >out &&
  30        test_i18ngrep "Current branch topic is up to date" out
  31'
  32
  33test_expect_success 'rebase against master twice with --force' '
  34        git rebase --force-rebase master >out &&
  35        test_i18ngrep "Current branch topic is up to date, rebase forced" out
  36'
  37
  38test_expect_success 'rebase against master twice from another branch' '
  39        git checkout topic^ &&
  40        git rebase master topic >out &&
  41        test_i18ngrep "Current branch topic is up to date" out
  42'
  43
  44test_expect_success 'rebase fast-forward to master' '
  45        git checkout topic^ &&
  46        git rebase topic >out &&
  47        test_i18ngrep "Fast-forwarded HEAD to topic" out
  48'
  49
  50test_expect_success 'rebase --stat' '
  51        git reset --hard start &&
  52        git rebase --stat master >diffstat.txt &&
  53        grep "^ fileX |  *1 +$" diffstat.txt
  54'
  55
  56test_expect_success 'rebase w/config rebase.stat' '
  57        git reset --hard start &&
  58        git config rebase.stat true &&
  59        git rebase master >diffstat.txt &&
  60        grep "^ fileX |  *1 +$" diffstat.txt
  61'
  62
  63test_expect_success 'rebase -n overrides config rebase.stat config' '
  64        git reset --hard start &&
  65        git config rebase.stat true &&
  66        git rebase -n master >diffstat.txt &&
  67        ! grep "^ fileX |  *1 +$" diffstat.txt
  68'
  69
  70# Output to stderr:
  71#
  72#     "Does not point to a valid commit: invalid-ref"
  73#
  74# NEEDSWORK: This "grep" is fine in real non-C locales, but
  75# GIT_TEST_GETTEXT_POISON poisons the refname along with the enclosing
  76# error message.
  77test_expect_success 'rebase --onto outputs the invalid ref' '
  78        test_must_fail git rebase --onto invalid-ref HEAD HEAD 2>err &&
  79        test_i18ngrep "invalid-ref" err
  80'
  81
  82test_expect_success 'error out early upon -C<n> or --whitespace=<bad>' '
  83        test_must_fail git rebase -Cnot-a-number HEAD 2>err &&
  84        test_i18ngrep "numerical value" err &&
  85        test_must_fail git rebase --whitespace=bad HEAD 2>err &&
  86        test_i18ngrep "Invalid whitespace option" err
  87'
  88
  89test_expect_success 'GIT_REFLOG_ACTION' '
  90        git checkout start &&
  91        test_commit reflog-onto &&
  92        git checkout -b reflog-topic start &&
  93        test_commit reflog-to-rebase &&
  94
  95        git rebase reflog-onto &&
  96        git log -g --format=%gs -3 >actual &&
  97        cat >expect <<-\EOF &&
  98        rebase finished: returning to refs/heads/reflog-topic
  99        rebase: reflog-to-rebase
 100        rebase: checkout reflog-onto
 101        EOF
 102        test_cmp expect actual &&
 103
 104        git checkout -b reflog-prefix reflog-to-rebase &&
 105        GIT_REFLOG_ACTION=change-the-reflog git rebase reflog-onto &&
 106        git log -g --format=%gs -3 >actual &&
 107        cat >expect <<-\EOF &&
 108        rebase finished: returning to refs/heads/reflog-prefix
 109        change-the-reflog: reflog-to-rebase
 110        change-the-reflog: checkout reflog-onto
 111        EOF
 112        test_cmp expect actual
 113'
 114
 115test_expect_success 'rebase -i onto unrelated history' '
 116        git init unrelated &&
 117        test_commit -C unrelated 1 &&
 118        git -C unrelated remote add -f origin "$PWD" &&
 119        git -C unrelated branch --set-upstream-to=origin/master &&
 120        git -C unrelated -c core.editor=true rebase -i -v --stat >actual &&
 121        test_i18ngrep "Changes to " actual &&
 122        test_i18ngrep "5 files changed" actual
 123'
 124
 125test_done