1#!/bin/sh 2# 3# Copyright (c) 2008 Nguyễn Thái Ngọc Duy 4# 5 6test_description='skip-worktree bit test' 7 8. ./test-lib.sh 9 10cat >expect.full <<EOF 11H 1 12H 2 13H init.t 14H sub/1 15H sub/2 16EOF 17 18cat >expect.skip <<EOF 19S 1 20H 2 21H init.t 22S sub/1 23H sub/2 24EOF 25 26setup_absent() { 27 test -f 1 && rm 1 28 git update-index --remove 1 && 29 git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 && 30 git update-index --skip-worktree 1 31} 32 33test_absent() { 34 echo "100644 $EMPTY_BLOB 0 1" > expected && 35 git ls-files --stage 1 > result && 36 test_cmp expected result && 37 test ! -f 1 38} 39 40setup_dirty() { 41 git update-index --force-remove 1 && 42 echo dirty > 1 && 43 git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 && 44 git update-index --skip-worktree 1 45} 46 47test_dirty() { 48 echo "100644 $EMPTY_BLOB 0 1" > expected && 49 git ls-files --stage 1 > result && 50 test_cmp expected result && 51 echo dirty > expected 52 test_cmp expected 1 53} 54 55test_expect_success 'setup' ' 56 test_commit init && 57 mkdir sub && 58 touch ./1 ./2 sub/1 sub/2 && 59 git add 1 2 sub/1 sub/2 && 60 git update-index --skip-worktree 1 sub/1 && 61 git ls-files -t > result && 62 test_cmp expect.skip result 63' 64 65test_expect_success 'update-index' ' 66 setup_absent && 67 git update-index 1 && 68 test_absent 69' 70 71test_expect_success 'update-index' ' 72 setup_dirty && 73 git update-index 1 && 74 test_dirty 75' 76 77test_expect_success 'update-index --remove' ' 78 setup_absent && 79 git update-index --remove 1 && 80 test -z "$(git ls-files 1)" && 81 test ! -f 1 82' 83 84test_expect_success 'update-index --remove' ' 85 setup_dirty && 86 git update-index --remove 1 && 87 test -z "$(git ls-files 1)" && 88 echo dirty > expected && 89 test_cmp expected 1 90' 91 92test_expect_success 'ls-files --deleted' ' 93 setup_absent && 94 test -z "$(git ls-files -d)" 95' 96 97test_expect_success 'ls-files --deleted' ' 98 setup_dirty && 99 test -z "$(git ls-files -d)" 100' 101 102test_expect_success 'ls-files --modified' ' 103 setup_absent && 104 test -z "$(git ls-files -m)" 105' 106 107test_expect_success 'ls-files --modified' ' 108 setup_dirty && 109 test -z "$(git ls-files -m)" 110' 111 112echo ":000000 100644 $ZERO_OID $EMPTY_BLOB A 1" > expected 113test_expect_success 'diff-index does not examine skip-worktree absent entries' ' 114 setup_absent && 115 git diff-index HEAD -- 1 > result && 116 test_cmp expected result 117' 118 119test_expect_success 'diff-index does not examine skip-worktree dirty entries' ' 120 setup_dirty && 121 git diff-index HEAD -- 1 > result && 122 test_cmp expected result 123' 124 125test_expect_success 'diff-files does not examine skip-worktree absent entries' ' 126 setup_absent && 127 test -z "$(git diff-files -- one)" 128' 129 130test_expect_success 'diff-files does not examine skip-worktree dirty entries' ' 131 setup_dirty && 132 test -z "$(git diff-files -- one)" 133' 134 135test_expect_success 'commit on skip-worktree absent entries' ' 136 git reset && 137 setup_absent && 138 test_must_fail git commit -m null 1 139' 140 141test_expect_success 'commit on skip-worktree dirty entries' ' 142 git reset && 143 setup_dirty && 144 test_must_fail git commit -m null 1 145' 146 147test_done 148