t / t3509-cherry-pick-merge-df.shon commit Merge branch 'sg/worktree-remove-errormsg' (d4b12b9)
   1#!/bin/sh
   2
   3test_description='Test cherry-pick with directory/file conflicts'
   4. ./test-lib.sh
   5
   6test_expect_success 'Initialize repository' '
   7        mkdir a &&
   8        >a/f &&
   9        git add a &&
  10        git commit -m a
  11'
  12
  13test_expect_success 'Setup rename across paths each below D/F conflicts' '
  14        mkdir b &&
  15        test_ln_s_add ../a b/a &&
  16        git commit -m b &&
  17
  18        git checkout -b branch &&
  19        rm b/a &&
  20        git mv a b/a &&
  21        test_ln_s_add b/a a &&
  22        git commit -m swap &&
  23
  24        >f1 &&
  25        git add f1 &&
  26        git commit -m f1
  27'
  28
  29test_expect_success 'Cherry-pick succeeds with rename across D/F conflicts' '
  30        git reset --hard &&
  31        git checkout master^0 &&
  32        git cherry-pick branch
  33'
  34
  35test_expect_success 'Setup rename with file on one side matching directory name on other' '
  36        git checkout --orphan nick-testcase &&
  37        git rm -rf . &&
  38
  39        >empty &&
  40        git add empty &&
  41        git commit -m "Empty file" &&
  42
  43        git checkout -b simple &&
  44        mv empty file &&
  45        mkdir empty &&
  46        mv file empty &&
  47        git add empty/file &&
  48        git commit -m "Empty file under empty dir" &&
  49
  50        echo content >newfile &&
  51        git add newfile &&
  52        git commit -m "New file"
  53'
  54
  55test_expect_success 'Cherry-pick succeeds with was_a_dir/file -> was_a_dir (resolve)' '
  56        git reset --hard &&
  57        git checkout -q nick-testcase^0 &&
  58        git cherry-pick --strategy=resolve simple
  59'
  60
  61test_expect_success 'Cherry-pick succeeds with was_a_dir/file -> was_a_dir (recursive)' '
  62        git reset --hard &&
  63        git checkout -q nick-testcase^0 &&
  64        git cherry-pick --strategy=recursive simple
  65'
  66
  67test_expect_success 'Setup rename with file on one side matching different dirname on other' '
  68        git reset --hard &&
  69        git checkout --orphan mergeme &&
  70        git rm -rf . &&
  71
  72        mkdir sub &&
  73        mkdir othersub &&
  74        echo content > sub/file &&
  75        echo foo > othersub/whatever &&
  76        git add -A &&
  77        git commit -m "Common commit" &&
  78
  79        git rm -rf othersub &&
  80        git mv sub/file othersub &&
  81        git commit -m "Commit to merge" &&
  82
  83        git checkout -b newhead mergeme~1 &&
  84        >independent-change &&
  85        git add independent-change &&
  86        git commit -m "Completely unrelated change"
  87'
  88
  89test_expect_success 'Cherry-pick with rename to different D/F conflict succeeds (resolve)' '
  90        git reset --hard &&
  91        git checkout -q newhead^0 &&
  92        git cherry-pick --strategy=resolve mergeme
  93'
  94
  95test_expect_success 'Cherry-pick with rename to different D/F conflict succeeds (recursive)' '
  96        git reset --hard &&
  97        git checkout -q newhead^0 &&
  98        git cherry-pick --strategy=recursive mergeme
  99'
 100
 101test_done