t / t9106-git-svn-commit-diff-clobber.shon commit Teach 'git checkout' to preload the index contents (53996fe)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006 Eric Wong
   4test_description='git svn commit-diff clobber'
   5. ./lib-git-svn.sh
   6
   7test_expect_success 'initialize repo' '
   8        mkdir import &&
   9        cd import &&
  10        echo initial > file &&
  11        svn import -m "initial" . "$svnrepo" &&
  12        cd .. &&
  13        echo initial > file &&
  14        git update-index --add file &&
  15        git commit -a -m "initial"
  16        '
  17test_expect_success 'commit change from svn side' '
  18        svn co "$svnrepo" t.svn &&
  19        cd t.svn &&
  20        echo second line from svn >> file &&
  21        poke file &&
  22        svn commit -m "second line from svn" &&
  23        cd .. &&
  24        rm -rf t.svn
  25        '
  26
  27test_expect_success 'commit conflicting change from git' '
  28        echo second line from git >> file &&
  29        git commit -a -m "second line from git" &&
  30        test_must_fail git svn commit-diff -r1 HEAD~1 HEAD "$svnrepo"
  31'
  32
  33test_expect_success 'commit complementing change from git' '
  34        git reset --hard HEAD~1 &&
  35        echo second line from svn >> file &&
  36        git commit -a -m "second line from svn" &&
  37        echo third line from git >> file &&
  38        git commit -a -m "third line from git" &&
  39        git svn commit-diff -r2 HEAD~1 HEAD "$svnrepo"
  40        '
  41
  42test_expect_success 'dcommit fails to commit because of conflict' '
  43        git svn init "$svnrepo" &&
  44        git svn fetch &&
  45        git reset --hard refs/${remotes_git_svn} &&
  46        svn co "$svnrepo" t.svn &&
  47        cd t.svn &&
  48        echo fourth line from svn >> file &&
  49        poke file &&
  50        svn commit -m "fourth line from svn" &&
  51        cd .. &&
  52        rm -rf t.svn &&
  53        echo "fourth line from git" >> file &&
  54        git commit -a -m "fourth line from git" &&
  55        test_must_fail git svn dcommit
  56        '
  57
  58test_expect_success 'dcommit does the svn equivalent of an index merge' "
  59        git reset --hard refs/${remotes_git_svn} &&
  60        echo 'index merge' > file2 &&
  61        git update-index --add file2 &&
  62        git commit -a -m 'index merge' &&
  63        echo 'more changes' >> file2 &&
  64        git update-index file2 &&
  65        git commit -a -m 'more changes' &&
  66        git svn dcommit
  67        "
  68
  69test_expect_success 'commit another change from svn side' '
  70        svn co "$svnrepo" t.svn &&
  71        cd t.svn &&
  72                echo third line from svn >> file &&
  73                poke file &&
  74                svn commit -m "third line from svn" &&
  75        cd .. &&
  76        rm -rf t.svn
  77        '
  78
  79test_expect_success 'multiple dcommit from git svn will not clobber svn' "
  80        git reset --hard refs/${remotes_git_svn} &&
  81        echo new file >> new-file &&
  82        git update-index --add new-file &&
  83        git commit -a -m 'new file' &&
  84        echo clobber > file &&
  85        git commit -a -m 'clobber' &&
  86        test_must_fail git svn dcommit
  87        "
  88
  89
  90test_expect_success 'check that rebase really failed' '
  91        test -d .git/rebase-apply
  92'
  93
  94test_expect_success 'resolve, continue the rebase and dcommit' "
  95        echo clobber and I really mean it > file &&
  96        git update-index file &&
  97        git rebase --continue &&
  98        git svn dcommit
  99        "
 100
 101test_done