t / t3501-revert-cherry-pick.shon commit Teach --dirstat not to completely ignore rearranged lines within a file (2ff3a80)
   1#!/bin/sh
   2
   3test_description='test cherry-pick and revert with renames
   4
   5  --
   6   + rename2: renames oops to opos
   7  +  rename1: renames oops to spoo
   8  +  added:   adds extra line to oops
   9  ++ initial: has lines in oops
  10
  11'
  12
  13. ./test-lib.sh
  14
  15test_expect_success setup '
  16
  17        for l in a b c d e f g h i j k l m n o
  18        do
  19                echo $l$l$l$l$l$l$l$l$l
  20        done >oops &&
  21
  22        test_tick &&
  23        git add oops &&
  24        git commit -m initial &&
  25        git tag initial &&
  26
  27        test_tick &&
  28        echo "Add extra line at the end" >>oops &&
  29        git commit -a -m added &&
  30        git tag added &&
  31
  32        test_tick &&
  33        git mv oops spoo &&
  34        git commit -m rename1 &&
  35        git tag rename1 &&
  36
  37        test_tick &&
  38        git checkout -b side initial &&
  39        git mv oops opos &&
  40        git commit -m rename2 &&
  41        git tag rename2
  42'
  43
  44test_expect_success 'cherry-pick --nonsense' '
  45
  46        pos=$(git rev-parse HEAD) &&
  47        git diff --exit-code HEAD &&
  48        test_must_fail git cherry-pick --nonsense 2>msg &&
  49        git diff --exit-code HEAD "$pos" &&
  50        grep '[Uu]sage:' msg
  51'
  52
  53test_expect_success 'revert --nonsense' '
  54
  55        pos=$(git rev-parse HEAD) &&
  56        git diff --exit-code HEAD &&
  57        test_must_fail git revert --nonsense 2>msg &&
  58        git diff --exit-code HEAD "$pos" &&
  59        grep '[Uu]sage:' msg
  60'
  61
  62test_expect_success 'cherry-pick after renaming branch' '
  63
  64        git checkout rename2 &&
  65        git cherry-pick added &&
  66        test $(git rev-parse HEAD^) = $(git rev-parse rename2) &&
  67        test -f opos &&
  68        grep "Add extra line at the end" opos &&
  69        git reflog -1 | grep cherry-pick
  70
  71'
  72
  73test_expect_success 'revert after renaming branch' '
  74
  75        git checkout rename1 &&
  76        git revert added &&
  77        test $(git rev-parse HEAD^) = $(git rev-parse rename1) &&
  78        test -f spoo &&
  79        ! grep "Add extra line at the end" spoo &&
  80        git reflog -1 | grep revert
  81
  82'
  83
  84test_expect_success 'cherry-pick on stat-dirty working tree' '
  85        git clone . copy &&
  86        (
  87                cd copy &&
  88                git checkout initial &&
  89                test-chmtime +40 oops &&
  90                git cherry-pick added
  91        )
  92'
  93
  94test_expect_success 'revert forbidden on dirty working tree' '
  95
  96        echo content >extra_file &&
  97        git add extra_file &&
  98        test_must_fail git revert HEAD 2>errors &&
  99        grep "Your local changes would be overwritten by " errors
 100
 101'
 102
 103test_done