1#!/bin/sh
2
3test_description='git p4 directory/file bug handling
4
5This test creates files and directories with the same name in perforce and
6checks that git-p4 recovers from the error at the same time as the perforce
7repository.'
8
9. ./lib-git-p4.sh
10
11test_expect_success 'start p4d' '
12	start_p4d &&
13	{ p4 configure set submit.collision.check=0 || :; }
14'
15
16test_expect_success 'init depot' '
17	(
18		cd "$cli" &&
19
20		touch add_file_add_dir_del_file add_file_add_dir_del_dir &&
21		p4 add add_file_add_dir_del_file add_file_add_dir_del_dir &&
22		mkdir add_dir_add_file_del_file add_dir_add_file_del_dir &&
23		touch add_dir_add_file_del_file/file add_dir_add_file_del_dir/file &&
24		p4 add add_dir_add_file_del_file/file add_dir_add_file_del_dir/file &&
25		p4 submit -d "add initial" &&
26
27		rm -f add_file_add_dir_del_file add_file_add_dir_del_dir &&
28		mkdir add_file_add_dir_del_file add_file_add_dir_del_dir &&
29		touch add_file_add_dir_del_file/file add_file_add_dir_del_dir/file &&
30		p4 add add_file_add_dir_del_file/file add_file_add_dir_del_dir/file &&
31		rm -rf add_dir_add_file_del_file add_dir_add_file_del_dir &&
32		touch add_dir_add_file_del_file add_dir_add_file_del_dir &&
33		p4 add add_dir_add_file_del_file add_dir_add_file_del_dir &&
34		p4 submit -d "add conflicting" &&
35
36		p4 delete -k add_file_add_dir_del_file &&
37		p4 delete -k add_file_add_dir_del_dir/file &&
38		p4 delete -k add_dir_add_file_del_file &&
39		p4 delete -k add_dir_add_file_del_dir/file &&
40		p4 submit -d "delete conflicting" &&
41
42		p4 delete -k "add_file_add_dir_del_file/file" &&
43		p4 delete -k "add_file_add_dir_del_dir" &&
44		p4 delete -k "add_dir_add_file_del_file/file" &&
45		p4 delete -k "add_dir_add_file_del_dir" &&
46		p4 submit -d "delete remaining"
47	)
48'
49
50test_expect_success 'clone with git-p4' '
51	git p4 clone --dest="$git" //depot/@1,3
52'
53
54test_expect_success 'check contents' '
55	test_path_is_dir "$git/add_file_add_dir_del_file" &&
56	test_path_is_file "$git/add_file_add_dir_del_dir" &&
57	test_path_is_dir "$git/add_dir_add_file_del_file" &&
58	test_path_is_file "$git/add_dir_add_file_del_dir"
59'
60
61test_expect_success 'rebase and check empty' '
62	git -C "$git" p4 rebase &&
63
64	test_path_is_missing "$git/add_file_add_dir_del_file" &&
65	test_path_is_missing "$git/add_file_add_dir_del_dir" &&
66	test_path_is_missing "$git/add_dir_add_file_del_file" &&
67	test_path_is_missing "$git/add_dir_add_file_del_dir"
68'
69
70test_done
71