t / t3100-ls-tree-restrict.shon commit merge-recursive: adjust git-ls-tree use for the latest. (a6b51f1)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5
   6test_description='git-ls-tree test.
   7
   8This test runs git-ls-tree with the following in a tree.
   9
  10    path0       - a file
  11    path1       - a symlink
  12    path2/foo   - a file in a directory
  13    path2/bazbo - a symlink in a directory
  14    path2/baz/b - a file in a directory in a directory
  15
  16The new path restriction code should do the right thing for path2 and
  17path2/baz.  Also path0/ should snow nothing.
  18'
  19. ./test-lib.sh
  20
  21test_expect_success \
  22    'setup' \
  23    'mkdir path2 path2/baz &&
  24     echo Hi >path0 &&
  25     ln -s path0 path1 &&
  26     echo Lo >path2/foo &&
  27     ln -s ../path1 path2/bazbo &&
  28     echo Mi >path2/baz/b &&
  29     find path? \( -type f -o -type l \) -print |
  30     xargs git-update-index --add &&
  31     tree=`git-write-tree` &&
  32     echo $tree'
  33
  34_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
  35_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
  36test_output () {
  37    sed -e "s/ $_x40    / X     /" <current >check
  38    diff -u expected check
  39}
  40
  41test_expect_success \
  42    'ls-tree plain' \
  43    'git-ls-tree $tree >current &&
  44     cat >expected <<\EOF &&
  45100644 blob X   path0
  46120000 blob X   path1
  47040000 tree X   path2
  48EOF
  49     test_output'
  50
  51test_expect_success \
  52    'ls-tree recursive' \
  53    'git-ls-tree -r $tree >current &&
  54     cat >expected <<\EOF &&
  55100644 blob X   path0
  56120000 blob X   path1
  57100644 blob X   path2/baz/b
  58120000 blob X   path2/bazbo
  59100644 blob X   path2/foo
  60EOF
  61     test_output'
  62
  63test_expect_success \
  64    'ls-tree filtered with path' \
  65    'git-ls-tree $tree path >current &&
  66     cat >expected <<\EOF &&
  67EOF
  68     test_output'
  69
  70
  71# it used to be path1 and then path0, but with pathspec semantics
  72# they are shown in canonical order.
  73test_expect_success \
  74    'ls-tree filtered with path1 path0' \
  75    'git-ls-tree $tree path1 path0 >current &&
  76     cat >expected <<\EOF &&
  77100644 blob X   path0
  78120000 blob X   path1
  79EOF
  80     test_output'
  81
  82test_expect_success \
  83    'ls-tree filtered with path0/' \
  84    'git-ls-tree $tree path0/ >current &&
  85     cat >expected <<\EOF &&
  86EOF
  87     test_output'
  88
  89# It used to show path2 and its immediate children but
  90# with pathspec semantics it shows only path2
  91test_expect_success \
  92    'ls-tree filtered with path2' \
  93    'git-ls-tree $tree path2 >current &&
  94     cat >expected <<\EOF &&
  95040000 tree X   path2
  96EOF
  97     test_output'
  98
  99# ... and path2/ shows the children.
 100test_expect_success \
 101    'ls-tree filtered with path2/' \
 102    'git-ls-tree $tree path2/ >current &&
 103     cat >expected <<\EOF &&
 104040000 tree X   path2/baz
 105120000 blob X   path2/bazbo
 106100644 blob X   path2/foo
 107EOF
 108     test_output'
 109
 110# The same change -- exact match does not show children of
 111# path2/baz
 112test_expect_success \
 113    'ls-tree filtered with path2/baz' \
 114    'git-ls-tree $tree path2/baz >current &&
 115     cat >expected <<\EOF &&
 116040000 tree X   path2/baz
 117EOF
 118     test_output'
 119
 120test_done