t / t8007-cat-file-textconv.shon commit vcs-svn: allow input from file descriptor (cb3f87c)
   1#!/bin/sh
   2
   3test_description='git cat-file textconv support'
   4. ./test-lib.sh
   5
   6cat >helper <<'EOF'
   7#!/bin/sh
   8grep -q '^bin: ' "$1" || { echo "E: $1 is not \"binary\" file" 1>&2; exit 1; }
   9sed 's/^bin: /converted: /' "$1"
  10EOF
  11chmod +x helper
  12
  13test_expect_success 'setup ' '
  14        echo "bin: test" >one.bin &&
  15        if test_have_prereq SYMLINKS; then
  16                ln -s one.bin symlink.bin
  17        fi &&
  18        git add . &&
  19        GIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&
  20        echo "bin: test version 2" >one.bin &&
  21        GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
  22'
  23
  24cat >expected <<EOF
  25fatal: git cat-file --textconv: unable to run textconv on :one.bin
  26EOF
  27
  28test_expect_success 'no filter specified' '
  29        git cat-file --textconv :one.bin 2>result
  30        test_cmp expected result
  31'
  32
  33test_expect_success 'setup textconv filters' '
  34        echo "*.bin diff=test" >.gitattributes &&
  35        git config diff.test.textconv ./helper &&
  36        git config diff.test.cachetextconv false
  37'
  38
  39cat >expected <<EOF
  40bin: test version 2
  41EOF
  42
  43test_expect_success 'cat-file without --textconv' '
  44        git cat-file blob :one.bin >result &&
  45        test_cmp expected result
  46'
  47
  48cat >expected <<EOF
  49bin: test
  50EOF
  51
  52test_expect_success 'cat-file without --textconv on previous commit' '
  53        git cat-file -p HEAD^:one.bin >result &&
  54        test_cmp expected result
  55'
  56
  57cat >expected <<EOF
  58converted: test version 2
  59EOF
  60
  61test_expect_success 'cat-file --textconv on last commit' '
  62        git cat-file --textconv :one.bin >result &&
  63        test_cmp expected result
  64'
  65
  66cat >expected <<EOF
  67converted: test
  68EOF
  69
  70test_expect_success 'cat-file --textconv on previous commit' '
  71        git cat-file --textconv HEAD^:one.bin >result &&
  72        test_cmp expected result
  73'
  74
  75test_expect_success SYMLINKS 'cat-file without --textconv (symlink)' '
  76        git cat-file blob :symlink.bin >result &&
  77        printf "%s" "one.bin" >expected
  78        test_cmp expected result
  79'
  80
  81
  82test_expect_success SYMLINKS 'cat-file --textconv on index (symlink)' '
  83        ! git cat-file --textconv :symlink.bin 2>result &&
  84        cat >expected <<\EOF &&
  85fatal: git cat-file --textconv: unable to run textconv on :symlink.bin
  86EOF
  87        test_cmp expected result
  88'
  89
  90test_expect_success SYMLINKS 'cat-file --textconv on HEAD (symlink)' '
  91        ! git cat-file --textconv HEAD:symlink.bin 2>result &&
  92        cat >expected <<EOF &&
  93fatal: git cat-file --textconv: unable to run textconv on HEAD:symlink.bin
  94EOF
  95        test_cmp expected result
  96'
  97
  98test_done