]>
Commit | Line | Data |
---|---|---|
54e1abce CW |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2007 Carl D. Worth | |
4 | # | |
5 | ||
6 | test_description='git ls-files test (--with-tree). | |
7 | ||
8 | This test runs git ls-files --with-tree and in particular in | |
9 | a scenario known to trigger a crash with some versions of git. | |
10 | ' | |
c07ce060 ÆAB |
11 | |
12 | TEST_PASSES_SANITIZE_LEAK=true | |
54e1abce CW |
13 | . ./test-lib.sh |
14 | ||
18337d40 | 15 | test_expect_success 'setup' ' |
54e1abce CW |
16 | |
17 | # The bug we are exercising requires a fair number of entries | |
18 | # in a sub-directory so that add_index_entry will trigger a | |
19 | # realloc. | |
20 | ||
21 | echo file >expected && | |
22 | mkdir sub && | |
54e1abce CW |
23 | for n in 0 1 2 3 4 5 |
24 | do | |
25 | for m in 0 1 2 3 4 5 6 7 8 9 | |
26 | do | |
27 | num=00$n$m && | |
28 | >sub/file-$num && | |
c6587bdd JK |
29 | echo file-$num >>expected || |
30 | return 1 | |
31 | done | |
32 | done && | |
54e1abce CW |
33 | git add . && |
34 | git commit -m "add a bunch of files" && | |
35 | ||
36 | # We remove them all so that we will have something to add | |
37 | # back with --with-tree and so that we will definitely be | |
38 | # under the realloc size to trigger the bug. | |
39 | rm -rf sub && | |
40 | git commit -a -m "remove them all" && | |
41 | ||
42 | # The bug also requires some entry before our directory so that | |
993d7085 | 43 | # prune_index will modify the_repository->index.cache |
54e1abce CW |
44 | |
45 | mkdir a_directory_that_sorts_before_sub && | |
46 | >a_directory_that_sorts_before_sub/file && | |
47 | mkdir sub && | |
48 | >sub/file && | |
49 | git add . | |
50 | ' | |
51 | ||
8de78218 ÆAB |
52 | test_expect_success 'usage' ' |
53 | test_expect_code 128 git ls-files --with-tree=HEAD -u && | |
54 | test_expect_code 128 git ls-files --with-tree=HEAD -s && | |
55 | test_expect_code 128 git ls-files --recurse-submodules --with-tree=HEAD | |
56 | ' | |
57 | ||
14c4776d | 58 | test_expect_success 'git ls-files --with-tree should succeed from subdir' ' |
993d7085 | 59 | # We have to run from a sub-directory to trigger prune_index |
18a82692 JN |
60 | # Then we finally get to run our --with-tree test |
61 | ( | |
62 | cd sub && | |
63 | git ls-files --with-tree=HEAD~1 >../output | |
64 | ) | |
54e1abce CW |
65 | ' |
66 | ||
18337d40 LL |
67 | test_expect_success 'git ls-files --with-tree should add entries from named tree.' ' |
68 | test_cmp expected output | |
69 | ' | |
54e1abce | 70 | |
8de78218 ÆAB |
71 | test_expect_success 'no duplicates in --with-tree output' ' |
72 | git ls-files --with-tree=HEAD >actual && | |
73 | sort -u actual >expected && | |
74 | test_cmp expected actual | |
75 | ' | |
76 | ||
77 | test_expect_success 'setup: output in a conflict' ' | |
78 | test_create_repo conflict && | |
79 | test_commit -C conflict BASE file && | |
80 | test_commit -C conflict A file foo && | |
81 | git -C conflict reset --hard BASE && | |
82 | test_commit -C conflict B file bar | |
83 | ' | |
84 | ||
85 | test_expect_success 'output in a conflict' ' | |
86 | test_must_fail git -C conflict merge A B && | |
87 | cat >expected <<-\EOF && | |
88 | file | |
89 | file | |
90 | file | |
91 | file | |
92 | EOF | |
93 | git -C conflict ls-files --with-tree=HEAD >actual && | |
94 | test_cmp expected actual | |
95 | ' | |
96 | ||
97 | test_expect_success 'output with removed .git/index' ' | |
98 | cat >expected <<-\EOF && | |
99 | file | |
100 | EOF | |
101 | rm conflict/.git/index && | |
102 | git -C conflict ls-files --with-tree=HEAD >actual && | |
103 | test_cmp expected actual | |
104 | ' | |
105 | ||
54e1abce | 106 | test_done |