1#!/bin/sh
   2test_description='Basic subproject functionality'
   4. ./test-lib.sh
   5test_expect_success 'Super project creation' \
   7    ': >Makefile &&
   8    git add Makefile &&
   9    git commit -m "Superproject created"'
  10cat >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'
  28git branch save HEAD
  30test_expect_success 'check if fsck ignores the subprojects' \
  32    'git fsck --full'
  33test_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    }'
  42test_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    }'
  48test_expect_success 'check if diff-index works for subproject elements' \
  50    'git diff-index --exit-code --cached save -- sub1
  51    test $? = 1'
  52test_expect_success 'check if diff-tree works for subproject elements' \
  54    'git diff-tree --exit-code HEAD^ HEAD -- sub1
  55    test $? = 1'
  56test_expect_success 'check if git diff works for subproject elements' \
  58    'git diff --exit-code HEAD^ HEAD
  59    test $? = 1'
  60test_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'
  66test_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# 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# just interesting what happened...
  83# git diff --name-status -M save master
  84test_done