t / t7011-skip-worktree-reading.shon commit t3506: validate '-m 1 -ff' is now accepted for non-merge commits (1c32013)
   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
 112test_expect_success 'grep with skip-worktree file' '
 113        git update-index --no-skip-worktree 1 &&
 114        echo test > 1 &&
 115        git update-index 1 &&
 116        git update-index --skip-worktree 1 &&
 117        rm 1 &&
 118        test "$(git grep --no-ext-grep test)" = "1:test"
 119'
 120
 121echo ":000000 100644 $ZERO_OID $EMPTY_BLOB A    1" > expected
 122test_expect_success 'diff-index does not examine skip-worktree absent entries' '
 123        setup_absent &&
 124        git diff-index HEAD -- 1 > result &&
 125        test_cmp expected result
 126'
 127
 128test_expect_success 'diff-index does not examine skip-worktree dirty entries' '
 129        setup_dirty &&
 130        git diff-index HEAD -- 1 > result &&
 131        test_cmp expected result
 132'
 133
 134test_expect_success 'diff-files does not examine skip-worktree absent entries' '
 135        setup_absent &&
 136        test -z "$(git diff-files -- one)"
 137'
 138
 139test_expect_success 'diff-files does not examine skip-worktree dirty entries' '
 140        setup_dirty &&
 141        test -z "$(git diff-files -- one)"
 142'
 143
 144test_expect_success 'git-rm succeeds on skip-worktree absent entries' '
 145        setup_absent &&
 146        git rm 1
 147'
 148
 149test_expect_success 'commit on skip-worktree absent entries' '
 150        git reset &&
 151        setup_absent &&
 152        test_must_fail git commit -m null 1
 153'
 154
 155test_expect_success 'commit on skip-worktree dirty entries' '
 156        git reset &&
 157        setup_dirty &&
 158        test_must_fail git commit -m null 1
 159'
 160
 161test_done