t / t2010-checkout-ambiguous.shon commit Merge branch 'lf/recv-sideband-cleanup' (e0e56cb)
   1#!/bin/sh
   2
   3test_description='checkout and pathspecs/refspecs ambiguities'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'setup' '
   8        echo hello >world &&
   9        echo hello >all &&
  10        git add all world &&
  11        git commit -m initial &&
  12        git branch world
  13'
  14
  15test_expect_success 'reference must be a tree' '
  16        test_must_fail git checkout $(git hash-object ./all) --
  17'
  18
  19test_expect_success 'branch switching' '
  20        test "refs/heads/master" = "$(git symbolic-ref HEAD)" &&
  21        git checkout world -- &&
  22        test "refs/heads/world" = "$(git symbolic-ref HEAD)"
  23'
  24
  25test_expect_success 'checkout world from the index' '
  26        echo bye > world &&
  27        git checkout -- world &&
  28        git diff --exit-code --quiet
  29'
  30
  31test_expect_success 'non ambiguous call' '
  32        git checkout all
  33'
  34
  35test_expect_success 'allow the most common case' '
  36        git checkout world &&
  37        test "refs/heads/world" = "$(git symbolic-ref HEAD)"
  38'
  39
  40test_expect_success 'check ambiguity' '
  41        test_must_fail git checkout world all
  42'
  43
  44test_expect_success 'disambiguate checking out from a tree-ish' '
  45        echo bye > world &&
  46        git checkout world -- world &&
  47        git diff --exit-code --quiet
  48'
  49
  50test_expect_success 'accurate error message with more than one ref' '
  51        test_must_fail git checkout HEAD master -- 2>actual &&
  52        test_i18ngrep 2 actual &&
  53        test_i18ngrep "one reference expected, 2 given" actual
  54'
  55
  56test_done