3 test_description
='git bugreport'
5 TEST_PASSES_SANITIZE_LEAK
=true
8 test_expect_success
'create a report' '
9 git bugreport -s format &&
10 test_file_not_empty git-bugreport-format.txt
13 test_expect_success
'report contains wanted template (before first section)' '
14 sed -ne "/^\[/q;p" git-bugreport-format.txt >actual &&
15 cat >expect <<-\EOF &&
16 Thank you for filling out a Git bug report!
17 Please answer the following questions to help us understand your issue.
19 What did you do before the bug happened? (Steps to reproduce your issue)
21 What did you expect to happen? (Expected behavior)
23 What happened instead? (Actual behavior)
25 What'\''s different between what you expected and what actually happened?
27 Anything else you want to add:
29 Please review the rest of the bug report below.
30 You can delete any lines you don'\''t wish to share.
34 test_cmp expect actual
37 test_expect_success
'sanity check "System Info" section' '
38 test_when_finished rm -f git-bugreport-format.txt &&
40 sed -ne "/^\[System Info\]$/,/^$/p" <git-bugreport-format.txt >system &&
42 # The beginning should match "git version --build-info" verbatim,
43 # but rather than checking bit-for-bit equality, just test some basics.
44 grep "git version [0-9]." system &&
45 grep "shell-path: ." system &&
47 # After the version, there should be some more info.
48 # This is bound to differ from environment to environment,
49 # so we just do some rather high-level checks.
50 grep "uname: ." system &&
51 grep "compiler info: ." system
54 test_expect_success
'dies if file with same name as report already exists' '
55 test_when_finished rm git-bugreport-duplicate.txt &&
56 >>git-bugreport-duplicate.txt &&
57 test_must_fail git bugreport --suffix duplicate
60 test_expect_success
'--output-directory puts the report in the provided dir' '
61 test_when_finished rm -fr foo/ &&
62 git bugreport -o foo/ &&
63 test_path_is_file foo/git-bugreport-*
66 test_expect_success
'incorrect arguments abort with usage' '
67 test_must_fail git bugreport --false 2>output &&
68 test_i18ngrep usage output &&
69 test_path_is_missing git-bugreport-*
72 test_expect_success
'runs outside of a git dir' '
73 test_when_finished rm non-repo/git-bugreport-* &&
77 test_expect_success
'can create leading directories outside of a git dir' '
78 test_when_finished rm -fr foo/bar/baz &&
79 nongit git bugreport -o foo/bar/baz
82 test_expect_success
'indicates populated hooks' '
83 test_when_finished rm git-bugreport-hooks.txt &&
85 test_hook applypatch-msg <<-\EOF &&
88 test_hook unknown-hook <<-\EOF &&
91 git bugreport -s hooks &&
93 sort >expect <<-\EOF &&
98 sed -ne "/^\[Enabled Hooks\]$/,/^$/p" <git-bugreport-hooks.txt >actual &&
99 test_cmp expect actual
102 test_expect_success UNZIP
'--diagnose creates diagnostics zip archive' '
103 test_when_finished rm -rf report &&
105 git bugreport --diagnose -o report -s test >out &&
107 zip_path=report/git-diagnostics-test.zip &&
108 grep "Available space" out &&
109 test_path_is_file "$zip_path" &&
111 # Check zipped archive content
112 "$GIT_UNZIP" -p "$zip_path" diagnostics.log >out &&
113 test_file_not_empty out &&
115 "$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
116 grep ".git/objects" out &&
118 "$GIT_UNZIP" -p "$zip_path" objects-local.txt >out &&
119 grep "^Total: [0-9][0-9]*" out &&
121 # Should not include .git directory contents by default
122 ! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"
125 test_expect_success UNZIP
'--diagnose=stats excludes .git dir contents' '
126 test_when_finished rm -rf report &&
128 git bugreport --diagnose=stats -o report -s test >out &&
130 # Includes pack quantity/size info
131 "$GIT_UNZIP" -p "$zip_path" packs-local.txt >out &&
132 grep ".git/objects" out &&
134 # Does not include .git directory contents
135 ! "$GIT_UNZIP" -l "$zip_path" | grep ".git/"
138 test_expect_success UNZIP
'--diagnose=all includes .git dir contents' '
139 test_when_finished rm -rf report &&
141 git bugreport --diagnose=all -o report -s test >out &&
143 # Includes .git directory contents
144 "$GIT_UNZIP" -l "$zip_path" | grep ".git/" &&
146 "$GIT_UNZIP" -p "$zip_path" .git/HEAD >out &&
147 test_file_not_empty out