ddc3921ac6a009dfc706cd19ad94f2b29af4b1cc
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Junio C Hamano
   4#
   5
   6test_description='Try various core-level commands in subdirectory.
   7'
   8
   9. ./test-lib.sh
  10
  11test_expect_success setup '
  12        long="a b c d e f g h i j k l m n o p q r s t u v w x y z" &&
  13        for c in $long; do echo $c; done >one &&
  14        mkdir dir &&
  15        for c in x y z $long a b c; do echo $c; done >dir/two &&
  16        cp one original.one &&
  17        cp dir/two original.two
  18'
  19LF='
  20'
  21
  22test_expect_success 'update-index and ls-files' '
  23        git update-index --add one &&
  24        case "`git ls-files`" in
  25        one) echo pass one ;;
  26        *) echo bad one; exit 1 ;;
  27        esac &&
  28        (
  29                cd dir &&
  30                git update-index --add two &&
  31                case "`git ls-files`" in
  32                two) echo pass two ;;
  33                *) echo bad two; exit 1 ;;
  34                esac
  35        ) &&
  36        case "`git ls-files`" in
  37        dir/two"$LF"one) echo pass both ;;
  38        *) echo bad; exit 1 ;;
  39        esac
  40'
  41
  42test_expect_success 'cat-file' '
  43        two=`git ls-files -s dir/two` &&
  44        two=`expr "$two" : "[0-7]* \\([0-9a-f]*\\)"` &&
  45        echo "$two" &&
  46        git cat-file -p "$two" >actual &&
  47        cmp dir/two actual &&
  48        (
  49                cd dir &&
  50                git cat-file -p "$two" >actual &&
  51                cmp two actual
  52        )
  53'
  54rm -f actual dir/actual
  55
  56test_expect_success 'diff-files' '
  57        echo a >>one &&
  58        echo d >>dir/two &&
  59        case "`git diff-files --name-only`" in
  60        dir/two"$LF"one) echo pass top ;;
  61        *) echo bad top; exit 1 ;;
  62        esac &&
  63        # diff should not omit leading paths
  64        (
  65                cd dir &&
  66                case "`git diff-files --name-only`" in
  67                dir/two"$LF"one) echo pass subdir ;;
  68                *) echo bad subdir; exit 1 ;;
  69                esac &&
  70                case "`git diff-files --name-only .`" in
  71                dir/two) echo pass subdir limited ;;
  72                *) echo bad subdir limited; exit 1 ;;
  73                esac
  74        )
  75'
  76
  77test_expect_success 'write-tree' '
  78        top=`git write-tree` &&
  79        echo $top &&
  80        (
  81                cd dir &&
  82                sub=`git write-tree` &&
  83                echo $sub &&
  84                test "z$top" = "z$sub"
  85        )
  86'
  87
  88test_expect_success 'checkout-index' '
  89        git checkout-index -f -u one &&
  90        cmp one original.one &&
  91        (
  92                cd dir &&
  93                git checkout-index -f -u two &&
  94                cmp two ../original.two
  95        )
  96'
  97
  98test_expect_success 'read-tree' '
  99        rm -f one dir/two &&
 100        tree=`git write-tree` &&
 101        git read-tree --reset -u "$tree" &&
 102        cmp one original.one &&
 103        cmp dir/two original.two &&
 104        (
 105                cd dir &&
 106                rm -f two &&
 107                git read-tree --reset -u "$tree" &&
 108                cmp two ../original.two &&
 109                cmp ../one ../original.one
 110        )
 111'
 112
 113test_expect_success 'alias expansion' '
 114        (
 115                git config alias.ss status &&
 116                cd dir &&
 117                git status &&
 118                git ss
 119        )
 120'
 121
 122test_expect_success '!alias expansion' '
 123        pwd >expect &&
 124        (
 125                git config alias.test !pwd &&
 126                cd dir &&
 127                git test >../actual
 128        ) &&
 129        test_cmp expect actual
 130'
 131
 132test_expect_success 'GIT_PREFIX for !alias' '
 133        printf "dir/" >expect &&
 134        (
 135                git config alias.test "!sh -c \"printf \$GIT_PREFIX\"" &&
 136                cd dir &&
 137                git test >../actual
 138        ) &&
 139        test_cmp expect actual
 140'
 141
 142test_expect_success 'no file/rev ambiguity check inside .git' '
 143        git commit -a -m 1 &&
 144        (
 145                cd .git &&
 146                git show -s HEAD
 147        )
 148'
 149
 150test_expect_success 'no file/rev ambiguity check inside a bare repo' '
 151        git clone -s --bare .git foo.git &&
 152        (
 153                cd foo.git &&
 154                GIT_DIR=. git show -s HEAD
 155        )
 156'
 157
 158# This still does not work as it should...
 159: test_expect_success 'no file/rev ambiguity check inside a bare repo' '
 160        git clone -s --bare .git foo.git &&
 161        (
 162                cd foo.git &&
 163                git show -s HEAD
 164        )
 165'
 166
 167test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
 168        rm -fr foo.git &&
 169        git clone -s .git another &&
 170        ln -s another yetanother &&
 171        (
 172                cd yetanother/.git &&
 173                git show -s HEAD
 174        )
 175'
 176
 177test_done