t / t0002-gitfile.shon commit ref_transaction_commit(): fix atomicity and avoid fd exhaustion (cf018ee)
   1#!/bin/sh
   2
   3test_description='.git file
   4
   5Verify that plumbing commands work when .git is a file
   6'
   7. ./test-lib.sh
   8
   9objpath() {
  10        echo "$1" | sed -e 's|\(..\)|\1/|'
  11}
  12
  13objck() {
  14        p=$(objpath "$1")
  15        if test ! -f "$REAL/objects/$p"
  16        then
  17                echo "Object not found: $REAL/objects/$p"
  18                false
  19        fi
  20}
  21
  22test_expect_success 'initial setup' '
  23        REAL="$(pwd)/.real" &&
  24        mv .git "$REAL"
  25'
  26
  27test_expect_success 'bad setup: invalid .git file format' '
  28        echo "gitdir $REAL" >.git &&
  29        if git rev-parse 2>.err
  30        then
  31                echo "git rev-parse accepted an invalid .git file"
  32                false
  33        fi &&
  34        if ! grep "Invalid gitfile format" .err
  35        then
  36                echo "git rev-parse returned wrong error"
  37                false
  38        fi
  39'
  40
  41test_expect_success 'bad setup: invalid .git file path' '
  42        echo "gitdir: $REAL.not" >.git &&
  43        if git rev-parse 2>.err
  44        then
  45                echo "git rev-parse accepted an invalid .git file path"
  46                false
  47        fi &&
  48        if ! grep "Not a git repository" .err
  49        then
  50                echo "git rev-parse returned wrong error"
  51                false
  52        fi
  53'
  54
  55test_expect_success 'final setup + check rev-parse --git-dir' '
  56        echo "gitdir: $REAL" >.git &&
  57        test "$REAL" = "$(git rev-parse --git-dir)"
  58'
  59
  60test_expect_success 'check hash-object' '
  61        echo "foo" >bar &&
  62        SHA=$(cat bar | git hash-object -w --stdin) &&
  63        objck $SHA
  64'
  65
  66test_expect_success 'check cat-file' '
  67        git cat-file blob $SHA >actual &&
  68        test_cmp bar actual
  69'
  70
  71test_expect_success 'check update-index' '
  72        if test -f "$REAL/index"
  73        then
  74                echo "Hmm, $REAL/index exists?"
  75                false
  76        fi &&
  77        rm -f "$REAL/objects/$(objpath $SHA)" &&
  78        git update-index --add bar &&
  79        if ! test -f "$REAL/index"
  80        then
  81                echo "$REAL/index not found"
  82                false
  83        fi &&
  84        objck $SHA
  85'
  86
  87test_expect_success 'check write-tree' '
  88        SHA=$(git write-tree) &&
  89        objck $SHA
  90'
  91
  92test_expect_success 'check commit-tree' '
  93        SHA=$(echo "commit bar" | git commit-tree $SHA) &&
  94        objck $SHA
  95'
  96
  97test_expect_success 'check rev-list' '
  98        echo $SHA >"$REAL/HEAD" &&
  99        test "$SHA" = "$(git rev-list HEAD)"
 100'
 101
 102test_done