325d8212cb8f236216b0275a53849c80d9e76632
   1#!/bin/sh
   2
   3test_description='test git rev-parse'
   4. ./test-lib.sh
   5
   6# usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir
   7test_rev_parse () {
   8        d=
   9        bare=
  10        while :
  11        do
  12                case "$1" in
  13                -C) d="$2"; shift; shift ;;
  14                -b) case "$2" in
  15                    [tfu]*) bare="$2"; shift; shift ;;
  16                    *) error "test_rev_parse: bogus core.bare value '$2'" ;;
  17                    esac ;;
  18                -*) error "test_rev_parse: unrecognized option '$1'" ;;
  19                *) break ;;
  20                esac
  21        done
  22
  23        name=$1
  24        shift
  25
  26        for o in --is-bare-repository \
  27                 --is-inside-git-dir \
  28                 --is-inside-work-tree \
  29                 --show-prefix \
  30                 --git-dir
  31        do
  32                test $# -eq 0 && break
  33                expect="$1"
  34                test_expect_success "$name: $o" '
  35                        case "$bare" in
  36                        t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
  37                        f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
  38                        u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
  39                        esac &&
  40
  41                        echo "$expect" >expect &&
  42                        git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
  43                        test_cmp expect actual
  44                '
  45                shift
  46        done
  47}
  48
  49ROOT=$(pwd)
  50
  51test_expect_success 'setup' '
  52        mkdir -p sub/dir work &&
  53        cp -R .git repo.git
  54'
  55
  56test_rev_parse toplevel false false true '' .git
  57
  58test_rev_parse -C .git .git/ false true false '' .
  59test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git"
  60
  61test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git"
  62
  63test_rev_parse -b t 'core.bare = true' true false false
  64
  65test_rev_parse -b u 'core.bare undefined' false false true
  66
  67GIT_DIR=../.git
  68export GIT_DIR
  69
  70test_rev_parse -C work -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
  71
  72test_rev_parse -C work -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
  73
  74test_rev_parse -C work -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
  75
  76GIT_DIR=../repo.git
  77
  78test_rev_parse -C work -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
  79
  80test_rev_parse -C work -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
  81
  82test_rev_parse -C work -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
  83
  84test_done