1#!/bin/sh 2# 3# Copyright (c) 2016 Jacob Keller, based on t4041 by Jens Lehmann 4# 5 6test_description='Test for submodule diff on non-checked out submodule 7 8This test tries to verify that add_submodule_odb works when the submodule was 9initialized previously but the checkout has since been removed. 10' 11 12. ./test-lib.sh 13 14# Tested non-UTF-8 encoding 15test_encoding="ISO8859-1" 16 17# String "added" in German (translated with Google Translate), encoded in UTF-8, 18# used in sample commit log messages in add_file() function below. 19added=$(printf "hinzugef\303\274gt") 20 21add_file () { 22 ( 23 cd "$1" && 24 shift && 25 for name 26 do 27 echo "$name" >"$name" && 28 git add "$name" && 29 test_tick && 30 # "git commit -m" would break MinGW, as Windows refuse to pass 31 # $test_encoding encoded parameter to git. 32 echo "Add $name ($added $name)" | iconv -f utf-8 -t $test_encoding | 33 git -c "i18n.commitEncoding=$test_encoding" commit -F - 34 done >/dev/null && 35 git rev-parse --short --verify HEAD 36 ) 37} 38 39commit_file () { 40 test_tick && 41 git commit "$@" -m "Commit $*" >/dev/null 42} 43 44test_expect_success 'setup - submodules' ' 45 test_create_repo sm2 && 46 add_file . foo && 47 add_file sm2 foo1 foo2 && 48 smhead1=$(git -C sm2 rev-parse --short --verify HEAD) 49' 50 51test_expect_success 'setup - git submodule add' ' 52 git submodule add ./sm2 sm1 && 53 commit_file sm1 .gitmodules && 54 git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual && 55 cat >expected <<-EOF && 56 Submodule sm1 0000000...$smhead1 (new submodule) 57 EOF 58 test_cmp expected actual 59' 60 61test_expect_success 'submodule directory removed' ' 62 rm -rf sm1 && 63 git diff-tree -p --no-commit-id --submodule=log HEAD -- sm1 >actual && 64 cat >expected <<-EOF && 65 Submodule sm1 0000000...$smhead1 (new submodule) 66 EOF 67 test_cmp expected actual 68' 69 70test_expect_success 'setup - submodule multiple commits' ' 71 git submodule update --checkout sm1 && 72 smhead2=$(add_file sm1 foo3 foo4) && 73 commit_file sm1 && 74 git diff-tree -p --no-commit-id --submodule=log HEAD >actual && 75 cat >expected <<-EOF && 76 Submodule sm1 $smhead1..$smhead2: 77 > Add foo4 ($added foo4) 78 > Add foo3 ($added foo3) 79 EOF 80 test_cmp expected actual 81' 82 83test_expect_success 'submodule removed multiple commits' ' 84 rm -rf sm1 && 85 git diff-tree -p --no-commit-id --submodule=log HEAD >actual && 86 cat >expected <<-EOF && 87 Submodule sm1 $smhead1..$smhead2: 88 > Add foo4 ($added foo4) 89 > Add foo3 ($added foo3) 90 EOF 91 test_cmp expected actual 92' 93 94test_expect_success 'submodule not initialized in new clone' ' 95 git clone . sm3 && 96 git -C sm3 diff-tree -p --no-commit-id --submodule=log HEAD >actual && 97 cat >expected <<-EOF && 98 Submodule sm1 $smhead1...$smhead2 (commits not present) 99 EOF 100 test_cmp expected actual 101' 102 103test_expect_success 'setup submodule moved' ' 104 git submodule update --checkout sm1 && 105 git mv sm1 sm4 && 106 commit_file sm4 && 107 git diff-tree -p --no-commit-id --submodule=log HEAD >actual && 108 cat >expected <<-EOF && 109 Submodule sm4 0000000...$smhead2 (new submodule) 110 EOF 111 test_cmp expected actual 112' 113 114test_expect_success 'submodule moved then removed' ' 115 smhead3=$(add_file sm4 foo6 foo7) && 116 commit_file sm4 && 117 rm -rf sm4 && 118 git diff-tree -p --no-commit-id --submodule=log HEAD >actual && 119 cat >expected <<-EOF && 120 Submodule sm4 $smhead2..$smhead3: 121 > Add foo7 ($added foo7) 122 > Add foo6 ($added foo6) 123 EOF 124 test_cmp expected actual 125' 126 127test_done 128