t / t4059-diff-submodule-not-initialized.shon commit upload-pack: support hidden refs with protocol v2 (e20b419)
   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