t / t2008-checkout-subdir.shon commit reset --hard/read-tree --reset -u: remove unmerged new paths (d1a43f2)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 David Symonds
   4
   5test_description='git checkout from subdirectories'
   6
   7. ./test-lib.sh
   8
   9test_expect_success setup '
  10
  11        echo "base" > file0 &&
  12        git add file0 &&
  13        mkdir dir1 &&
  14        echo "hello" > dir1/file1 &&
  15        git add dir1/file1 &&
  16        mkdir dir2 &&
  17        echo "bonjour" > dir2/file2 &&
  18        git add dir2/file2 &&
  19        test_tick &&
  20        git commit -m "populate tree"
  21
  22'
  23
  24test_expect_success 'remove and restore with relative path' '
  25
  26        (
  27                cd dir1 &&
  28                rm ../file0 &&
  29                git checkout HEAD -- ../file0 &&
  30                test "base" = "$(cat ../file0)" &&
  31                rm ../dir2/file2 &&
  32                git checkout HEAD -- ../dir2/file2 &&
  33                test "bonjour" = "$(cat ../dir2/file2)" &&
  34                rm ../file0 ./file1 &&
  35                git checkout HEAD -- .. &&
  36                test "base" = "$(cat ../file0)" &&
  37                test "hello" = "$(cat file1)"
  38        )
  39
  40'
  41
  42test_expect_success 'checkout with empty prefix' '
  43
  44        rm file0 &&
  45        git checkout HEAD -- file0 &&
  46        test "base" = "$(cat file0)"
  47
  48'
  49
  50test_expect_success 'checkout with simple prefix' '
  51
  52        rm dir1/file1 &&
  53        git checkout HEAD -- dir1 &&
  54        test "hello" = "$(cat dir1/file1)" &&
  55        rm dir1/file1 &&
  56        git checkout HEAD -- dir1/file1 &&
  57        test "hello" = "$(cat dir1/file1)"
  58
  59'
  60
  61# This is not expected to work as ls-files was not designed
  62# to deal with such.  Enable it when ls-files is updated.
  63: test_expect_success 'checkout with complex relative path' '
  64
  65        rm file1 &&
  66        git checkout HEAD -- ../dir1/../dir1/file1 && test -f ./file1
  67
  68'
  69
  70test_expect_success 'relative path outside tree should fail' \
  71        'test_must_fail git checkout HEAD -- ../../Makefile'
  72
  73test_expect_success 'incorrect relative path to file should fail (1)' \
  74        'test_must_fail git checkout HEAD -- ../file0'
  75
  76test_expect_success 'incorrect relative path should fail (2)' \
  77        '( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )'
  78
  79test_expect_success 'incorrect relative path should fail (3)' \
  80        '( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )'
  81
  82test_done