1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#!/bin/sh
test_description='--ancestry-path'
# D---E-------F
# / \ \
# B---C---G---H---I---J
# / \
# A-------K---------------L--M
#
# D..M == E F G H I J K L M
# --ancestry-path D..M == E F H I J L M
# --ancestry-path=F D..M == E F J L M
# --ancestry-path=G D..M == G H I J L M
# --ancestry-path=H D..M == E G H I J L M
# --ancestry-path=K D..M == K L M
# --ancestry-path=K --ancestry-path=F D..M == E F J K L M
#
# D..M -- M.t == M
# --ancestry-path D..M -- M.t == M
#
# F...I == F G H I
# --ancestry-path F...I == F H I
#
# G..M -- G.t == [nothing - was dropped in "-s ours" merge L]
# --ancestry-path G..M -- G.t == L
# --ancestry-path --simplify-merges G^..M -- G.t == G L
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh
test_merge () {
test_tick &&
git merge -s ours -m "$2" "$1" &&
git tag "$2"
}
test_expect_success setup '
test_commit A &&
test_commit B &&
test_commit C &&
test_commit D &&
test_commit E &&
test_commit F &&
git reset --hard C &&
test_commit G &&
test_merge E H &&
test_commit I &&
test_merge F J &&
git reset --hard A &&
test_commit K &&
test_merge J L &&
test_commit M
'
test_ancestry () {
args=$1
expected=$2
test_expect_success "log $args" "
test_write_lines $expected >expect &&
git log --format=%s $args >raw &&
if test -n \"$expected\"
then
sort raw >actual &&
test_cmp expect actual
else
test_must_be_empty raw
fi
"
}
test_ancestry "D..M" "E F G H I J K L M"
test_ancestry "--ancestry-path D..M" "E F H I J L M"
test_ancestry "--ancestry-path=F D..M" "E F J L M"
test_ancestry "--ancestry-path=G D..M" "G H I J L M"
test_ancestry "--ancestry-path=H D..M" "E G H I J L M"
test_ancestry "--ancestry-path=K D..M" "K L M"
test_ancestry "--ancestry-path=F --ancestry-path=K D..M" "E F J K L M"
test_ancestry "D..M -- M.t" "M"
test_ancestry "--ancestry-path D..M -- M.t" "M"
test_ancestry "F...I" "F G H I"
test_ancestry "--ancestry-path F...I" "F H I"
test_ancestry "G..M -- G.t" ""
test_ancestry "--ancestry-path G..M -- G.t" "L"
test_ancestry "--ancestry-path --simplify-merges G^..M -- G.t" "G L"
# b---bc
# / \ /
# a X
# \ / \
# c---cb
#
# All refnames prefixed with 'x' to avoid confusion with the tags
# generated by test_commit on case-insensitive systems.
test_expect_success 'setup criss-cross' '
mkdir criss-cross &&
(cd criss-cross &&
git init &&
test_commit A &&
git checkout -b xb main &&
test_commit B &&
git checkout -b xc main &&
test_commit C &&
git checkout -b xbc xb -- &&
git merge xc &&
git checkout -b xcb xc -- &&
git merge xb &&
git checkout main)
'
# no commits in bc descend from cb
test_expect_success 'criss-cross: rev-list --ancestry-path cb..bc' '
(cd criss-cross &&
git rev-list --ancestry-path xcb..xbc > actual &&
test_must_be_empty actual)
'
# no commits in repository descend from cb
test_expect_success 'criss-cross: rev-list --ancestry-path --all ^cb' '
(cd criss-cross &&
git rev-list --ancestry-path --all ^xcb > actual &&
test_must_be_empty actual)
'
test_done
|