t / t5517-push-mirror.shon commit list-objects.c: don't add an unparsed NULL as a pending tree (6e7d0ef)
   1#!/bin/sh
   2
   3test_description='pushing to a mirror repository'
   4
   5. ./test-lib.sh
   6
   7D=`pwd`
   8
   9invert () {
  10        if "$@"; then
  11                return 1
  12        else
  13                return 0
  14        fi
  15}
  16
  17mk_repo_pair () {
  18        rm -rf master mirror &&
  19        mkdir mirror &&
  20        (
  21                cd mirror &&
  22                git init
  23        ) &&
  24        mkdir master &&
  25        (
  26                cd master &&
  27                git init &&
  28                git remote add $1 up ../mirror
  29        )
  30}
  31
  32
  33# BRANCH tests
  34test_expect_success 'push mirror creates new branches' '
  35
  36        mk_repo_pair &&
  37        (
  38                cd master &&
  39                echo one >foo && git add foo && git commit -m one &&
  40                git push --mirror up
  41        ) &&
  42        master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
  43        mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
  44        test "$master_master" = "$mirror_master"
  45
  46'
  47
  48test_expect_success 'push mirror updates existing branches' '
  49
  50        mk_repo_pair &&
  51        (
  52                cd master &&
  53                echo one >foo && git add foo && git commit -m one &&
  54                git push --mirror up &&
  55                echo two >foo && git add foo && git commit -m two &&
  56                git push --mirror up
  57        ) &&
  58        master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
  59        mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
  60        test "$master_master" = "$mirror_master"
  61
  62'
  63
  64test_expect_success 'push mirror force updates existing branches' '
  65
  66        mk_repo_pair &&
  67        (
  68                cd master &&
  69                echo one >foo && git add foo && git commit -m one &&
  70                git push --mirror up &&
  71                echo two >foo && git add foo && git commit -m two &&
  72                git push --mirror up &&
  73                git reset --hard HEAD^
  74                git push --mirror up
  75        ) &&
  76        master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
  77        mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
  78        test "$master_master" = "$mirror_master"
  79
  80'
  81
  82test_expect_success 'push mirror removes branches' '
  83
  84        mk_repo_pair &&
  85        (
  86                cd master &&
  87                echo one >foo && git add foo && git commit -m one &&
  88                git branch remove master &&
  89                git push --mirror up &&
  90                git branch -D remove
  91                git push --mirror up
  92        ) &&
  93        (
  94                cd mirror &&
  95                invert git show-ref -s --verify refs/heads/remove
  96        )
  97
  98'
  99
 100test_expect_success 'push mirror adds, updates and removes branches together' '
 101
 102        mk_repo_pair &&
 103        (
 104                cd master &&
 105                echo one >foo && git add foo && git commit -m one &&
 106                git branch remove master &&
 107                git push --mirror up &&
 108                git branch -D remove &&
 109                git branch add master &&
 110                echo two >foo && git add foo && git commit -m two &&
 111                git push --mirror up
 112        ) &&
 113        master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
 114        master_add=$(cd master && git show-ref -s --verify refs/heads/add) &&
 115        mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
 116        mirror_add=$(cd mirror && git show-ref -s --verify refs/heads/add) &&
 117        test "$master_master" = "$mirror_master" &&
 118        test "$master_add" = "$mirror_add" &&
 119        (
 120                cd mirror &&
 121                invert git show-ref -s --verify refs/heads/remove
 122        )
 123
 124'
 125
 126
 127# TAG tests
 128test_expect_success 'push mirror creates new tags' '
 129
 130        mk_repo_pair &&
 131        (
 132                cd master &&
 133                echo one >foo && git add foo && git commit -m one &&
 134                git tag -f tmaster master &&
 135                git push --mirror up
 136        ) &&
 137        master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
 138        mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
 139        test "$master_master" = "$mirror_master"
 140
 141'
 142
 143test_expect_success 'push mirror updates existing tags' '
 144
 145        mk_repo_pair &&
 146        (
 147                cd master &&
 148                echo one >foo && git add foo && git commit -m one &&
 149                git tag -f tmaster master &&
 150                git push --mirror up &&
 151                echo two >foo && git add foo && git commit -m two &&
 152                git tag -f tmaster master &&
 153                git push --mirror up
 154        ) &&
 155        master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
 156        mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
 157        test "$master_master" = "$mirror_master"
 158
 159'
 160
 161test_expect_success 'push mirror force updates existing tags' '
 162
 163        mk_repo_pair &&
 164        (
 165                cd master &&
 166                echo one >foo && git add foo && git commit -m one &&
 167                git tag -f tmaster master &&
 168                git push --mirror up &&
 169                echo two >foo && git add foo && git commit -m two &&
 170                git tag -f tmaster master &&
 171                git push --mirror up &&
 172                git reset --hard HEAD^
 173                git tag -f tmaster master &&
 174                git push --mirror up
 175        ) &&
 176        master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
 177        mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
 178        test "$master_master" = "$mirror_master"
 179
 180'
 181
 182test_expect_success 'push mirror removes tags' '
 183
 184        mk_repo_pair &&
 185        (
 186                cd master &&
 187                echo one >foo && git add foo && git commit -m one &&
 188                git tag -f tremove master &&
 189                git push --mirror up &&
 190                git tag -d tremove
 191                git push --mirror up
 192        ) &&
 193        (
 194                cd mirror &&
 195                invert git show-ref -s --verify refs/tags/tremove
 196        )
 197
 198'
 199
 200test_expect_success 'push mirror adds, updates and removes tags together' '
 201
 202        mk_repo_pair &&
 203        (
 204                cd master &&
 205                echo one >foo && git add foo && git commit -m one &&
 206                git tag -f tmaster master &&
 207                git tag -f tremove master &&
 208                git push --mirror up &&
 209                git tag -d tremove &&
 210                git tag tadd master &&
 211                echo two >foo && git add foo && git commit -m two &&
 212                git tag -f tmaster master &&
 213                git push --mirror up
 214        ) &&
 215        master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
 216        master_add=$(cd master && git show-ref -s --verify refs/tags/tadd) &&
 217        mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
 218        mirror_add=$(cd mirror && git show-ref -s --verify refs/tags/tadd) &&
 219        test "$master_master" = "$mirror_master" &&
 220        test "$master_add" = "$mirror_add" &&
 221        (
 222                cd mirror &&
 223                invert git show-ref -s --verify refs/tags/tremove
 224        )
 225
 226'
 227
 228test_expect_success 'remote.foo.mirror adds and removes branches' '
 229
 230        mk_repo_pair --mirror &&
 231        (
 232                cd master &&
 233                echo one >foo && git add foo && git commit -m one &&
 234                git branch keep master &&
 235                git branch remove master &&
 236                git push up &&
 237                git branch -D remove
 238                git push up
 239        ) &&
 240        (
 241                cd mirror &&
 242                git show-ref -s --verify refs/heads/keep &&
 243                invert git show-ref -s --verify refs/heads/remove
 244        )
 245
 246'
 247
 248test_expect_success 'remote.foo.mirror=no has no effect' '
 249
 250        mk_repo_pair &&
 251        (
 252                cd master &&
 253                echo one >foo && git add foo && git commit -m one &&
 254                git config --add remote.up.mirror no &&
 255                git branch keep master &&
 256                git push --mirror up &&
 257                git branch -D keep &&
 258                git push up
 259        ) &&
 260        (
 261                cd mirror &&
 262                git show-ref -s --verify refs/heads/keep
 263        )
 264
 265'
 266
 267test_done