t / t2023-checkout-m.shon commit Merge branch 'jh/checkout-auto-tracking' into maint (11fbc0b)
   1#!/bin/sh
   2
   3test_description='checkout -m -- <conflicted path>
   4
   5Ensures that checkout -m on a resolved file restores the conflicted file'
   6
   7. ./test-lib.sh
   8
   9test_expect_success setup '
  10        test_tick &&
  11        test_commit both.txt both.txt initial &&
  12        git branch topic &&
  13        test_commit modified_in_master both.txt in_master &&
  14        test_commit added_in_master each.txt in_master &&
  15        git checkout topic &&
  16        test_commit modified_in_topic both.txt in_topic &&
  17        test_commit added_in_topic each.txt in_topic
  18'
  19
  20test_expect_success 'git merge master' '
  21    test_must_fail git merge master
  22'
  23
  24clean_branchnames () {
  25        # Remove branch names after conflict lines
  26        sed 's/^\([<>]\{5,\}\) .*$/\1/'
  27}
  28
  29test_expect_success '-m restores 2-way conflicted+resolved file' '
  30        cp each.txt each.txt.conflicted &&
  31        echo resolved >each.txt &&
  32        git add each.txt &&
  33        git checkout -m -- each.txt &&
  34        clean_branchnames <each.txt >each.txt.cleaned &&
  35        clean_branchnames <each.txt.conflicted >each.txt.conflicted.cleaned &&
  36        test_cmp each.txt.conflicted.cleaned each.txt.cleaned
  37'
  38
  39test_expect_success '-m restores 3-way conflicted+resolved file' '
  40        cp both.txt both.txt.conflicted &&
  41        echo resolved >both.txt &&
  42        git add both.txt &&
  43        git checkout -m -- both.txt &&
  44        clean_branchnames <both.txt >both.txt.cleaned &&
  45        clean_branchnames <both.txt.conflicted >both.txt.conflicted.cleaned &&
  46        test_cmp both.txt.conflicted.cleaned both.txt.cleaned
  47'
  48
  49test_done