t / t3410-rebase-preserve-dropped-merges.shon commit Add generic 'strbuf_readlink()' helper function (b11b7e1)
   1#!/bin/sh
   2#
   3# Copyright (c) 2008 Stephen Haberman
   4#
   5
   6test_description='git rebase preserve merges
   7
   8This test runs git rebase with preserve merges and ensures commits
   9dropped by the --cherry-pick flag have their childrens parents
  10rewritten.
  11'
  12. ./test-lib.sh
  13
  14# set up two branches like this:
  15#
  16# A - B - C - D - E
  17#   \
  18#     F - G - H
  19#       \
  20#         I
  21#
  22# where B, D and G touch the same file.
  23
  24test_expect_success 'setup' '
  25        : > file1 &&
  26        git add file1 &&
  27        test_tick &&
  28        git commit -m A &&
  29        git tag A &&
  30        echo 1 > file1 &&
  31        test_tick &&
  32        git commit -m B file1 &&
  33        : > file2 &&
  34        git add file2 &&
  35        test_tick &&
  36        git commit -m C &&
  37        echo 2 > file1 &&
  38        test_tick &&
  39        git commit -m D file1 &&
  40        : > file3 &&
  41        git add file3 &&
  42        test_tick &&
  43        git commit -m E &&
  44        git tag E &&
  45        git checkout -b branch1 A &&
  46        : > file4 &&
  47        git add file4 &&
  48        test_tick &&
  49        git commit -m F &&
  50        git tag F &&
  51        echo 3 > file1 &&
  52        test_tick &&
  53        git commit -m G file1 &&
  54        git tag G &&
  55        : > file5 &&
  56        git add file5 &&
  57        test_tick &&
  58        git commit -m H &&
  59        git tag H &&
  60        git checkout -b branch2 F &&
  61        : > file6 &&
  62        git add file6 &&
  63        test_tick &&
  64        git commit -m I &&
  65        git tag I
  66'
  67
  68# A - B - C - D - E
  69#   \             \ \
  70#     F - G - H -- L \        -->   L
  71#       \            |               \
  72#         I -- G2 -- J -- K           I -- K
  73# G2 = same changes as G
  74test_expect_success 'skip same-resolution merges with -p' '
  75        git checkout branch1 &&
  76        ! git merge E &&
  77        echo 23 > file1 &&
  78        git add file1 &&
  79        git commit -m L &&
  80        git checkout branch2 &&
  81        echo 3 > file1 &&
  82        git commit -a -m G2 &&
  83        ! git merge E &&
  84        echo 23 > file1 &&
  85        git add file1 &&
  86        git commit -m J &&
  87        echo file7 > file7 &&
  88        git add file7 &&
  89        git commit -m K &&
  90        GIT_EDITOR=: git rebase -i -p branch1 &&
  91        test $(git rev-parse branch2^^) = $(git rev-parse branch1) &&
  92        test "23" = "$(cat file1)" &&
  93        test "" = "$(cat file6)" &&
  94        test "file7" = "$(cat file7)" &&
  95
  96        git checkout branch1 &&
  97        git reset --hard H &&
  98        git checkout branch2 &&
  99        git reset --hard I
 100'
 101
 102# A - B - C - D - E
 103#   \             \ \
 104#     F - G - H -- L \        -->   L
 105#       \            |               \
 106#         I -- G2 -- J -- K           I -- G2 -- K
 107# G2 = different changes as G
 108test_expect_success 'keep different-resolution merges with -p' '
 109        git checkout branch1 &&
 110        ! git merge E &&
 111        echo 23 > file1 &&
 112        git add file1 &&
 113        git commit -m L &&
 114        git checkout branch2 &&
 115        echo 4 > file1 &&
 116        git commit -a -m G2 &&
 117        ! git merge E &&
 118        echo 24 > file1 &&
 119        git add file1 &&
 120        git commit -m J &&
 121        echo file7 > file7 &&
 122        git add file7 &&
 123        git commit -m K &&
 124        ! GIT_EDITOR=: git rebase -i -p branch1 &&
 125        echo 234 > file1 &&
 126        git add file1 &&
 127        GIT_EDITOR=: git rebase --continue &&
 128        test $(git rev-parse branch2^^^) = $(git rev-parse branch1) &&
 129        test "234" = "$(cat file1)" &&
 130        test "" = "$(cat file6)" &&
 131        test "file7" = "$(cat file7)" &&
 132
 133        git checkout branch1 &&
 134        git reset --hard H &&
 135        git checkout branch2 &&
 136        git reset --hard I
 137'
 138
 139test_done