t / t2012-checkout-last.shon commit merge: detect delete/modechange conflict (72fac66)
   1#!/bin/sh
   2
   3test_description='checkout can switch to last branch and merge base'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        echo hello >world &&
   9        git add world &&
  10        git commit -m initial &&
  11        git branch other &&
  12        echo "hello again" >>world &&
  13        git add world &&
  14        git commit -m second
  15'
  16
  17test_expect_success '"checkout -" does not work initially' '
  18        test_must_fail git checkout -
  19'
  20
  21test_expect_success 'first branch switch' '
  22        git checkout other
  23'
  24
  25test_expect_success '"checkout -" switches back' '
  26        git checkout - &&
  27        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
  28'
  29
  30test_expect_success '"checkout -" switches forth' '
  31        git checkout - &&
  32        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
  33'
  34
  35test_expect_success 'detach HEAD' '
  36        git checkout $(git rev-parse HEAD)
  37'
  38
  39test_expect_success '"checkout -" attaches again' '
  40        git checkout - &&
  41        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
  42'
  43
  44test_expect_success '"checkout -" detaches again' '
  45        git checkout - &&
  46        test "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" &&
  47        test_must_fail git symbolic-ref HEAD
  48'
  49
  50test_expect_success 'more switches' '
  51        for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
  52        do
  53                git checkout -b branch$i
  54        done
  55'
  56
  57more_switches () {
  58        for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
  59        do
  60                git checkout branch$i
  61        done
  62}
  63
  64test_expect_success 'switch to the last' '
  65        more_switches &&
  66        git checkout @{-1} &&
  67        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch2"
  68'
  69
  70test_expect_success 'switch to second from the last' '
  71        more_switches &&
  72        git checkout @{-2} &&
  73        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch3"
  74'
  75
  76test_expect_success 'switch to third from the last' '
  77        more_switches &&
  78        git checkout @{-3} &&
  79        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch4"
  80'
  81
  82test_expect_success 'switch to fourth from the last' '
  83        more_switches &&
  84        git checkout @{-4} &&
  85        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch5"
  86'
  87
  88test_expect_success 'switch to twelfth from the last' '
  89        more_switches &&
  90        git checkout @{-12} &&
  91        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch13"
  92'
  93
  94test_expect_success 'merge base test setup' '
  95        git checkout -b another other &&
  96        echo "hello again" >>world &&
  97        git add world &&
  98        git commit -m third
  99'
 100
 101test_expect_success 'another...master' '
 102        git checkout another &&
 103        git checkout another...master &&
 104        test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
 105'
 106
 107test_expect_success '...master' '
 108        git checkout another &&
 109        git checkout ...master &&
 110        test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
 111'
 112
 113test_expect_success 'master...' '
 114        git checkout another &&
 115        git checkout master... &&
 116        test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify master^)"
 117'
 118
 119test_expect_success '"checkout -" works after a rebase A' '
 120        git checkout master &&
 121        git checkout other &&
 122        git rebase master &&
 123        git checkout - &&
 124        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
 125'
 126
 127test_expect_success '"checkout -" works after a rebase A B' '
 128        git branch moodle master~1 &&
 129        git checkout master &&
 130        git checkout other &&
 131        git rebase master moodle &&
 132        git checkout - &&
 133        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
 134'
 135
 136test_expect_success '"checkout -" works after a rebase -i A' '
 137        git checkout master &&
 138        git checkout other &&
 139        git rebase -i master &&
 140        git checkout - &&
 141        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
 142'
 143
 144test_expect_success '"checkout -" works after a rebase -i A B' '
 145        git branch foodle master~1 &&
 146        git checkout master &&
 147        git checkout other &&
 148        git rebase master foodle &&
 149        git checkout - &&
 150        test "z$(git symbolic-ref HEAD)" = "zrefs/heads/master"
 151'
 152
 153test_done