4ab73ec4e558df528f89f7263fb9c4c7e5fda025
   1#!/bin/sh
   2#
   3# Copyright (c) 2012 Felipe Contreras
   4#
   5
   6test_description='Test remote-bzr'
   7
   8. ./test-lib.sh
   9
  10if ! test_have_prereq PYTHON; then
  11        skip_all='skipping remote-bzr tests; python not available'
  12        test_done
  13fi
  14
  15if ! python -c 'import bzrlib'; then
  16        skip_all='skipping remote-bzr tests; bzr not available'
  17        test_done
  18fi
  19
  20check () {
  21        (
  22        cd $1 &&
  23        git log --format='%s' -1 &&
  24        git symbolic-ref HEAD
  25        ) > actual &&
  26        (
  27        echo $2 &&
  28        echo "refs/heads/$3"
  29        ) > expected &&
  30        test_cmp expected actual
  31}
  32
  33bzr whoami "A U Thor <author@example.com>"
  34
  35test_expect_success 'cloning' '
  36        (
  37        bzr init bzrrepo &&
  38        cd bzrrepo &&
  39        echo one > content &&
  40        bzr add content &&
  41        bzr commit -m one
  42        ) &&
  43
  44        git clone "bzr::$PWD/bzrrepo" gitrepo &&
  45        check gitrepo one master
  46'
  47
  48test_expect_success 'pulling' '
  49        (
  50        cd bzrrepo &&
  51        echo two > content &&
  52        bzr commit -m two
  53        ) &&
  54
  55        (cd gitrepo && git pull) &&
  56
  57        check gitrepo two master
  58'
  59
  60test_expect_success 'pushing' '
  61        (
  62        cd gitrepo &&
  63        echo three > content &&
  64        git commit -a -m three &&
  65        git push
  66        ) &&
  67
  68        echo three > expected &&
  69        cat bzrrepo/content > actual &&
  70        test_cmp expected actual
  71'
  72
  73test_expect_success 'roundtrip' '
  74        (
  75        cd gitrepo &&
  76        git pull &&
  77        git log --format="%s" -1 origin/master > actual
  78        ) &&
  79        echo three > expected &&
  80        test_cmp expected actual &&
  81
  82        (cd gitrepo && git push && git pull) &&
  83
  84        (
  85        cd bzrrepo &&
  86        echo four > content &&
  87        bzr commit -m four
  88        ) &&
  89
  90        (cd gitrepo && git pull && git push) &&
  91
  92        check gitrepo four master &&
  93
  94        (
  95        cd gitrepo &&
  96        echo five > content &&
  97        git commit -a -m five &&
  98        git push && git pull
  99        ) &&
 100
 101        (cd bzrrepo && bzr revert) &&
 102
 103        echo five > expected &&
 104        cat bzrrepo/content > actual &&
 105        test_cmp expected actual
 106'
 107
 108cat > expected <<EOF
 109100644 blob 54f9d6da5c91d556e6b54340b1327573073030af    content
 110100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb    executable
 111120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea    link
 112EOF
 113
 114test_expect_success 'special modes' '
 115        (
 116        cd bzrrepo &&
 117        echo exec > executable
 118        chmod +x executable &&
 119        bzr add executable
 120        bzr commit -m exec &&
 121        ln -s content link
 122        bzr add link
 123        bzr commit -m link &&
 124        mkdir dir &&
 125        bzr add dir &&
 126        bzr commit -m dir
 127        ) &&
 128
 129        (
 130        cd gitrepo &&
 131        git pull
 132        git ls-tree HEAD > ../actual
 133        ) &&
 134
 135        test_cmp expected actual &&
 136
 137        (
 138        cd gitrepo &&
 139        git cat-file -p HEAD:link > ../actual
 140        ) &&
 141
 142        printf content > expected &&
 143        test_cmp expected actual
 144'
 145
 146cat > expected <<EOF
 147100644 blob 54f9d6da5c91d556e6b54340b1327573073030af    content
 148100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb    executable
 149120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea    link
 150040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b    movedir-new
 151EOF
 152
 153test_expect_success 'moving directory' '
 154        (
 155        cd bzrrepo &&
 156        mkdir movedir &&
 157        echo one > movedir/one &&
 158        echo two > movedir/two &&
 159        bzr add movedir &&
 160        bzr commit -m movedir &&
 161        bzr mv movedir movedir-new &&
 162        bzr commit -m movedir-new
 163        ) &&
 164
 165        (
 166        cd gitrepo &&
 167        git pull &&
 168        git ls-tree HEAD > ../actual
 169        ) &&
 170
 171        test_cmp expected actual
 172'
 173
 174test_expect_success 'different authors' '
 175        (
 176        cd bzrrepo &&
 177        echo john >> content &&
 178        bzr commit -m john \
 179          --author "Jane Rey <jrey@example.com>" \
 180          --author "John Doe <jdoe@example.com>"
 181        ) &&
 182
 183        (
 184        cd gitrepo &&
 185        git pull &&
 186        git show --format="%an <%ae>, %cn <%ce>" --quiet > ../actual
 187        ) &&
 188
 189        echo "Jane Rey <jrey@example.com>, A U Thor <author@example.com>" > expected &&
 190        test_cmp expected actual
 191'
 192
 193test_expect_success 'fetch utf-8 filenames' '
 194        mkdir -p tmp && cd tmp &&
 195        test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
 196
 197        LC_ALL=en_US.UTF-8
 198        export LC_ALL
 199
 200        (
 201        bzr init bzrrepo &&
 202        cd bzrrepo &&
 203
 204        echo test >> "ærø" &&
 205        bzr add "ærø" &&
 206        echo test >> "ø~?" &&
 207        bzr add "ø~?" &&
 208        bzr commit -m add-utf-8 &&
 209        echo test >> "ærø" &&
 210        bzr commit -m test-utf-8 &&
 211        bzr rm "ø~?" &&
 212        bzr mv "ærø" "ø~?" &&
 213        bzr commit -m bzr-mv-utf-8
 214        ) &&
 215
 216        (
 217        git clone "bzr::$PWD/bzrrepo" gitrepo &&
 218        cd gitrepo &&
 219        git -c core.quotepath=false ls-files > ../actual
 220        ) &&
 221        echo "ø~?" > expected &&
 222        test_cmp expected actual
 223'
 224
 225test_expect_success 'push utf-8 filenames' '
 226        mkdir -p tmp && cd tmp &&
 227        test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
 228
 229        LC_ALL=en_US.UTF-8
 230        export LC_ALL
 231
 232        (
 233        bzr init bzrrepo &&
 234        cd bzrrepo &&
 235
 236        echo one >> content &&
 237        bzr add content &&
 238        bzr commit -m one
 239        ) &&
 240
 241        (
 242        git clone "bzr::$PWD/bzrrepo" gitrepo &&
 243        cd gitrepo &&
 244
 245        echo test >> "ærø" &&
 246        git add "ærø" &&
 247        git commit -m utf-8 &&
 248
 249        git push
 250        ) &&
 251
 252        (cd bzrrepo && bzr ls > ../actual) &&
 253        printf "content\nærø\n" > expected &&
 254        test_cmp expected actual
 255'
 256
 257test_expect_success 'pushing a merge' '
 258        mkdir -p tmp && cd tmp &&
 259        test_when_finished "cd .. && rm -rf tmp" &&
 260
 261        (
 262        bzr init bzrrepo &&
 263        cd bzrrepo &&
 264        echo one > content &&
 265        bzr add content &&
 266        bzr commit -m one
 267        ) &&
 268
 269        git clone "bzr::$PWD/bzrrepo" gitrepo &&
 270
 271        (
 272        cd bzrrepo &&
 273        echo two > content &&
 274        bzr commit -m two
 275        ) &&
 276
 277        (
 278        cd gitrepo &&
 279        echo three > content &&
 280        git commit -a -m three &&
 281        git fetch &&
 282        git merge origin/master || true &&
 283        echo three > content &&
 284        git commit -a --no-edit &&
 285        git push
 286        ) &&
 287
 288        echo three > expected &&
 289        cat bzrrepo/content > actual &&
 290        test_cmp expected actual
 291'
 292
 293cat > expected <<EOF
 294origin/HEAD
 295origin/branch
 296origin/trunk
 297EOF
 298
 299test_expect_success 'proper bzr repo' '
 300        mkdir -p tmp && cd tmp &&
 301        test_when_finished "cd .. && rm -rf tmp" &&
 302
 303        bzr init-repo bzrrepo &&
 304
 305        (
 306        bzr init bzrrepo/trunk &&
 307        cd bzrrepo/trunk &&
 308        echo one >> content &&
 309        bzr add content &&
 310        bzr commit -m one
 311        ) &&
 312
 313        (
 314        bzr branch bzrrepo/trunk bzrrepo/branch &&
 315        cd bzrrepo/branch &&
 316        echo two >> content &&
 317        bzr commit -m one
 318        ) &&
 319
 320        (
 321        git clone "bzr::$PWD/bzrrepo" gitrepo &&
 322        cd gitrepo &&
 323        git for-each-ref --format "%(refname:short)" refs/remotes/origin > ../actual
 324        ) &&
 325
 326        test_cmp ../expected actual
 327'
 328
 329test_expect_success 'strip' '
 330        # Do not imitate this style; always chdir inside a subshell instead
 331        mkdir -p tmp && cd tmp &&
 332        test_when_finished "cd .. && rm -rf tmp" &&
 333
 334        (
 335        bzr init bzrrepo &&
 336        cd bzrrepo &&
 337
 338        echo one >> content &&
 339        bzr add content &&
 340        bzr commit -m one &&
 341
 342        echo two >> content &&
 343        bzr commit -m two
 344        ) &&
 345
 346        git clone "bzr::$PWD/bzrrepo" gitrepo &&
 347
 348        (
 349        cd bzrrepo &&
 350        bzr uncommit --force &&
 351
 352        echo three >> content &&
 353        bzr commit -m three &&
 354
 355        echo four >> content &&
 356        bzr commit -m four &&
 357        bzr log --line | sed -e "s/^[0-9][0-9]*: //" > ../expected
 358        ) &&
 359
 360        (
 361        cd gitrepo &&
 362        git fetch &&
 363        git log --format="%an %ad %s" --date=short origin/master > ../actual
 364        ) &&
 365
 366        test_cmp expected actual
 367'
 368
 369test_done