1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5test_description='git ls-files --others --exclude
   7This test runs git ls-files --others and tests --exclude patterns.
   9'
  10. ./test-lib.sh
  12rm -fr one three
  14for dir in . one one/two three
  15do
  16  mkdir -p $dir &&
  17  for i in 1 2 3 4 5 6 7 8
  18  do
  19    >$dir/a.$i
  20  done
  21done
  22cat >expect <<EOF
  24a.2
  25a.4
  26a.5
  27a.8
  28one/a.3
  29one/a.4
  30one/a.5
  31one/a.7
  32one/two/a.2
  33one/two/a.3
  34one/two/a.5
  35one/two/a.7
  36one/two/a.8
  37three/a.2
  38three/a.3
  39three/a.4
  40three/a.5
  41three/a.8
  42EOF
  43echo '.gitignore
  45output
  46expect
  47.gitignore
  48*.7
  49!*.8' >.git/ignore
  50echo '*.1
  52/*.3
  53!*.6' >.gitignore
  54echo '*.2
  55two/*.4
  56!*.7
  57*.8' >one/.gitignore
  58echo '!*.2
  59!*.8' >one/two/.gitignore
  60test_expect_success \
  62    'git ls-files --others with various exclude options.' \
  63    'git ls-files --others \
  64       --exclude=\*.6 \
  65       --exclude-per-directory=.gitignore \
  66       --exclude-from=.git/ignore \
  67       >output &&
  68     test_cmp expect output'
  69# Test \r\n (MSDOS-like systems)
  71printf '*.1\r\n/*.3\r\n!*.6\r\n' >.gitignore
  72test_expect_success \
  74    'git ls-files --others with \r\n line endings.' \
  75    'git ls-files --others \
  76       --exclude=\*.6 \
  77       --exclude-per-directory=.gitignore \
  78       --exclude-from=.git/ignore \
  79       >output &&
  80     test_cmp expect output'
  81cat > excludes-file << EOF
  83*.[1-8]
  84e*
  85EOF
  86git config core.excludesFile excludes-file
  88git status | grep "^#   " > output
  90cat > expect << EOF
  92#       .gitignore
  93#       a.6
  94#       one/
  95#       output
  96#       three/
  97EOF
  98test_expect_success 'git-status honours core.excludesfile' \
 100        'test_cmp expect output'
 101test_expect_success 'trailing slash in exclude allows directory match(1)' '
 103        git ls-files --others --exclude=one/ >output &&
 105        if grep "^one/" output
 106        then
 107                echo Ooops
 108                false
 109        else
 110                : happy
 111        fi
 112'
 114test_expect_success 'trailing slash in exclude allows directory match (2)' '
 116        git ls-files --others --exclude=one/two/ >output &&
 118        if grep "^one/two/" output
 119        then
 120                echo Ooops
 121                false
 122        else
 123                : happy
 124        fi
 125'
 127test_expect_success 'trailing slash in exclude forces directory match (1)' '
 129        >two
 131        git ls-files --others --exclude=two/ >output &&
 132        grep "^two" output
 133'
 135test_expect_success 'trailing slash in exclude forces directory match (2)' '
 137        git ls-files --others --exclude=one/a.1/ >output &&
 139        grep "^one/a.1" output
 140'
 142test_done