t / t2200-add-update.shon commit apply --index-info: fall back to current index for mode changes (ece7b74)
   1#!/bin/sh
   2
   3test_description='git add -u with path limiting
   4
   5This test creates a working tree state with three files:
   6
   7  top (previously committed, modified)
   8  dir/sub (previously committed, modified)
   9  dir/other (untracked)
  10
  11and issues a git add -u with path limiting on "dir" to add
  12only the updates to dir/sub.'
  13
  14. ./test-lib.sh
  15
  16test_expect_success setup '
  17        echo initial >check &&
  18        echo initial >top &&
  19        echo initial >foo &&
  20        mkdir dir1 dir2 &&
  21        echo initial >dir1/sub1 &&
  22        echo initial >dir1/sub2 &&
  23        echo initial >dir2/sub3 &&
  24        git add check dir1 dir2 top foo &&
  25        test_tick
  26        git-commit -m initial &&
  27
  28        echo changed >check &&
  29        echo changed >top &&
  30        echo changed >dir2/sub3 &&
  31        rm -f dir1/sub1 &&
  32        echo other >dir2/other
  33'
  34
  35test_expect_success update '
  36        git add -u dir1 dir2
  37'
  38
  39test_expect_success 'update noticed a removal' '
  40        test "$(git-ls-files dir1/sub1)" = ""
  41'
  42
  43test_expect_success 'update touched correct path' '
  44        test "$(git-diff-files --name-status dir2/sub3)" = ""
  45'
  46
  47test_expect_success 'update did not touch other tracked files' '
  48        test "$(git-diff-files --name-status check)" = "M       check" &&
  49        test "$(git-diff-files --name-status top)" = "M top"
  50'
  51
  52test_expect_success 'update did not touch untracked files' '
  53        test "$(git-ls-files dir2/other)" = ""
  54'
  55
  56test_expect_success 'cache tree has not been corrupted' '
  57
  58        git ls-files -s |
  59        sed -e "s/ 0    /       /" >expect &&
  60        git ls-tree -r $(git write-tree) |
  61        sed -e "s/ blob / /" >current &&
  62        diff -u expect current
  63
  64'
  65
  66test_expect_success 'update from a subdirectory' '
  67        (
  68                cd dir1 &&
  69                echo more >sub2 &&
  70                git add -u sub2
  71        )
  72'
  73
  74test_expect_success 'change gets noticed' '
  75
  76        test "$(git diff-files --name-status dir1)" = ""
  77
  78'
  79
  80test_expect_success 'replace a file with a symlink' '
  81
  82        rm foo &&
  83        ln -s top foo &&
  84        git add -u -- foo
  85
  86'
  87
  88test_done