t / t1508-at-combinations.shon commit apply: add t4137 for submodule updates (558643e)
   1#!/bin/sh
   2
   3test_description='test various @{X} syntax combinations together'
   4. ./test-lib.sh
   5
   6check() {
   7        test_expect_${4:-success} "$1 = $3" "
   8                echo '$3' >expect &&
   9                if test '$2' = 'commit'
  10                then
  11                        git log -1 --format=%s '$1' >actual
  12                elif test '$2' = 'ref'
  13                then
  14                        git rev-parse --symbolic-full-name '$1' >actual
  15                else
  16                        git cat-file -p '$1' >actual
  17                fi &&
  18                test_cmp expect actual
  19        "
  20}
  21
  22nonsense() {
  23        test_expect_${2:-success} "$1 is nonsensical" "
  24                test_must_fail git rev-parse --verify '$1'
  25        "
  26}
  27
  28fail() {
  29        "$@" failure
  30}
  31
  32test_expect_success 'setup' '
  33        test_commit master-one &&
  34        test_commit master-two &&
  35        git checkout -b upstream-branch &&
  36        test_commit upstream-one &&
  37        test_commit upstream-two &&
  38        git checkout -b @/at-test &&
  39        git checkout -b @@/at-test &&
  40        git checkout -b @at-test &&
  41        git checkout -b old-branch &&
  42        test_commit old-one &&
  43        test_commit old-two &&
  44        git checkout -b new-branch &&
  45        test_commit new-one &&
  46        test_commit new-two &&
  47        git branch -u master old-branch &&
  48        git branch -u upstream-branch new-branch
  49'
  50
  51check HEAD ref refs/heads/new-branch
  52check "@{1}" commit new-one
  53check "HEAD@{1}" commit new-one
  54check "@{now}" commit new-two
  55check "HEAD@{now}" commit new-two
  56check "@{-1}" ref refs/heads/old-branch
  57check "@{-1}@{0}" commit old-two
  58check "@{-1}@{1}" commit old-one
  59check "@{u}" ref refs/heads/upstream-branch
  60check "HEAD@{u}" ref refs/heads/upstream-branch
  61check "@{u}@{1}" commit upstream-one
  62check "@{-1}@{u}" ref refs/heads/master
  63check "@{-1}@{u}@{1}" commit master-one
  64check "@" commit new-two
  65check "@@{u}" ref refs/heads/upstream-branch
  66check "@@/at-test" ref refs/heads/@@/at-test
  67check "@/at-test" ref refs/heads/@/at-test
  68check "@at-test" ref refs/heads/@at-test
  69nonsense "@{u}@{-1}"
  70nonsense "@{0}@{0}"
  71nonsense "@{1}@{u}"
  72nonsense "HEAD@{-1}"
  73nonsense "@{-1}@{-1}"
  74
  75# @{N} versus HEAD@{N}
  76
  77check "HEAD@{3}" commit old-two
  78nonsense "@{3}"
  79
  80test_expect_success 'switch to old-branch' '
  81        git checkout old-branch
  82'
  83
  84check HEAD ref refs/heads/old-branch
  85check "HEAD@{1}" commit new-two
  86check "@{1}" commit old-one
  87
  88test_expect_success 'create path with @' '
  89        echo content >normal &&
  90        echo content >fun@ny &&
  91        git add normal fun@ny &&
  92        git commit -m "funny path"
  93'
  94
  95check "@:normal" blob content
  96check "@:fun@ny" blob content
  97
  98test_done