(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ <'gitweb as standalone script (basic tests).\n'> <'\n'> <'This test runs gitweb (git web interface) as CGI script from\n'> <'commandline, and checks that it would not write any errors\n'> <'or warnings to log.'> ) } spids: [13] ) ] ) (C {<.>} {<'./gitweb-lib.sh'>}) (C {<test_expect_success>} {(SQ <'no commits: projects_list (implicit)'>)} {(SQ <gitweb_run>)}) (C {<test_expect_success>} {(SQ <'no commits: projects_index'>)} {(SQ <'gitweb_run "a=project_index"'>)} ) (C {<test_expect_success>} {(SQ <'no commits: .git summary (implicit)'>)} {(SQ <'gitweb_run "p=.git"'>)} ) (C {<test_expect_success>} {(SQ <'no commits: .git commit (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=commit"'>)} ) (C {<test_expect_success>} {(SQ <'no commits: .git commitdiff (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff"'>)} ) (C {<test_expect_success>} {(SQ <'no commits: .git tree (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=tree"'>)} ) (C {<test_expect_success>} {(SQ <'no commits: .git heads'>)} {(SQ <'gitweb_run "p=.git;a=heads"'>)}) (C {<test_expect_success>} {(SQ <'no commits: .git tags'>)} {(SQ <'gitweb_run "p=.git;a=tags"'>)}) (C {<test_expect_success>} {(SQ <'Make initial commit'>)} { (SQ <'echo "Not an empty file." > file &&\n'> <'\t git add file &&\n'> <'\t git commit -a -m "Initial commit." &&\n'> <'\t git branch b'> ) } ) (C {<test_expect_success>} {(SQ <'projects_list (implicit)'>)} {(SQ <gitweb_run>)}) (C {<test_expect_success>} {(SQ <projects_index>)} {(SQ <'gitweb_run "a=project_index"'>)}) (C {<test_expect_success>} {(SQ <'.git summary (implicit)'>)} {(SQ <'gitweb_run "p=.git"'>)}) (C {<test_expect_success>} {(SQ <'.git commit (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=commit"'>)} ) (C {<test_expect_success>} {(SQ <'.git commitdiff (implicit HEAD, root commit)'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff"'>)} ) (C {<test_expect_success>} {(SQ <'.git commitdiff_plain (implicit HEAD, root commit)'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff_plain"'>)} ) (C {<test_expect_success>} {(SQ <'.git commit (HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=commit;h=HEAD"'>)} ) (C {<test_expect_success>} {(SQ <'.git tree (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=tree"'>)}) (C {<test_expect_success>} {(SQ <'.git blob (file)'>)} {(SQ <'gitweb_run "p=.git;a=blob;f=file"'>)}) (C {<test_expect_success>} {(SQ <'.git blob_plain (file)'>)} {(SQ <'gitweb_run "p=.git;a=blob_plain;f=file"'>)} ) (C {<test_expect_success>} {(SQ <'.git commit (non-existent)'>)} {(SQ <'gitweb_run "p=.git;a=commit;h=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'.git commitdiff (non-existent)'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;h=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'.git commitdiff (non-existent vs HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=non-existent;h=HEAD"'>)} ) (C {<test_expect_success>} {(SQ <'.git tree (0000000000000000000000000000000000000000)'>)} {(SQ <'gitweb_run "p=.git;a=tree;h=0000000000000000000000000000000000000000"'>)} ) (C {<test_expect_success>} {(SQ <'.git tag (0000000000000000000000000000000000000000)'>)} {(SQ <'gitweb_run "p=.git;a=tag;h=0000000000000000000000000000000000000000"'>)} ) (C {<test_expect_success>} {(SQ <'.git blob (non-existent)'>)} {(SQ <'gitweb_run "p=.git;a=blob;f=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'.git blob_plain (non-existent)'>)} {(SQ <'gitweb_run "p=.git;a=blob_plain;f=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(0): root'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff"'>)}) (C {<test_expect_success>} {(SQ <'commitdiff(0): file added'>)} { (SQ <'echo "New file" > new_file &&\n'> <'\t git add new_file &&\n'> <'\t git commit -a -m "File added." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): mode change'>)} { (SQ <'test_chmod +x new_file &&\n'> <'\t git commit -a -m "Mode changed." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): file renamed'>)} { (SQ <'git mv new_file renamed_file &&\n'> <'\t git commit -a -m "File renamed." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): file to symlink'>)} { (SQ <'rm renamed_file &&\n'> <'\t test_ln_s_add file renamed_file &&\n'> <'\t git commit -a -m "File to symlink." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): file deleted'>)} { (SQ <'git rm renamed_file &&\n'> <'\t rm -f renamed_file &&\n'> <'\t git commit -a -m "File removed." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): file copied / new file'>)} { (SQ <'cp file file2 &&\n'> <'\t git add file2 &&\n'> <'\t git commit -a -m "File copied." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): mode change and modified'>)} { (SQ <'echo "New line" >> file2 &&\n'> <'\t test_chmod +x file2 &&\n'> <'\t git commit -a -m "Mode change and modification." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): renamed and modified'>)} { (SQ <'cat >file2<<EOF &&\n'> <'Dominus regit me,\n'> <'et nihil mihi deerit.\n'> <'In loco pascuae ibi me collocavit,\n'> <'super aquam refectionis educavit me;\n'> <'animam meam convertit,\n'> <'deduxit me super semitas jusitiae,\n'> <'propter nomen suum.\n'> <'EOF\n'> <'\t git commit -a -m "File added." &&\n'> <'\t git mv file2 file3 &&\n'> <'\t echo "Propter nomen suum." >> file3 &&\n'> <'\t git commit -a -m "File rename and modification." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(0): renamed, mode change and modified'>)} { (SQ <'git mv file3 file2 &&\n'> <'\t echo "Propter nomen suum." >> file2 &&\n'> <'\t test_chmod +x file2 &&\n'> <'\t git commit -a -m "File rename, mode change and modification." &&\n'> <'\t gitweb_run "p=.git;a=commitdiff"'> ) } ) (C {<test_expect_success>} {(SQ <'setup typechange commits'>)} { (SQ <'\n'> <'\techo "hello world" > foo &&\n'> <'\techo "hi planet" > bar &&\n'> <'\tgit update-index --add foo bar &&\n'> <'\tgit commit -m initial &&\n'> <'\tgit branch initial &&\n'> <'\trm -f foo &&\n'> <'\ttest_ln_s_add bar foo &&\n'> <'\tgit commit -m "foo symlinked to bar" &&\n'> <'\tgit branch foo-symlinked-to-bar &&\n'> <'\trm -f foo &&\n'> <'\techo "how far is the sun?" > foo &&\n'> <'\tgit update-index foo &&\n'> <'\tgit commit -m "foo back to file" &&\n'> <'\tgit branch foo-back-to-file &&\n'> <'\trm -f foo &&\n'> <'\tgit update-index --remove foo &&\n'> <'\tmkdir foo &&\n'> <'\techo "if only I knew" > foo/baz &&\n'> <'\tgit update-index --add foo/baz &&\n'> <'\tgit commit -m "foo becomes a directory" &&\n'> <'\tgit branch "foo-becomes-a-directory" &&\n'> <'\techo "hello world" > foo/baz &&\n'> <'\tgit update-index foo/baz &&\n'> <'\tgit commit -m "foo/baz is the original foo" &&\n'> <'\tgit branch foo-baz-renamed-from-foo\n'> <'\t'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(2): file renamed from foo to foo/baz'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-baz-renamed-from-foo"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): file renamed from foo/baz to foo'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=foo-baz-renamed-from-foo;h=initial"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): directory becomes file'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=initial"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): file becomes directory'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-becomes-a-directory"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): file becomes symlink'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-symlinked-to-bar"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): symlink becomes file'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-back-to-file"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): symlink becomes directory'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-becomes-a-directory"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(2): directory becomes symlink'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=foo-symlinked-to-bar"'>)} ) (C {<test_expect_success>} {(SQ <'setup incomplete lines'>)} { (SQ <'\n'> <'\tcat >file<<-\\EOF &&\n'> <'\tDominus regit me,\n'> <'\tet nihil mihi deerit.\n'> <'\tIn loco pascuae ibi me collocavit,\n'> <'\tsuper aquam refectionis educavit me;\n'> <'\tanimam meam convertit,\n'> <'\tdeduxit me super semitas jusitiae,\n'> <'\tpropter nomen suum.\n'> <'\tCHANGE_ME\n'> <'\tEOF\n'> <'\tgit commit -a -m "Preparing for incomplete lines" &&\n'> <'\techo "incomplete" | tr -d "\\\\012" >>file &&\n'> <'\tgit commit -a -m "Add incomplete line" &&\n'> <'\tgit tag incomplete_lines_add &&\n'> <'\tsed -e s/CHANGE_ME/change_me/ <file >file+ &&\n'> <'\tmv -f file+ file &&\n'> <'\tgit commit -a -m "Incomplete context line" &&\n'> <'\tgit tag incomplete_lines_ctx &&\n'> <'\techo "Dominus regit me," >file &&\n'> <'\techo "incomplete line" | tr -d "\\\\012" >>file &&\n'> <'\tgit commit -a -m "Change incomplete line" &&\n'> <'\tgit tag incomplete_lines_chg &&\n'> <'\techo "Dominus regit me," >file &&\n'> <'\tgit commit -a -m "Remove incomplete line" &&\n'> <'\tgit tag incomplete_lines_rem\n'> ) } ) (C {<test_expect_success>} {(SQ <'commitdiff(1): addition of incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_add"\n'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(1): incomplete line as context line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_ctx"\n'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(1): change incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_chg"\n'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(1): removal of incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_rem"\n'>)} ) (C {<test_expect_success>} {(SQ <'Create a merge'>)} { (SQ <'git checkout b &&\n'> <'\t echo "Branch" >> b &&\n'> <'\t git add b &&\n'> <'\t git commit -a -m "On branch" &&\n'> <'\t git checkout master &&\n'> <'\t git merge b &&\n'> <'\t git tag merge_commit'> ) } ) (C {<test_expect_success>} {(SQ <'commit(0): merge commit'>)} {(SQ <'gitweb_run "p=.git;a=commit"'>)}) (C {<test_expect_success>} {(SQ <'commitdiff(0): merge commit'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff"'>)} ) (C {<test_expect_success>} {(SQ <'Prepare large commit'>)} { (SQ <'git checkout b &&\n'> <'\t echo "To be changed" > 01-change &&\n'> <'\t echo "To be renamed" > 02-pure-rename-from &&\n'> <'\t echo "To be deleted" > 03-delete &&\n'> <'\t echo "To be renamed and changed" > 04-rename-from &&\n'> <'\t echo "To have mode changed" > 05-mode-change &&\n'> <'\t echo "File to symlink" > 06-file-or-symlink &&\n'> <'\t echo "To be changed and have mode changed" > 07-change-mode-change\t&&\n'> <'\t git add 0* &&\n'> <'\t git commit -a -m "Prepare large commit" &&\n'> <'\t echo "Changed" > 01-change &&\n'> <'\t git mv 02-pure-rename-from 02-pure-rename-to &&\n'> <'\t git rm 03-delete && rm -f 03-delete &&\n'> <'\t echo "A new file" > 03-new &&\n'> <'\t git add 03-new &&\n'> <'\t git mv 04-rename-from 04-rename-to &&\n'> <'\t echo "Changed" >> 04-rename-to &&\n'> <'\t test_chmod +x 05-mode-change &&\n'> <'\t rm -f 06-file-or-symlink &&\n'> <'\t test_ln_s_add 01-change 06-file-or-symlink &&\n'> <'\t echo "Changed and have mode changed" > 07-change-mode-change\t&&\n'> <'\t test_chmod +x 07-change-mode-change &&\n'> <'\t git commit -a -m "Large commit" &&\n'> <'\t git checkout master'> ) } ) (C {<test_expect_success>} {(SQ <'commit(1): large commit'>)} {(SQ <'gitweb_run "p=.git;a=commit;h=b"'>)} ) (C {<test_expect_success>} {(SQ <'commitdiff(1): large commit'>)} {(SQ <'gitweb_run "p=.git;a=commitdiff;h=b"'>)} ) (C {<test_expect_success>} {(SQ <'side-by-side: addition of incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_add;ds=sidebyside"\n'>)} ) (C {<test_expect_success>} {(SQ <'side-by-side: incomplete line as context line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_ctx;ds=sidebyside"\n'>)} ) (C {<test_expect_success>} {(SQ <'side-by-side: changed incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_chg;ds=sidebyside"\n'>)} ) (C {<test_expect_success>} {(SQ <'side-by-side: removal of incomplete line'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=incomplete_lines_rem;ds=sidebyside"\n'>)} ) (C {<test_expect_success>} {(SQ <'side-by-side: merge commit'>)} {(SQ <'\n'> <'\tgitweb_run "p=.git;a=commitdiff;h=merge_commit;ds=sidebyside"\n'>)} ) (C {<test_expect_success>} {(SQ <'tags: list of different types of tags'>)} { (SQ <'git checkout master &&\n'> <'\t git tag -a -m "Tag commit object" tag-commit HEAD &&\n'> <'\t git tag -a -m "" tag-commit-nomessage HEAD &&\n'> <'\t git tag -a -m "Tag tag object" tag-tag tag-commit &&\n'> <'\t git tag -a -m "Tag tree object" tag-tree HEAD^{tree} &&\n'> <'\t git tag -a -m "Tag blob object" tag-blob HEAD:file &&\n'> <'\t git tag lightweight/tag-commit HEAD &&\n'> <'\t git tag lightweight/tag-tag tag-commit &&\n'> <'\t git tag lightweight/tag-tree HEAD^{tree} &&\n'> <'\t git tag lightweight/tag-blob HEAD:file &&\n'> <'\t gitweb_run "p=.git;a=tags"'> ) } ) (C {<test_expect_success>} {(SQ <'tag: Tag to commit object'>)} {(SQ <'gitweb_run "p=.git;a=tag;h=tag-commit"'>)} ) (C {<test_expect_success>} {(SQ <'tag: on lightweight tag (invalid)'>)} {(SQ <'gitweb_run "p=.git;a=tag;h=lightweight/tag-commit"'>)} ) (C {<test_expect_success>} {(SQ <'logs: log (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=log"'>)}) (C {<test_expect_success>} {(SQ <'logs: shortlog (implicit HEAD)'>)} {(SQ <'gitweb_run "p=.git;a=shortlog"'>)} ) (C {<test_expect_success>} {(SQ <'logs: history (implicit HEAD, file)'>)} {(SQ <'gitweb_run "p=.git;a=history;f=file"'>)} ) (C {<test_expect_success>} {(SQ <'logs: history (implicit HEAD, non-existent file)'>)} {(SQ <'gitweb_run "p=.git;a=history;f=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'logs: history (implicit HEAD, deleted file)'>)} { (SQ <'git checkout master &&\n'> <'\t echo "to be deleted" > deleted_file &&\n'> <'\t git add deleted_file &&\n'> <'\t git commit -m "Add file to be deleted" &&\n'> <'\t git rm deleted_file &&\n'> <'\t git commit -m "Delete file" &&\n'> <'\t gitweb_run "p=.git;a=history;f=deleted_file"'> ) } ) (C {<test_expect_success>} {(SQ <'path_info: project'>)} {(SQ <'gitweb_run "" "/.git"'>)}) (C {<test_expect_success>} {(SQ <'path_info: project/branch'>)} {(SQ <'gitweb_run "" "/.git/b"'>)}) (C {<test_expect_success>} {(SQ <'path_info: project/branch:file'>)} {(SQ <'gitweb_run "" "/.git/master:file"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch:dir/'>)} {(SQ <'gitweb_run "" "/.git/master:foo/"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch (non-existent)'>)} {(SQ <'gitweb_run "" "/.git/non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch:filename (non-existent branch)'>)} {(SQ <'gitweb_run "" "/.git/non-existent:non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch:file (non-existent)'>)} {(SQ <'gitweb_run "" "/.git/master:non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch:dir/ (non-existent)'>)} {(SQ <'gitweb_run "" "/.git/master:non-existent/"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/branch:/file'>)} {(SQ <'gitweb_run "" "/.git/master:/file"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/:/file (implicit HEAD)'>)} {(SQ <'gitweb_run "" "/.git/:/file"'>)} ) (C {<test_expect_success>} {(SQ <'path_info: project/:/ (implicit HEAD, top tree)'>)} {(SQ <'gitweb_run "" "/.git/:/"'>)} ) (C {<test_expect_success>} {(SQ <'feeds: OPML'>)} {(SQ <'gitweb_run "a=opml"'>)}) (C {<test_expect_success>} {(SQ <'feed: RSS'>)} {(SQ <'gitweb_run "p=.git;a=rss"'>)}) (C {<test_expect_success>} {(SQ <'feed: Atom'>)} {(SQ <'gitweb_run "p=.git;a=atom"'>)}) (C {<test_expect_success>} {(SQ <'encode(commit): utf8'>)} { (SQ <'. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\t test_when_finished "GIT_AUTHOR_NAME=\\"A U Thor\\"" &&\n'> <'\t test_when_finished "GIT_COMMITTER_NAME=\\"C O Mitter\\"" &&\n'> <'\t echo "UTF-8" >> file &&\n'> <'\t git add file &&\n'> <'\t git commit -F "$TEST_DIRECTORY"/t3900/1-UTF-8.txt &&\n'> <'\t gitweb_run "p=.git;a=commit"'> ) } ) (C {<test_expect_success>} {(SQ <'encode(commit): iso-8859-1'>)} { (SQ <'. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\t test_when_finished "GIT_AUTHOR_NAME=\\"A U Thor\\"" &&\n'> <'\t test_when_finished "GIT_COMMITTER_NAME=\\"C O Mitter\\"" &&\n'> <'\t echo "ISO-8859-1" >> file &&\n'> <'\t git add file &&\n'> <'\t test_config i18n.commitencoding ISO-8859-1 &&\n'> <'\t git commit -F "$TEST_DIRECTORY"/t3900/ISO8859-1.txt &&\n'> <'\t gitweb_run "p=.git;a=commit"'> ) } ) (C {<test_expect_success>} {(SQ <'encode(log): utf-8 and iso-8859-1'>)} {(SQ <'gitweb_run "p=.git;a=log"'>)} ) (C {<test_expect_success>} {(SQ <'opt: log --no-merges'>)} {(SQ <'gitweb_run "p=.git;a=log;opt=--no-merges"'>)} ) (C {<test_expect_success>} {(SQ <'opt: atom --no-merges'>)} {(SQ <'gitweb_run "p=.git;a=log;opt=--no-merges"'>)} ) (C {<test_expect_success>} {(SQ <'opt: "file" history --no-merges'>)} {(SQ <'gitweb_run "p=.git;a=history;f=file;opt=--no-merges"'>)} ) (C {<test_expect_success>} {(SQ <'opt: log --no-such-option (invalid option)'>)} {(SQ <'gitweb_run "p=.git;a=log;opt=--no-such-option"'>)} ) (C {<test_expect_success>} {(SQ <'opt: tree --no-merges (invalid option for action)'>)} {(SQ <'gitweb_run "p=.git;a=tree;opt=--no-merges"'>)} ) (C {<test_expect_success>} {(SQ <'URL: no project URLs, no base URL'>)} {(SQ <'gitweb_run "p=.git;a=summary"'>)} ) (C {<test_expect_success>} {(SQ <'URL: project URLs via gitweb.url'>)} { (SQ <'git config --add gitweb.url git://example.com/git/trash.git &&\n'> <' git config --add gitweb.url http://example.com/git/trash.git &&\n'> <' gitweb_run "p=.git;a=summary"'> ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'.git/cloneurl'>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 1657 stdin_parts: [ <'git://example.com/git/trash.git\n'> <'http://example.com/git/trash.git\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'URL: project URLs via cloneurl file'>)} {(SQ <'gitweb_run "p=.git;a=summary"'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<gitweb_config.perl>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 1697 stdin_parts: [ <'\n'> <'# turn on override for each overridable feature\n'> <'foreach my $key (keys %feature) {\n'> <'\tif ($feature{$key}{\'sub\'}) {\n'> <'\t\t$feature{$key}{\'override\'} = 1;\n'> <'\t}\n'> <'}\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'config override: projects list (implicit)'>)} {(SQ <gitweb_run>)}) (C {<test_expect_success>} {(SQ <'config override: tree view, features not overridden in repo config'>)} {(SQ <'gitweb_run "p=.git;a=tree"'>)} ) (C {<test_expect_success>} {(SQ <'config override: tree view, features disabled in repo config'>)} { (SQ <'git config gitweb.blame no &&\n'> <'\t git config gitweb.snapshot none &&\n'> <'\t git config gitweb.avatar gravatar &&\n'> <'\t gitweb_run "p=.git;a=tree"'> ) } ) (C {<test_expect_success>} {(SQ <'config override: tree view, features enabled in repo config (1)'>)} { (SQ <'git config gitweb.blame yes &&\n'> <'\t git config gitweb.snapshot "zip,tgz, tbz2" &&\n'> <'\t gitweb_run "p=.git;a=tree"'> ) } ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'.git/config'>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 1777 stdin_parts: [ <'# testing noval and alternate separator\n'> <'[gitweb]\n'> <'\tblame\n'> <'\tsnapshot = zip tgz\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'config override: tree view, features enabled in repo config (2)'>)} {(SQ <'gitweb_run "p=.git;a=tree"'>)} ) (command.Simple words: [{<cat>}] redirects: [ (redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<gitweb_config.perl>}) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 1814 stdin_parts: [ <'\n'> <'# enable search\n'> <'$feature{\'search\'}{\'default\'} = [1];\n'> <'$feature{\'grep\'}{\'default\'} = [1];\n'> <'$feature{\'pickaxe\'}{\'default\'} = [1];\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'search: preparation'>)} { (SQ <'echo "1st MATCH" >>file &&\n'> <'\t echo "2nd MATCH" >>file &&\n'> <'\t echo "MATCH" >>bar &&\n'> <'\t git add file bar &&\n'> <'\t git commit -m "Added MATCH word"'> ) } ) (C {<test_expect_success>} {(SQ <'search: commit author'>)} {(SQ <'gitweb_run "p=.git;a=search;h=HEAD;st=author;s=A+U+Thor"'>)} ) (C {<test_expect_success>} {(SQ <'search: commit message'>)} {(SQ <'gitweb_run "p=.git;a=search;h=HEAD;st=commitr;s=MATCH"'>)} ) (C {<test_expect_success>} {(SQ <'search: grep'>)} {(SQ <'gitweb_run "p=.git;a=search;h=HEAD;st=grep;s=MATCH"'>)} ) (C {<test_expect_success>} {(SQ <'search: pickaxe'>)} {(SQ <'gitweb_run "p=.git;a=search;h=HEAD;st=pickaxe;s=MATCH"'>)} ) (C {<test_expect_success>} {(SQ <'search: projects'>)} {(SQ <'gitweb_run "a=project_list;s=.git"'>)}) (C {<test_expect_success>} {(SQ <'README.html with non-ASCII characters (utf-8)'>)} { (SQ <'echo "<b>UTF-8 example:</b><br />" > .git/README.html &&\n'> <'\t cat "$TEST_DIRECTORY"/t3900/1-UTF-8.txt >> .git/README.html &&\n'> <'\t gitweb_run "p=.git;a=summary"'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:highlight_version) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Simple words: [{<highlight>} {<--version>}] redirects: [ (redir op: <Id.Redir_Less '<'> loc: (redir_loc.Fd fd:0) arg: {<'/dev/null'>} ) (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) ) } spids: [1942] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-eq>} {<127>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<say>} {(DQ <'Skipping syntax highlighting tests: \'highlight\' not found'>)})] spids: [1955 1968] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$highlight_version'))}) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<say>} {(DQ <'Skipping syntax highlighting tests: incorrect \'highlight\' found'>)}) ] spids: [1977 1988] ) ] else_action: [ (C {<test_set_prereq>} {<HIGHLIGHT>}) (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {<gitweb_config.perl>} ) (redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 2016 stdin_parts: [ <'our $highlight_bin = "highlight";\n'> <'$feature{\'highlight\'}{\'override\'} = 1;\n'> ] ) ) ] do_fork: T ) ] ) (C {<test_expect_success>} {<HIGHLIGHT>} {(SQ <'syntax highlighting (no highlight, unknown syntax)'>)} {(SQ <'git config gitweb.highlight yes &&\n'> <'\t gitweb_run "p=.git;a=blob;f=file"'>)} ) (C {<test_expect_success>} {<HIGHLIGHT>} {(SQ <'syntax highlighting (highlighted, shell script)'>)} { (SQ <'git config gitweb.highlight yes &&\n'> <'\t echo "#!/usr/bin/sh" > test.sh &&\n'> <'\t git add test.sh &&\n'> <'\t git commit -m "Add test.sh" &&\n'> <'\t gitweb_run "p=.git;a=blob;f=test.sh"'> ) } ) (C {<test_expect_success>} {<HIGHLIGHT>} {(SQ <'syntax highlighting (highlighter language autodetection)'>)} { (SQ <'git config gitweb.highlight yes &&\n'> <'\t echo "#!/usr/bin/perl" > test &&\n'> <'\t git add test &&\n'> <'\t git commit -m "Add test" &&\n'> <'\t gitweb_run "p=.git;a=blob;f=test"'> ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {<gitweb_config.perl>} ) (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 2099 stdin_parts: [<'$feature{\'forks\'}{\'default\'} = [1];\n'>] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'forks: prepare'>)} { (SQ <'git init --bare foo.git &&\n'> <'\t git --git-dir=foo.git --work-tree=. add file &&\n'> <'\t git --git-dir=foo.git --work-tree=. commit -m "Initial commit" &&\n'> <'\t echo "foo" > foo.git/description &&\n'> <'\t mkdir -p foo &&\n'> <'\t (cd foo &&\n'> <'\t git clone --shared --bare ../foo.git foo-forked.git &&\n'> <'\t echo "fork of foo" > foo-forked.git/description)'> ) } ) ] ) (C {<test_expect_success>} {(SQ <'forks: projects list'>)} {(SQ <gitweb_run>)}) (C {<test_expect_success>} {(SQ <'forks: forks action'>)} {(SQ <'gitweb_run "p=foo.git;a=forks"'>)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {<gitweb_config.perl>} ) (redir op: <Id.Redir_DLessDash '<<-'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'>) <OF>} here_end_span_id: 2173 stdin_parts: [ <'# we don\'t test _setting_ content tags, so any true value is good\n'> <'$feature{\'ctags\'}{\'default\'} = [\'ctags_script.cgi\'];\n'> ] ) ) ] do_fork: T ) (C {<test_expect_success>} {(SQ <'ctags: tag cloud in projects list'>)} { (SQ <'mkdir .git/ctags &&\n'> <'\t echo "2" > .git/ctags/foo &&\n'> <'\t echo "1" > .git/ctags/bar &&\n'> <'\tgitweb_run'> ) } ) ] ) (C {<test_expect_success>} {(SQ <'ctags: search projects by existing tag'>)} {(SQ <'gitweb_run "by_tag=foo"'>)} ) (C {<test_expect_success>} {(SQ <'ctags: search projects by non existent tag'>)} {(SQ <'gitweb_run "by_tag=non-existent"'>)} ) (C {<test_expect_success>} {(SQ <'ctags: malformed tag weights'>)} { (SQ <'mkdir -p .git/ctags &&\n'> <'\t echo "not-a-number" > .git/ctags/nan &&\n'> <'\t echo "not-a-number-2" > .git/ctags/nan2 &&\n'> <'\t echo "0.1" >.git/ctags/floating-point &&\n'> <'\t gitweb_run'> ) } ) (C {<test_expect_success>} {(SQ <'categories: projects list, only default category'>)} { (SQ <'echo "\\$projects_list_group_categories = 1;" >>gitweb_config.perl &&\n'> <'\t gitweb_run'> ) } ) (C {<test_expect_success>} {(SQ <'unborn HEAD: "summary" page (with "heads" subview)'>)} { (SQ <'{\n'> <'\t\tgit checkout orphan_branch ||\n'> <'\t\tgit checkout --orphan orphan_branch\n'> <'\t } &&\n'> <'\t test_when_finished "git checkout master" &&\n'> <'\t gitweb_run "p=.git;a=summary"'> ) } ) (C {<test_done>}) ] )