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