summaryrefslogtreecommitdiff
path: root/t/t9818-git-p4-block.sh
blob: de591d875c2bbc94fd1c9b093867d23f3ce1b00c (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
#!/bin/sh

test_description='git p4 fetching changes in multiple blocks'

. ./lib-git-p4.sh

test_expect_success 'start p4d' '
	start_p4d
'

create_restricted_group() {
	p4 group -i <<-EOF
	Group: restricted
	MaxResults: 7
	MaxScanRows: 40
	Users: author
	EOF
}

test_expect_success 'Create group with limited maxrows' '
	create_restricted_group
'

test_expect_success 'Create a repo with many changes' '
	(
		client_view "//depot/included/... //client/included/..." \
			    "//depot/excluded/... //client/excluded/..." &&
		mkdir -p "$cli/included" "$cli/excluded" &&
		cd "$cli/included" &&
		>file.txt &&
		p4 add file.txt &&
		p4 submit -d "Add file.txt" &&
		for i in $(test_seq 0 5)
		do
			>outer$i.txt &&
			p4 add outer$i.txt &&
			p4 submit -d "Adding outer$i.txt" &&
			for j in $(test_seq 0 5)
			do
				p4 edit file.txt &&
				echo $i$j >file.txt &&
				p4 submit -d "Commit $i$j" || exit
			done || exit
		done
	)
'

test_expect_success 'Default user cannot fetch changes' '
	! p4 changes -m 1 //depot/...
'

test_expect_success 'Clone the repo' '
	git p4 clone --dest="$git" --changes-block-size=7 --verbose //depot/included@all
'

test_expect_success 'All files are present' '
	echo file.txt >expected &&
	test_write_lines outer0.txt outer1.txt outer2.txt outer3.txt outer4.txt >>expected &&
	test_write_lines outer5.txt >>expected &&
	ls "$git" >current &&
	test_cmp expected current
'

test_expect_success 'file.txt is correct' '
	echo 55 >expected &&
	test_cmp expected "$git/file.txt"
'

test_expect_success 'Correct number of commits' '
	(cd "$git" && git log --oneline) >log &&
	wc -l log &&
	test_line_count = 43 log
'

test_expect_success 'Previous version of file.txt is correct' '
	(cd "$git" && git checkout HEAD^^) &&
	echo 53 >expected &&
	test_cmp expected "$git/file.txt"
'

# Test git-p4 sync, with some files outside the client specification.

p4_add_file() {
	(cd "$cli" &&
		>$1 &&
		p4 add $1 &&
		p4 submit -d "Added file $1" $1
	)
}

test_expect_success 'Add some more files' '
	for i in $(test_seq 0 10)
	do
		p4_add_file "included/x$i" &&
		p4_add_file "excluded/x$i" || return 1
	done &&
	for i in $(test_seq 0 10)
	do
		p4_add_file "excluded/y$i" || return 1
	done
'

# This should pick up the 10 new files in "included", but not be confused
# by the additional files in "excluded"
test_expect_success 'Syncing files' '
	(
		cd "$git" &&
		git p4 sync --changes-block-size=7 &&
		git checkout p4/master &&
		ls -l x* > log &&
		test_line_count = 11 log
	)
'

# Handling of multiple depot paths:
#    git p4 clone //depot/pathA //depot/pathB
#
test_expect_success 'Create a repo with multiple depot paths' '
	client_view "//depot/pathA/... //client/pathA/..." \
		    "//depot/pathB/... //client/pathB/..." &&
	mkdir -p "$cli/pathA" "$cli/pathB" &&
	for p in pathA pathB
	do
		for i in $(test_seq 1 10)
		do
			p4_add_file "$p/file$p$i" || return 1
		done
	done
'

test_expect_success 'Clone repo with multiple depot paths' '
	test_when_finished cleanup_git &&
	(
		cd "$git" &&
		git p4 clone --changes-block-size=4 //depot/pathA@all //depot/pathB@all \
			--destination=dest &&
		ls -1 dest >log &&
		test_line_count = 20 log
	)
'

test_expect_success 'Clone repo with self-sizing block size' '
	test_when_finished cleanup_git &&
	git p4 clone --changes-block-size=1000000 //depot@all --destination="$git" &&
	git -C "$git" log --oneline >log &&
	test_line_count \> 10 log
'

test_done