summaryrefslogtreecommitdiffstats
path: root/t/t6017-rev-list-stdin.sh
blob: 4821b90e7479ad8f4878ab4432ce0e9d2ce47de5 (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/sh
#
# Copyright (c) 2009, Junio C Hamano
#

test_description='log family learns --stdin'

GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME

. ./test-lib.sh

check () {
	for cmd in rev-list "log --stat"
	do
		for i in "$@"
		do
			printf "%s\n" $i
		done >input &&
		test_expect_success "check $cmd $*" '
			git $cmd $(cat input) >expect &&
			git $cmd --stdin <input >actual &&
			sed -e "s/^/input /" input &&
			sed -e "s/^/output /" expect &&
			test_cmp expect actual
		'
	done
}

them='1 2 3 4 5 6 7'

test_expect_success setup '
	(
		for i in 0 $them
		do
			for j in $them
			do
				echo $i.$j >file-$j &&
				git add file-$j || exit
			done &&
			test_tick &&
			git commit -m $i || exit
		done &&
		for i in $them
		do
			git checkout -b side-$i main~$i &&
			echo updated $i >file-$i &&
			git add file-$i &&
			test_tick &&
			git commit -m side-$i || exit
		done &&

		git update-ref refs/heads/-dashed-branch HEAD
	)
'

check main
check side-1 ^side-4
check side-1 ^side-7 --
check side-1 ^side-7 -- file-1
check side-1 ^side-7 -- file-2
check side-3 ^side-4 -- file-3
check side-3 ^side-2
check side-3 ^side-2 -- file-1
check --all
check --all --not --branches
check --glob=refs/heads
check --glob=refs/heads --
check --glob=refs/heads -- file-1
check --end-of-options -dashed-branch
check --all --not refs/heads/main

test_expect_success 'not only --stdin' '
	cat >expect <<-EOF &&
	7

	file-1
	file-2
	EOF
	cat >input <<-EOF &&
	^main^
	--
	file-2
	EOF
	git log --pretty=tformat:%s --name-only --stdin main -- file-1 \
		<input >actual &&
	test_cmp expect actual
'

test_expect_success 'pseudo-opt with missing value' '
	cat >input <<-EOF &&
	--glob
	refs/heads
	EOF

	cat >expect <<-EOF &&
	fatal: Option ${SQ}--glob${SQ} requires a value
	EOF

	test_must_fail git rev-list --stdin <input 2>error &&
	test_cmp expect error
'

test_expect_success 'pseudo-opt with invalid value' '
	cat >input <<-EOF &&
	--no-walk=garbage
	EOF

	cat >expect <<-EOF &&
	error: invalid argument to --no-walk
	fatal: invalid option ${SQ}--no-walk=garbage${SQ} in --stdin mode
	EOF

	test_must_fail git rev-list --stdin <input 2>error &&
	test_cmp expect error
'

test_expect_success 'unknown option without --end-of-options' '
	cat >input <<-EOF &&
	-dashed-branch
	EOF

	cat >expect <<-EOF &&
	fatal: invalid option ${SQ}-dashed-branch${SQ} in --stdin mode
	EOF

	test_must_fail git rev-list --stdin <input 2>error &&
	test_cmp expect error
'

test_expect_success '--not on command line does not influence revisions read via --stdin' '
	cat >input <<-EOF &&
	refs/heads/main
	EOF
	git rev-list refs/heads/main >expect &&

	git rev-list refs/heads/main --not --stdin <input >actual &&
	test_cmp expect actual
'

test_expect_success '--not via stdin does not influence revisions from command line' '
	cat >input <<-EOF &&
	--not
	EOF
	git rev-list refs/heads/main >expect &&

	git rev-list refs/heads/main --stdin refs/heads/main <input >actual &&
	test_cmp expect actual
'

test_done