t / t4104-apply-boundary.shon commit intersect_paths: respect mode in git's tree-sort (e09867f)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5
   6test_description='git apply boundary tests
   7
   8'
   9. ./test-lib.sh
  10
  11L="c d e f g h i j k l m n o p q r s t u v w x"
  12
  13test_expect_success setup '
  14        for i in b '"$L"' y
  15        do
  16                echo $i
  17        done >victim &&
  18        cat victim >original &&
  19        git update-index --add victim &&
  20
  21        : add to the head
  22        for i in a b '"$L"' y
  23        do
  24                echo $i
  25        done >victim &&
  26        cat victim >add-a-expect &&
  27        git diff victim >add-a-patch.with &&
  28        git diff --unified=0 >add-a-patch.without &&
  29
  30        : insert at line two
  31        for i in b a '"$L"' y
  32        do
  33                echo $i
  34        done >victim &&
  35        cat victim >insert-a-expect &&
  36        git diff victim >insert-a-patch.with &&
  37        git diff --unified=0 >insert-a-patch.without &&
  38
  39        : modify at the head
  40        for i in a '"$L"' y
  41        do
  42                echo $i
  43        done >victim &&
  44        cat victim >mod-a-expect &&
  45        git diff victim >mod-a-patch.with &&
  46        git diff --unified=0 >mod-a-patch.without &&
  47
  48        : remove from the head
  49        for i in '"$L"' y
  50        do
  51                echo $i
  52        done >victim &&
  53        cat victim >del-a-expect &&
  54        git diff victim >del-a-patch.with
  55        git diff --unified=0 >del-a-patch.without &&
  56
  57        : add to the tail
  58        for i in b '"$L"' y z
  59        do
  60                echo $i
  61        done >victim &&
  62        cat victim >add-z-expect &&
  63        git diff victim >add-z-patch.with &&
  64        git diff --unified=0 >add-z-patch.without &&
  65
  66        : modify at the tail
  67        for i in b '"$L"' z
  68        do
  69                echo $i
  70        done >victim &&
  71        cat victim >mod-z-expect &&
  72        git diff victim >mod-z-patch.with &&
  73        git diff --unified=0 >mod-z-patch.without &&
  74
  75        : remove from the tail
  76        for i in b '"$L"'
  77        do
  78                echo $i
  79        done >victim &&
  80        cat victim >del-z-expect &&
  81        git diff victim >del-z-patch.with
  82        git diff --unified=0 >del-z-patch.without &&
  83
  84        : done
  85'
  86
  87for with in with without
  88do
  89        case "$with" in
  90        with) u= ;;
  91        without) u='--unidiff-zero ' ;;
  92        esac
  93        for kind in add-a add-z insert-a mod-a mod-z del-a del-z
  94        do
  95                test_expect_success "apply $kind-patch $with context" '
  96                        cat original >victim &&
  97                        git update-index victim &&
  98                        git apply --index '"$u$kind-patch.$with"' || {
  99                                cat '"$kind-patch.$with"'
 100                                (exit 1)
 101                        } &&
 102                        test_cmp '"$kind"'-expect victim
 103                '
 104        done
 105done
 106
 107for kind in add-a add-z insert-a mod-a mod-z del-a del-z
 108do
 109        rm -f $kind-ng.without
 110        sed     -e "s/^diff --git /diff /" \
 111                -e '/^index /d' \
 112                <$kind-patch.without >$kind-ng.without
 113        test_expect_success "apply non-git $kind-patch without context" '
 114                cat original >victim &&
 115                git update-index victim &&
 116                git apply --unidiff-zero --index '"$kind-ng.without"' || {
 117                        cat '"$kind-ng.without"'
 118                        (exit 1)
 119                } &&
 120                test_cmp '"$kind"'-expect victim
 121        '
 122done
 123
 124test_expect_success 'two lines' '
 125
 126        >file &&
 127        git add file &&
 128        echo aaa >file &&
 129        git diff >patch &&
 130        git add file &&
 131        echo bbb >file &&
 132        git add file &&
 133        test_must_fail git apply --check patch
 134
 135'
 136
 137test_expect_success 'apply patch with 3 context lines matching at end' '
 138        { echo a; echo b; echo c; echo d; } >file &&
 139        git add file &&
 140        echo e >>file &&
 141        git diff >patch &&
 142        >file &&
 143        test_must_fail git apply patch
 144'
 145
 146test_done