t / t4041-diff-submodule.shon commit add tests for git diff --submodule (86140d5)
   1#!/bin/sh
   2#
   3# Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin
   4#
   5
   6test_description='Support for verbose submodule differences in git diff
   7
   8This test tries to verify the sanity of the --submodule option of git diff.
   9'
  10
  11. ./test-lib.sh
  12
  13add_file () {
  14        sm=$1
  15        shift
  16        owd=$(pwd)
  17        cd "$sm"
  18        for name; do
  19                echo "$name" > "$name" &&
  20                git add "$name" &&
  21                test_tick &&
  22                git commit -m "Add $name"
  23        done >/dev/null
  24        git rev-parse --verify HEAD | cut -c1-7
  25        cd "$owd"
  26}
  27commit_file () {
  28        test_tick &&
  29        git commit "$@" -m "Commit $*" >/dev/null
  30}
  31
  32test_create_repo sm1 &&
  33add_file . foo >/dev/null
  34
  35head1=$(add_file sm1 foo1 foo2)
  36
  37test_expect_success 'added submodule' "
  38        git add sm1 &&
  39        git diff-index -p --submodule=log HEAD >actual &&
  40        diff actual - <<-EOF
  41Submodule sm1 0000000...$head1 (new submodule)
  42EOF
  43"
  44
  45commit_file sm1 &&
  46head2=$(add_file sm1 foo3)
  47
  48test_expect_success 'modified submodule(forward)' "
  49        git diff-index -p --submodule=log HEAD >actual &&
  50        diff actual - <<-EOF
  51Submodule sm1 $head1..$head2:
  52  > Add foo3
  53EOF
  54"
  55
  56test_expect_success 'modified submodule(forward)' "
  57        git diff --submodule=log >actual &&
  58        diff actual - <<-EOF
  59Submodule sm1 $head1..$head2:
  60  > Add foo3
  61EOF
  62"
  63
  64test_expect_success 'modified submodule(forward) --submodule' "
  65        git diff --submodule >actual &&
  66        diff actual - <<-EOF
  67Submodule sm1 $head1..$head2:
  68  > Add foo3
  69EOF
  70"
  71
  72fullhead1=$(cd sm1; git rev-list --max-count=1 $head1)
  73fullhead2=$(cd sm1; git rev-list --max-count=1 $head2)
  74test_expect_success 'modified submodule(forward) --submodule=short' "
  75        git diff --submodule=short >actual &&
  76        diff actual - <<-EOF
  77diff --git a/sm1 b/sm1
  78index $head1..$head2 160000
  79--- a/sm1
  80+++ b/sm1
  81@@ -1 +1 @@
  82-Subproject commit $fullhead1
  83+Subproject commit $fullhead2
  84EOF
  85"
  86
  87commit_file sm1 &&
  88cd sm1 &&
  89git reset --hard HEAD~2 >/dev/null &&
  90head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
  91cd ..
  92
  93test_expect_success 'modified submodule(backward)' "
  94        git diff-index -p --submodule=log HEAD >actual &&
  95        diff actual - <<-EOF
  96Submodule sm1 $head2..$head3 (rewind):
  97  < Add foo3
  98  < Add foo2
  99EOF
 100"
 101
 102head4=$(add_file sm1 foo4 foo5) &&
 103head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD)
 104test_expect_success 'modified submodule(backward and forward)' "
 105        git diff-index -p --submodule=log HEAD >actual &&
 106        diff actual - <<-EOF
 107Submodule sm1 $head2...$head4:
 108  > Add foo5
 109  > Add foo4
 110  < Add foo3
 111  < Add foo2
 112EOF
 113"
 114
 115commit_file sm1 &&
 116mv sm1 sm1-bak &&
 117echo sm1 >sm1 &&
 118head5=$(git hash-object sm1 | cut -c1-7) &&
 119git add sm1 &&
 120rm -f sm1 &&
 121mv sm1-bak sm1
 122
 123test_expect_success 'typechanged submodule(submodule->blob), --cached' "
 124        git diff --submodule=log --cached >actual &&
 125        diff actual - <<-EOF
 126Submodule sm1 41fbea9...0000000 (submodule deleted)
 127diff --git a/sm1 b/sm1
 128new file mode 100644
 129index 0000000..9da5fb8
 130--- /dev/null
 131+++ b/sm1
 132@@ -0,0 +1 @@
 133+sm1
 134EOF
 135"
 136
 137test_expect_success 'typechanged submodule(submodule->blob)' "
 138        git diff --submodule=log >actual &&
 139        diff actual - <<-EOF
 140diff --git a/sm1 b/sm1
 141deleted file mode 100644
 142index 9da5fb8..0000000
 143--- a/sm1
 144+++ /dev/null
 145@@ -1 +0,0 @@
 146-sm1
 147Submodule sm1 0000000...$head4 (new submodule)
 148EOF
 149"
 150
 151rm -rf sm1 &&
 152git checkout-index sm1
 153test_expect_success 'typechanged submodule(submodule->blob)' "
 154        git diff-index -p --submodule=log HEAD >actual &&
 155        diff actual - <<-EOF
 156Submodule sm1 $head4...0000000 (submodule deleted)
 157diff --git a/sm1 b/sm1
 158new file mode 100644
 159index 0000000..$head5
 160--- /dev/null
 161+++ b/sm1
 162@@ -0,0 +1 @@
 163+sm1
 164EOF
 165"
 166
 167rm -f sm1 &&
 168test_create_repo sm1 &&
 169head6=$(add_file sm1 foo6 foo7)
 170fullhead6=$(cd sm1; git rev-list --max-count=1 $head6)
 171test_expect_success 'nonexistent commit' "
 172        git diff-index -p --submodule=log HEAD >actual &&
 173        diff actual - <<-EOF
 174Submodule sm1 $head4...$head6 (commits not present)
 175EOF
 176"
 177
 178commit_file
 179test_expect_success 'typechanged submodule(blob->submodule)' "
 180        git diff-index -p --submodule=log HEAD >actual &&
 181        diff actual - <<-EOF
 182diff --git a/sm1 b/sm1
 183deleted file mode 100644
 184index $head5..0000000
 185--- a/sm1
 186+++ /dev/null
 187@@ -1 +0,0 @@
 188-sm1
 189Submodule sm1 0000000...$head6 (new submodule)
 190EOF
 191"
 192
 193commit_file sm1 &&
 194rm -rf sm1
 195test_expect_success 'deleted submodule' "
 196        git diff-index -p --submodule=log HEAD >actual &&
 197        diff actual - <<-EOF
 198Submodule sm1 $head6...0000000 (submodule deleted)
 199EOF
 200"
 201
 202test_create_repo sm2 &&
 203head7=$(add_file sm2 foo8 foo9) &&
 204git add sm2
 205
 206test_expect_success 'multiple submodules' "
 207        git diff-index -p --submodule=log HEAD >actual &&
 208        diff actual - <<-EOF
 209Submodule sm1 $head6...0000000 (submodule deleted)
 210Submodule sm2 0000000...$head7 (new submodule)
 211EOF
 212"
 213
 214test_expect_success 'path filter' "
 215        git diff-index -p --submodule=log HEAD sm2 >actual &&
 216        diff actual - <<-EOF
 217Submodule sm2 0000000...$head7 (new submodule)
 218EOF
 219"
 220
 221commit_file sm2
 222test_expect_success 'given commit' "
 223        git diff-index -p --submodule=log HEAD^ >actual &&
 224        diff actual - <<-EOF
 225Submodule sm1 $head6...0000000 (submodule deleted)
 226Submodule sm2 0000000...$head7 (new submodule)
 227EOF
 228"
 229
 230test_expect_success 'given commit --submodule' "
 231        git diff-index -p --submodule HEAD^ >actual &&
 232        diff actual - <<-EOF
 233Submodule sm1 $head6...0000000 (submodule deleted)
 234Submodule sm2 0000000...$head7 (new submodule)
 235EOF
 236"
 237
 238fullhead7=$(cd sm2; git rev-list --max-count=1 $head7)
 239
 240test_expect_success 'given commit --submodule=short' "
 241        git diff-index -p --submodule=short HEAD^ >actual &&
 242        diff actual - <<-EOF
 243diff --git a/sm1 b/sm1
 244deleted file mode 160000
 245index $head6..0000000
 246--- a/sm1
 247+++ /dev/null
 248@@ -1 +0,0 @@
 249-Subproject commit $fullhead6
 250diff --git a/sm2 b/sm2
 251new file mode 160000
 252index 0000000..$head7
 253--- /dev/null
 254+++ b/sm2
 255@@ -0,0 +1 @@
 256+Subproject commit $fullhead7
 257EOF
 258"
 259
 260test_done