t / t6024-recursive-merge.shon commit Merge branch 'maint' of git://linux-nfs.org/~bfields/git into maint (f3caeb9)
   1#!/bin/sh
   2
   3test_description='Test merge without common ancestors'
   4. ./test-lib.sh
   5
   6# This scenario is based on a real-world repository of Shawn Pearce.
   7
   8# 1 - A - D - F
   9#   \   X   /
  10#     B   X
  11#       X   \
  12# 2 - C - E - G
  13
  14GIT_COMMITTER_DATE="2006-12-12 23:28:00 +0100"
  15export GIT_COMMITTER_DATE
  16
  17test_expect_success "setup tests" '
  18echo 1 > a1 &&
  19git add a1 &&
  20GIT_AUTHOR_DATE="2006-12-12 23:00:00" git commit -m 1 a1 &&
  21
  22git checkout -b A master &&
  23echo A > a1 &&
  24GIT_AUTHOR_DATE="2006-12-12 23:00:01" git commit -m A a1 &&
  25
  26git checkout -b B master &&
  27echo B > a1 &&
  28GIT_AUTHOR_DATE="2006-12-12 23:00:02" git commit -m B a1 &&
  29
  30git checkout -b D A &&
  31git rev-parse B > .git/MERGE_HEAD &&
  32echo D > a1 &&
  33git update-index a1 &&
  34GIT_AUTHOR_DATE="2006-12-12 23:00:03" git commit -m D &&
  35
  36git symbolic-ref HEAD refs/heads/other &&
  37echo 2 > a1 &&
  38GIT_AUTHOR_DATE="2006-12-12 23:00:04" git commit -m 2 a1 &&
  39
  40git checkout -b C &&
  41echo C > a1 &&
  42GIT_AUTHOR_DATE="2006-12-12 23:00:05" git commit -m C a1 &&
  43
  44git checkout -b E C &&
  45git rev-parse B > .git/MERGE_HEAD &&
  46echo E > a1 &&
  47git update-index a1 &&
  48GIT_AUTHOR_DATE="2006-12-12 23:00:06" git commit -m E &&
  49
  50git checkout -b G E &&
  51git rev-parse A > .git/MERGE_HEAD &&
  52echo G > a1 &&
  53git update-index a1 &&
  54GIT_AUTHOR_DATE="2006-12-12 23:00:07" git commit -m G &&
  55
  56git checkout -b F D &&
  57git rev-parse C > .git/MERGE_HEAD &&
  58echo F > a1 &&
  59git update-index a1 &&
  60GIT_AUTHOR_DATE="2006-12-12 23:00:08" git commit -m F
  61'
  62
  63test_expect_failure "combined merge conflicts" "git merge -m final G"
  64
  65cat > expect << EOF
  66<<<<<<< HEAD:a1
  67F
  68=======
  69G
  70>>>>>>> G:a1
  71EOF
  72
  73test_expect_success "result contains a conflict" "git diff expect a1"
  74
  75git ls-files --stage > out
  76cat > expect << EOF
  77100644 da056ce14a2241509897fa68bb2b3b6e6194ef9e 1       a1
  78100644 cf84443e49e1b366fac938711ddf4be2d4d1d9e9 2       a1
  79100644 fd7923529855d0b274795ae3349c5e0438333979 3       a1
  80EOF
  81
  82test_expect_success "virtual trees were processed" "git diff expect out"
  83
  84git reset --hard
  85test_expect_success 'refuse to merge binary files' '
  86        printf "\0" > binary-file &&
  87        git add binary-file &&
  88        git commit -m binary &&
  89        git checkout G &&
  90        printf "\0\0" > binary-file &&
  91        git add binary-file &&
  92        git commit -m binary2 &&
  93        ! git merge F > merge.out 2> merge.err &&
  94        grep "Cannot merge binary files: HEAD:binary-file vs. F:binary-file" \
  95                merge.err
  96'
  97
  98test_done