aboutsummaryrefslogtreecommitdiffstats
path: root/t/t6017-rev-list-stdin.sh
blob: a57f1ae2baa4a72e88183fcaa3b55802a80599ef (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
#!/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

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_done