Welcome to mirror list, hosted at ThFree Co, Russian Federation.

t6019-rev-list-ancestry-path.sh « t - git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5bd787a3c0ae8de3cba9b5dfa391085892497c67 (plain)
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
#!/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
#
#  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 "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