t / t2021-checkout-overwrite.shon commit sha1_name.c: get_describe_name() by definition groks only commits (6269b6b)
   1#!/bin/sh
   2
   3test_description='checkout must not overwrite an untracked objects'
   4. ./test-lib.sh
   5
   6test_expect_success 'setup' '
   7
   8        mkdir -p a/b/c &&
   9        >a/b/c/d &&
  10        git add -A &&
  11        git commit -m base &&
  12        git tag start
  13'
  14
  15test_expect_success 'create a commit where dir a/b changed to file' '
  16
  17        git checkout -b file &&
  18        rm -rf a/b &&
  19        >a/b &&
  20        git add -A &&
  21        git commit -m "dir to file"
  22'
  23
  24test_expect_success 'checkout commit with dir must not remove untracked a/b' '
  25
  26        git rm --cached a/b &&
  27        git commit -m "un-track the file" &&
  28        test_must_fail git checkout start &&
  29        test -f a/b
  30'
  31
  32test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
  33
  34        rm -rf a/b &&   # cleanup if previous test failed
  35        git checkout -f -b symlink start &&
  36        rm -rf a/b &&
  37        ln -s foo a/b &&
  38        git add -A &&
  39        git commit -m "dir to symlink"
  40'
  41
  42test_expect_success SYMLINKS 'checkout commit with dir must not remove untracked a/b' '
  43
  44        git rm --cached a/b &&
  45        git commit -m "un-track the symlink" &&
  46        test_must_fail git checkout start &&
  47        test -h a/b
  48'
  49
  50test_done