t / t3040-subprojects-basic.shon commit merge-recursive: don't segfault while handling rename clashes (c94736a)
   1#!/bin/sh
   2
   3test_description='Basic subproject functionality'
   4. ./test-lib.sh
   5
   6test_expect_success 'Super project creation' \
   7    ': >Makefile &&
   8    git add Makefile &&
   9    git commit -m "Superproject created"'
  10
  11
  12cat >expected <<EOF
  13:000000 160000 00000... A       sub1
  14:000000 160000 00000... A       sub2
  15EOF
  16test_expect_success 'create subprojects' \
  17    'mkdir sub1 &&
  18    ( cd sub1 && git init && : >Makefile && git add * &&
  19    git commit -q -m "subproject 1" ) &&
  20    mkdir sub2 &&
  21    ( cd sub2 && git init && : >Makefile && git add * &&
  22    git commit -q -m "subproject 2" ) &&
  23    git update-index --add sub1 &&
  24    git add sub2 &&
  25    git commit -q -m "subprojects added" &&
  26    git diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current &&
  27    test_cmp expected current'
  28
  29git branch save HEAD
  30
  31test_expect_success 'check if fsck ignores the subprojects' \
  32    'git fsck --full'
  33
  34test_expect_success 'check if commit in a subproject detected' \
  35    '( cd sub1 &&
  36    echo "all:" >>Makefile &&
  37    echo "      true" >>Makefile &&
  38    git commit -q -a -m "make all" ) && {
  39        git diff-files --exit-code
  40        test $? = 1
  41    }'
  42
  43test_expect_success 'check if a changed subproject HEAD can be committed' \
  44    'git commit -q -a -m "sub1 changed" && {
  45        git diff-tree --exit-code HEAD^ HEAD
  46        test $? = 1
  47    }'
  48
  49test_expect_success 'check if diff-index works for subproject elements' \
  50    'git diff-index --exit-code --cached save -- sub1
  51    test $? = 1'
  52
  53test_expect_success 'check if diff-tree works for subproject elements' \
  54    'git diff-tree --exit-code HEAD^ HEAD -- sub1
  55    test $? = 1'
  56
  57test_expect_success 'check if git diff works for subproject elements' \
  58    'git diff --exit-code HEAD^ HEAD
  59    test $? = 1'
  60
  61test_expect_success 'check if clone works' \
  62    'git ls-files -s >expected &&
  63    git clone -l -s . cloned &&
  64    ( cd cloned && git ls-files -s ) >current &&
  65    test_cmp expected current'
  66
  67test_expect_success 'removing and adding subproject' \
  68    'git update-index --force-remove -- sub2 &&
  69    mv sub2 sub3 &&
  70    git add sub3 &&
  71    git commit -q -m "renaming a subproject" && {
  72        git diff -M --name-status --exit-code HEAD^ HEAD
  73        test $? = 1
  74    }'
  75
  76# the index must contain the object name the HEAD of the
  77# subproject sub1 was at the point "save"
  78test_expect_success 'checkout in superproject' \
  79    'git checkout save &&
  80    git diff-index --exit-code --raw --cached save -- sub1'
  81
  82# just interesting what happened...
  83# git diff --name-status -M save master
  84
  85test_done