71e2a66f3baa9c5db6b72ab38e66637c8bae1c1e
   1#!/bin/sh
   2# Copyright (c) 2010, Jens Lehmann
   3
   4test_description='Recursive "git fetch" for submodules'
   5
   6. ./test-lib.sh
   7
   8pwd=$(pwd)
   9
  10add_upstream_commit() {
  11        (
  12                cd submodule &&
  13                head1=$(git rev-parse --short HEAD) &&
  14                echo new >> subfile &&
  15                test_tick &&
  16                git add subfile &&
  17                git commit -m new subfile &&
  18                head2=$(git rev-parse --short HEAD) &&
  19                echo "From $pwd/submodule" > ../expect.err &&
  20                echo "   $head1..$head2  master     -> origin/master" >> ../expect.err
  21        ) &&
  22        (
  23                cd deepsubmodule &&
  24                head1=$(git rev-parse --short HEAD) &&
  25                echo new >> deepsubfile &&
  26                test_tick &&
  27                git add deepsubfile &&
  28                git commit -m new deepsubfile &&
  29                head2=$(git rev-parse --short HEAD) &&
  30                echo "From $pwd/deepsubmodule" >> ../expect.err &&
  31                echo "   $head1..$head2  master     -> origin/master" >> ../expect.err
  32        )
  33}
  34
  35test_expect_success setup '
  36        mkdir deepsubmodule &&
  37        (
  38                cd deepsubmodule &&
  39                git init &&
  40                echo deepsubcontent > deepsubfile &&
  41                git add deepsubfile &&
  42                git commit -m new deepsubfile
  43        ) &&
  44        mkdir submodule &&
  45        (
  46                cd submodule &&
  47                git init &&
  48                echo subcontent > subfile &&
  49                git add subfile &&
  50                git submodule add "$pwd/deepsubmodule" deepsubmodule &&
  51                git commit -a -m new
  52        ) &&
  53        git submodule add "$pwd/submodule" submodule &&
  54        git commit -am initial &&
  55        git clone . downstream &&
  56        (
  57                cd downstream &&
  58                git submodule update --init --recursive
  59        ) &&
  60        echo "Fetching submodule submodule" > expect.out &&
  61        echo "Fetching submodule submodule/deepsubmodule" >> expect.out
  62'
  63
  64test_expect_success "fetch --recurse-submodules recurses into submodules" '
  65        add_upstream_commit &&
  66        (
  67                cd downstream &&
  68                git fetch --recurse-submodules >../actual.out 2>../actual.err
  69        ) &&
  70        test_cmp expect.out actual.out &&
  71        test_cmp expect.err actual.err
  72'
  73
  74test_expect_success "fetch alone only fetches superproject" '
  75        add_upstream_commit &&
  76        (
  77                cd downstream &&
  78                git fetch >../actual.out 2>../actual.err
  79        ) &&
  80        ! test -s actual.out &&
  81        ! test -s actual.err
  82'
  83
  84test_expect_success "--quiet propagates to submodules" '
  85        (
  86                cd downstream &&
  87                git fetch --recurse-submodules --quiet >../actual.out 2>../actual.err
  88        ) &&
  89        ! test -s actual.out &&
  90        ! test -s actual.err
  91'
  92
  93test_expect_success "--dry-run propagates to submodules" '
  94        add_upstream_commit &&
  95        (
  96                cd downstream &&
  97                git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
  98        ) &&
  99        test_cmp expect.out actual.out &&
 100        test_cmp expect.err actual.err &&
 101        (
 102                cd downstream &&
 103                git fetch --recurse-submodules >../actual.out 2>../actual.err
 104        ) &&
 105        test_cmp expect.out actual.out &&
 106        test_cmp expect.err actual.err
 107'
 108
 109test_expect_success "recurseSubmodules=true propagates into submodules" '
 110        add_upstream_commit &&
 111        (
 112                cd downstream &&
 113                git config fetch.recurseSubmodules true
 114                git fetch >../actual.out 2>../actual.err
 115        ) &&
 116        test_cmp expect.out actual.out &&
 117        test_cmp expect.err actual.err
 118'
 119
 120test_expect_success "--recurse-submodules overrides config in submodule" '
 121        add_upstream_commit &&
 122        (
 123                cd downstream &&
 124                (
 125                        cd submodule &&
 126                        git config fetch.recurseSubmodules false
 127                ) &&
 128                git fetch --recurse-submodules >../actual.out 2>../actual.err
 129        ) &&
 130        test_cmp expect.out actual.out &&
 131        test_cmp expect.err actual.err
 132'
 133
 134test_expect_success "--no-recurse-submodules overrides config setting" '
 135        add_upstream_commit &&
 136        (
 137                cd downstream &&
 138                git config fetch.recurseSubmodules true
 139                git fetch --no-recurse-submodules >../actual.out 2>../actual.err
 140        ) &&
 141        ! test -s actual.out &&
 142        ! test -s actual.err
 143'
 144
 145test_done