t / t1020-subdirectory.shon commit Merge branch 'db/delta-applier' into svn-fe (a8d3d26)
   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'
 121test_expect_success 'no file/rev ambiguity check inside .git' '
 122        git commit -a -m 1 &&
 123        (
 124                cd .git &&
 125                git show -s HEAD
 126        )
 127'
 128
 129test_expect_success 'no file/rev ambiguity check inside a bare repo' '
 130        git clone -s --bare .git foo.git &&
 131        (
 132                cd foo.git &&
 133                GIT_DIR=. git show -s HEAD
 134        )
 135'
 136
 137# This still does not work as it should...
 138: test_expect_success 'no file/rev ambiguity check inside a bare repo' '
 139        git clone -s --bare .git foo.git &&
 140        (
 141                cd foo.git &&
 142                git show -s HEAD
 143        )
 144'
 145
 146test_expect_success SYMLINKS 'detection should not be fooled by a symlink' '
 147        rm -fr foo.git &&
 148        git clone -s .git another &&
 149        ln -s another yetanother &&
 150        (
 151                cd yetanother/.git &&
 152                git show -s HEAD
 153        )
 154'
 155
 156test_done