t / t7410-submodule-checkout-to.shon commit Merge branch 'sb/submodule-url-to-absolute' (3fc8522)
   1#!/bin/sh
   2
   3test_description='Combination of submodules and multiple workdirs'
   4
   5. ./test-lib.sh
   6
   7base_path=$(pwd -P)
   8
   9test_expect_success 'setup: make origin'  '
  10        mkdir -p origin/sub &&
  11        (
  12                cd origin/sub && git init &&
  13                echo file1 >file1 &&
  14                git add file1 &&
  15                git commit -m file1
  16        ) &&
  17        mkdir -p origin/main &&
  18        (
  19                cd origin/main && git init &&
  20                git submodule add ../sub &&
  21                git commit -m "add sub"
  22        ) &&
  23        (
  24                cd origin/sub &&
  25                echo file1updated >file1 &&
  26                git add file1 &&
  27                git commit -m "file1 updated"
  28        ) &&
  29        git -C origin/main/sub pull &&
  30        (
  31                cd origin/main &&
  32                git add sub &&
  33                git commit -m "sub updated"
  34        )
  35'
  36
  37test_expect_success 'setup: clone' '
  38        mkdir clone &&
  39        git -C clone clone --recursive "$base_path/origin/main"
  40'
  41
  42rev1_hash_main=$(git --git-dir=origin/main/.git show --pretty=format:%h -q "HEAD~1")
  43rev1_hash_sub=$(git --git-dir=origin/sub/.git show --pretty=format:%h -q "HEAD~1")
  44
  45test_expect_success 'checkout main' '
  46        mkdir default_checkout &&
  47        git -C clone/main worktree add "$base_path/default_checkout/main" "$rev1_hash_main"
  48'
  49
  50test_expect_failure 'can see submodule diffs just after checkout' '
  51        git -C default_checkout/main diff --submodule master"^!" >out &&
  52        grep "file1 updated" out
  53'
  54
  55test_expect_success 'checkout main and initialize independent clones' '
  56        mkdir fully_cloned_submodule &&
  57        git -C clone/main worktree add "$base_path/fully_cloned_submodule/main" "$rev1_hash_main" &&
  58        git -C fully_cloned_submodule/main submodule update
  59'
  60
  61test_expect_success 'can see submodule diffs after independent cloning' '
  62        git -C fully_cloned_submodule/main diff --submodule master"^!" >out &&
  63        grep "file1 updated" out
  64'
  65
  66test_expect_success 'checkout sub manually' '
  67        mkdir linked_submodule &&
  68        git -C clone/main worktree add "$base_path/linked_submodule/main" "$rev1_hash_main" &&
  69        git -C clone/main/sub worktree add "$base_path/linked_submodule/main/sub" "$rev1_hash_sub"
  70'
  71
  72test_expect_success 'can see submodule diffs after manual checkout of linked submodule' '
  73        git -C linked_submodule/main diff --submodule master"^!" >out &&
  74        grep "file1 updated" out
  75'
  76
  77test_done