t / t3010-ls-files-killed-modified.shon commit Merge branch 'sb/t5400-remove-unused' (3d2c1bf)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5
   6test_description='git ls-files -k and -m flags test.
   7
   8This test prepares the following in the cache:
   9
  10    path0       - a file
  11    path1       - a symlink
  12    path2/file2 - a file in a directory
  13    path3/file3 - a file in a directory
  14    pathx/ju    - a file in a directory
  15    submod1/    - a submodule
  16    submod2/    - another submodule
  17
  18and the following on the filesystem:
  19
  20    path0/file0 - a file in a directory
  21    path1/file1 - a file in a directory
  22    path2       - a file
  23    path3       - a symlink
  24    path4       - a file
  25    path5       - a symlink
  26    path6/file6 - a file in a directory
  27    pathx/ju/nk - a file in a directory to be killed
  28    submod1/    - a submodule (modified from the cache)
  29    submod2/    - a submodule (matches the cache)
  30
  31git ls-files -k should report that existing filesystem objects
  32path0/*, path1/*, path2 and path3 to be killed.
  33
  34Also for modification test, the cache and working tree have:
  35
  36    path7       - an empty file, modified to a non-empty file.
  37    path8       - a non-empty file, modified to an empty file.
  38    path9       - an empty file, cache dirtied.
  39    path10      - a non-empty file, cache dirtied.
  40
  41We should report path0, path1, path2/file2, path3/file3, path7 and path8
  42modified without reporting path9 and path10.  submod1 is also modified.
  43'
  44. ./test-lib.sh
  45
  46test_expect_success 'git update-index --add to add various paths.' '
  47        date >path0 &&
  48        test_ln_s_add xyzzy path1 &&
  49        mkdir path2 path3 pathx &&
  50        date >path2/file2 &&
  51        date >path3/file3 &&
  52        >pathx/ju &&
  53        : >path7 &&
  54        date >path8 &&
  55        : >path9 &&
  56        date >path10 &&
  57        git update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 &&
  58        for i in 1 2
  59        do
  60                git init submod$i &&
  61                (
  62                        cd submod$i && git commit --allow-empty -m "empty $i"
  63                ) || break
  64        done &&
  65        git update-index --add submod[12]
  66        (
  67                cd submod1 &&
  68                git commit --allow-empty -m "empty 1 (updated)"
  69        ) &&
  70        rm -fr path?    # leave path10 alone
  71'
  72
  73test_expect_success 'git ls-files -k to show killed files.' '
  74        date >path2 &&
  75        if test_have_prereq SYMLINKS
  76        then
  77                ln -s frotz path3 &&
  78                ln -s nitfol path5
  79        else
  80                date >path3 &&
  81                date >path5
  82        fi &&
  83        mkdir -p path0 path1 path6 pathx/ju &&
  84        date >path0/file0 &&
  85        date >path1/file1 &&
  86        date >path6/file6 &&
  87        date >path7 &&
  88        : >path8 &&
  89        : >path9 &&
  90        touch path10 &&
  91        >pathx/ju/nk &&
  92        cat >.expected <<-\EOF
  93        path0/file0
  94        path1/file1
  95        path2
  96        path3
  97        pathx/ju/nk
  98        EOF
  99'
 100
 101test_expect_success 'git ls-files -k output (w/o icase)' '
 102        git ls-files -k >.output
 103        test_cmp .expected .output
 104'
 105
 106test_expect_success 'git ls-files -k output (w/ icase)' '
 107        git -c core.ignorecase=true ls-files -k >.output
 108        test_cmp .expected .output
 109'
 110
 111test_expect_success 'git ls-files -m to show modified files.' '
 112        git ls-files -m >.output
 113'
 114
 115test_expect_success 'validate git ls-files -m output.' '
 116        cat >.expected <<-\EOF &&
 117        path0
 118        path1
 119        path2/file2
 120        path3/file3
 121        path7
 122        path8
 123        pathx/ju
 124        submod1
 125        EOF
 126        test_cmp .expected .output
 127'
 128
 129test_done