1#!/bin/sh
   2#
   3# Copyright (c) 2007 Jakub Narebski
   4#
   5test_description='gitweb as standalone script (basic tests).
   7This test runs gitweb (git web interface) as CGI script from
   9commandline, and checks that it would not write any errors
  10or warnings to log.'
  11gitweb_init () {
  13        safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
  14        cat >gitweb_config.perl <<EOF
  15#!/usr/bin/perl
  16# gitweb configuration for tests
  18our \$version = "current";
  20our \$GIT = "git";
  21our \$projectroot = "$safe_pwd";
  22our \$project_maxdepth = 8;
  23our \$home_link_str = "projects";
  24our \$site_name = "[localhost]";
  25our \$site_header = "";
  26our \$site_footer = "";
  27our \$home_text = "indextext.html";
  28our @stylesheets = ("file:///$TEST_DIRECTORY/../gitweb/gitweb.css");
  29our \$logo = "file:///$TEST_DIRECTORY/../gitweb/git-logo.png";
  30our \$favicon = "file:///$TEST_DIRECTORY/../gitweb/git-favicon.png";
  31our \$projects_list = "";
  32our \$export_ok = "";
  33our \$strict_export = "";
  34EOF
  36        cat >.git/description <<EOF
  38$0 test repository
  39EOF
  40}
  41gitweb_run () {
  43        GATEWAY_INTERFACE="CGI/1.1"
  44        HTTP_ACCEPT="*/*"
  45        REQUEST_METHOD="GET"
  46        SCRIPT_NAME="$TEST_DIRECTORY/../gitweb/gitweb.perl"
  47        QUERY_STRING=""$1""
  48        PATH_INFO=""$2""
  49        export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD \
  50                SCRIPT_NAME QUERY_STRING PATH_INFO
  51        GITWEB_CONFIG=$(pwd)/gitweb_config.perl
  53        export GITWEB_CONFIG
  54        # some of git commands write to STDERR on error, but this is not
  56        # written to web server logs, so we are not interested in that:
  57        # we are interested only in properly formatted errors/warnings
  58        rm -f gitweb.log &&
  59        perl -- "$SCRIPT_NAME" \
  60                >/dev/null 2>gitweb.log &&
  61        if grep "^[[]" gitweb.log >/dev/null 2>&1; then false; else true; fi
  62        # gitweb.log is left for debugging
  64}
  65. ./test-lib.sh
  67if ! test_have_prereq PERL; then
  69        say 'skipping gitweb tests, perl not available'
  70        test_done
  71fi
  72perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
  74    say 'skipping gitweb tests, perl version is too old'
  75    test_done
  76}
  77gitweb_init
  79# ----------------------------------------------------------------------
  81# no commits (empty, just initialized repository)
  82test_expect_success \
  84        'no commits: projects_list (implicit)' \
  85        'gitweb_run'
  86test_debug 'cat gitweb.log'
  87test_expect_success \
  89        'no commits: projects_index' \
  90        'gitweb_run "a=project_index"'
  91test_debug 'cat gitweb.log'
  92test_expect_success \
  94        'no commits: .git summary (implicit)' \
  95        'gitweb_run "p=.git"'
  96test_debug 'cat gitweb.log'
  97test_expect_success \
  99        'no commits: .git commit (implicit HEAD)' \
 100        'gitweb_run "p=.git;a=commit"'
 101test_debug 'cat gitweb.log'
 102test_expect_success \
 104        'no commits: .git commitdiff (implicit HEAD)' \
 105        'gitweb_run "p=.git;a=commitdiff"'
 106test_debug 'cat gitweb.log'
 107test_expect_success \
 109        'no commits: .git tree (implicit HEAD)' \
 110        'gitweb_run "p=.git;a=tree"'
 111test_debug 'cat gitweb.log'
 112test_expect_success \
 114        'no commits: .git heads' \
 115        'gitweb_run "p=.git;a=heads"'
 116test_debug 'cat gitweb.log'
 117test_expect_success \
 119        'no commits: .git tags' \
 120        'gitweb_run "p=.git;a=tags"'
 121test_debug 'cat gitweb.log'
 122# ----------------------------------------------------------------------
 125# initial commit
 126test_expect_success \
 128        'Make initial commit' \
 129        'echo "Not an empty file." > file &&
 130         git add file &&
 131         git commit -a -m "Initial commit." &&
 132         git branch b'
 133test_expect_success \
 135        'projects_list (implicit)' \
 136        'gitweb_run'
 137test_debug 'cat gitweb.log'
 138test_expect_success \
 140        'projects_index' \
 141        'gitweb_run "a=project_index"'
 142test_debug 'cat gitweb.log'
 143test_expect_success \
 145        '.git summary (implicit)' \
 146        'gitweb_run "p=.git"'
 147test_debug 'cat gitweb.log'
 148test_expect_success \
 150        '.git commit (implicit HEAD)' \
 151        'gitweb_run "p=.git;a=commit"'
 152test_debug 'cat gitweb.log'
 153test_expect_success \
 155        '.git commitdiff (implicit HEAD, root commit)' \
 156        'gitweb_run "p=.git;a=commitdiff"'
 157test_debug 'cat gitweb.log'
 158test_expect_success \
 160        '.git commitdiff_plain (implicit HEAD, root commit)' \
 161        'gitweb_run "p=.git;a=commitdiff_plain"'
 162test_debug 'cat gitweb.log'
 163test_expect_success \
 165        '.git commit (HEAD)' \
 166        'gitweb_run "p=.git;a=commit;h=HEAD"'
 167test_debug 'cat gitweb.log'
 168test_expect_success \
 170        '.git tree (implicit HEAD)' \
 171        'gitweb_run "p=.git;a=tree"'
 172test_debug 'cat gitweb.log'
 173test_expect_success \
 175        '.git blob (file)' \
 176        'gitweb_run "p=.git;a=blob;f=file"'
 177test_debug 'cat gitweb.log'
 178test_expect_success \
 180        '.git blob_plain (file)' \
 181        'gitweb_run "p=.git;a=blob_plain;f=file"'
 182test_debug 'cat gitweb.log'
 183# ----------------------------------------------------------------------
 185# nonexistent objects
 186test_expect_success \
 188        '.git commit (non-existent)' \
 189        'gitweb_run "p=.git;a=commit;h=non-existent"'
 190test_debug 'cat gitweb.log'
 191test_expect_success \
 193        '.git commitdiff (non-existent)' \
 194        'gitweb_run "p=.git;a=commitdiff;h=non-existent"'
 195test_debug 'cat gitweb.log'
 196test_expect_success \
 198        '.git commitdiff (non-existent vs HEAD)' \
 199        'gitweb_run "p=.git;a=commitdiff;hp=non-existent;h=HEAD"'
 200test_debug 'cat gitweb.log'
 201test_expect_success \
 203        '.git tree (0000000000000000000000000000000000000000)' \
 204        'gitweb_run "p=.git;a=tree;h=0000000000000000000000000000000000000000"'
 205test_debug 'cat gitweb.log'
 206test_expect_success \
 208        '.git tag (0000000000000000000000000000000000000000)' \
 209        'gitweb_run "p=.git;a=tag;h=0000000000000000000000000000000000000000"'
 210test_debug 'cat gitweb.log'
 211test_expect_success \
 213        '.git blob (non-existent)' \
 214        'gitweb_run "p=.git;a=blob;f=non-existent"'
 215test_debug 'cat gitweb.log'
 216test_expect_success \
 218        '.git blob_plain (non-existent)' \
 219        'gitweb_run "p=.git;a=blob_plain;f=non-existent"'
 220test_debug 'cat gitweb.log'
 221# ----------------------------------------------------------------------
 224# commitdiff testing (implicit, one implicit tree-ish)
 225test_expect_success \
 227        'commitdiff(0): root' \
 228        'gitweb_run "p=.git;a=commitdiff"'
 229test_debug 'cat gitweb.log'
 230test_expect_success \
 232        'commitdiff(0): file added' \
 233        'echo "New file" > new_file &&
 234         git add new_file &&
 235         git commit -a -m "File added." &&
 236         gitweb_run "p=.git;a=commitdiff"'
 237test_debug 'cat gitweb.log'
 238test_expect_success \
 240        'commitdiff(0): mode change' \
 241        'test_chmod +x new_file &&
 242         git commit -a -m "Mode changed." &&
 243         gitweb_run "p=.git;a=commitdiff"'
 244test_debug 'cat gitweb.log'
 245test_expect_success \
 247        'commitdiff(0): file renamed' \
 248        'git mv new_file renamed_file &&
 249         git commit -a -m "File renamed." &&
 250         gitweb_run "p=.git;a=commitdiff"'
 251test_debug 'cat gitweb.log'
 252test_expect_success SYMLINKS \
 254        'commitdiff(0): file to symlink' \
 255        'rm renamed_file &&
 256         ln -s file renamed_file &&
 257         git commit -a -m "File to symlink." &&
 258         gitweb_run "p=.git;a=commitdiff"'
 259test_debug 'cat gitweb.log'
 260test_expect_success \
 262        'commitdiff(0): file deleted' \
 263        'git rm renamed_file &&
 264         rm -f renamed_file &&
 265         git commit -a -m "File removed." &&
 266         gitweb_run "p=.git;a=commitdiff"'
 267test_debug 'cat gitweb.log'
 268test_expect_success \
 270        'commitdiff(0): file copied / new file' \
 271        'cp file file2 &&
 272         git add file2 &&
 273         git commit -a -m "File copied." &&
 274         gitweb_run "p=.git;a=commitdiff"'
 275test_debug 'cat gitweb.log'
 276test_expect_success \
 278        'commitdiff(0): mode change and modified' \
 279        'echo "New line" >> file2 &&
 280         test_chmod +x file2 &&
 281         git commit -a -m "Mode change and modification." &&
 282         gitweb_run "p=.git;a=commitdiff"'
 283test_debug 'cat gitweb.log'
 284test_expect_success \
 286        'commitdiff(0): renamed and modified' \
 287        'cat >file2<<EOF &&
 288Dominus regit me,
 289et nihil mihi deerit.
 290In loco pascuae ibi me collocavit,
 291super aquam refectionis educavit me;
 292animam meam convertit,
 293deduxit me super semitas jusitiae,
 294propter nomen suum.
 295EOF
 296         git commit -a -m "File added." &&
 297         git mv file2 file3 &&
 298         echo "Propter nomen suum." >> file3 &&
 299         git commit -a -m "File rename and modification." &&
 300         gitweb_run "p=.git;a=commitdiff"'
 301test_debug 'cat gitweb.log'
 302test_expect_success \
 304        'commitdiff(0): renamed, mode change and modified' \
 305        'git mv file3 file2 &&
 306         echo "Propter nomen suum." >> file2 &&
 307         test_chmod +x file2 &&
 308         git commit -a -m "File rename, mode change and modification." &&
 309         gitweb_run "p=.git;a=commitdiff"'
 310test_debug 'cat gitweb.log'
 311# ----------------------------------------------------------------------
 313# commitdiff testing (taken from t4114-apply-typechange.sh)
 314test_expect_success SYMLINKS 'setup typechange commits' '
 316        echo "hello world" > foo &&
 317        echo "hi planet" > bar &&
 318        git update-index --add foo bar &&
 319        git commit -m initial &&
 320        git branch initial &&
 321        rm -f foo &&
 322        ln -s bar foo &&
 323        git update-index foo &&
 324        git commit -m "foo symlinked to bar" &&
 325        git branch foo-symlinked-to-bar &&
 326        rm -f foo &&
 327        echo "how far is the sun?" > foo &&
 328        git update-index foo &&
 329        git commit -m "foo back to file" &&
 330        git branch foo-back-to-file &&
 331        rm -f foo &&
 332        git update-index --remove foo &&
 333        mkdir foo &&
 334        echo "if only I knew" > foo/baz &&
 335        git update-index --add foo/baz &&
 336        git commit -m "foo becomes a directory" &&
 337        git branch "foo-becomes-a-directory" &&
 338        echo "hello world" > foo/baz &&
 339        git update-index foo/baz &&
 340        git commit -m "foo/baz is the original foo" &&
 341        git branch foo-baz-renamed-from-foo
 342        '
 343test_expect_success \
 345        'commitdiff(2): file renamed from foo to foo/baz' \
 346        'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-baz-renamed-from-foo"'
 347test_debug 'cat gitweb.log'
 348test_expect_success \
 350        'commitdiff(2): file renamed from foo/baz to foo' \
 351        'gitweb_run "p=.git;a=commitdiff;hp=foo-baz-renamed-from-foo;h=initial"'
 352test_debug 'cat gitweb.log'
 353test_expect_success \
 355        'commitdiff(2): directory becomes file' \
 356        'gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=initial"'
 357test_debug 'cat gitweb.log'
 358test_expect_success \
 360        'commitdiff(2): file becomes directory' \
 361        'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-becomes-a-directory"'
 362test_debug 'cat gitweb.log'
 363test_expect_success \
 365        'commitdiff(2): file becomes symlink' \
 366        'gitweb_run "p=.git;a=commitdiff;hp=initial;h=foo-symlinked-to-bar"'
 367test_debug 'cat gitweb.log'
 368test_expect_success \
 370        'commitdiff(2): symlink becomes file' \
 371        'gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-back-to-file"'
 372test_debug 'cat gitweb.log'
 373test_expect_success \
 375        'commitdiff(2): symlink becomes directory' \
 376        'gitweb_run "p=.git;a=commitdiff;hp=foo-symlinked-to-bar;h=foo-becomes-a-directory"'
 377test_debug 'cat gitweb.log'
 378test_expect_success \
 380        'commitdiff(2): directory becomes symlink' \
 381        'gitweb_run "p=.git;a=commitdiff;hp=foo-becomes-a-directory;h=foo-symlinked-to-bar"'
 382test_debug 'cat gitweb.log'
 383# ----------------------------------------------------------------------
 385# commit, commitdiff: merge, large
 386test_expect_success \
 387        'Create a merge' \
 388        'git checkout b &&
 389         echo "Branch" >> b &&
 390         git add b &&
 391         git commit -a -m "On branch" &&
 392         git checkout master &&
 393         git pull . b'
 394test_expect_success \
 396        'commit(0): merge commit' \
 397        'gitweb_run "p=.git;a=commit"'
 398test_debug 'cat gitweb.log'
 399test_expect_success \
 401        'commitdiff(0): merge commit' \
 402        'gitweb_run "p=.git;a=commitdiff"'
 403test_debug 'cat gitweb.log'
 404test_expect_success \
 406        'Prepare large commit' \
 407        'git checkout b &&
 408         echo "To be changed" > 01-change &&
 409         echo "To be renamed" > 02-pure-rename-from &&
 410         echo "To be deleted" > 03-delete &&
 411         echo "To be renamed and changed" > 04-rename-from &&
 412         echo "To have mode changed" > 05-mode-change &&
 413         echo "File to symlink" > 06-file-or-symlink &&
 414         echo "To be changed and have mode changed" > 07-change-mode-change     &&
 415         git add 0* &&
 416         git commit -a -m "Prepare large commit" &&
 417         echo "Changed" > 01-change &&
 418         git mv 02-pure-rename-from 02-pure-rename-to &&
 419         git rm 03-delete && rm -f 03-delete &&
 420         echo "A new file" > 03-new &&
 421         git add 03-new &&
 422         git mv 04-rename-from 04-rename-to &&
 423         echo "Changed" >> 04-rename-to &&
 424         test_chmod +x 05-mode-change &&
 425         rm -f 06-file-or-symlink &&
 426         if test_have_prereq SYMLINKS; then
 427                ln -s 01-change 06-file-or-symlink
 428         else
 429                printf %s 01-change > 06-file-or-symlink
 430         fi &&
 431         echo "Changed and have mode changed" > 07-change-mode-change   &&
 432         test_chmod +x 07-change-mode-change &&
 433         git commit -a -m "Large commit" &&
 434         git checkout master'
 435test_expect_success \
 437        'commit(1): large commit' \
 438        'gitweb_run "p=.git;a=commit;h=b"'
 439test_debug 'cat gitweb.log'
 440test_expect_success \
 442        'commitdiff(1): large commit' \
 443        'gitweb_run "p=.git;a=commitdiff;h=b"'
 444test_debug 'cat gitweb.log'
 445# ----------------------------------------------------------------------
 447# tags testing
 448test_expect_success \
 450        'tags: list of different types of tags' \
 451        'git checkout master &&
 452         git tag -a -m "Tag commit object" tag-commit HEAD &&
 453         git tag -a -m "" tag-commit-nomessage HEAD &&
 454         git tag -a -m "Tag tag object" tag-tag tag-commit &&
 455         git tag -a -m "Tag tree object" tag-tree HEAD^{tree} &&
 456         git tag -a -m "Tag blob object" tag-blob HEAD:file &&
 457         git tag lightweight/tag-commit HEAD &&
 458         git tag lightweight/tag-tag tag-commit &&
 459         git tag lightweight/tag-tree HEAD^{tree} &&
 460         git tag lightweight/tag-blob HEAD:file &&
 461         gitweb_run "p=.git;a=tags"'
 462test_debug 'cat gitweb.log'
 463test_expect_success \
 465        'tag: Tag to commit object' \
 466        'gitweb_run "p=.git;a=tag;h=tag-commit"'
 467test_debug 'cat gitweb.log'
 468test_expect_success \
 470        'tag: on lightweight tag (invalid)' \
 471        'gitweb_run "p=.git;a=tag;h=lightweight/tag-commit"'
 472test_debug 'cat gitweb.log'
 473# ----------------------------------------------------------------------
 475# logs
 476test_expect_success \
 478        'logs: log (implicit HEAD)' \
 479        'gitweb_run "p=.git;a=log"'
 480test_debug 'cat gitweb.log'
 481test_expect_success \
 483        'logs: shortlog (implicit HEAD)' \
 484        'gitweb_run "p=.git;a=shortlog"'
 485test_debug 'cat gitweb.log'
 486test_expect_success \
 488        'logs: history (implicit HEAD, file)' \
 489        'gitweb_run "p=.git;a=history;f=file"'
 490test_debug 'cat gitweb.log'
 491test_expect_success \
 493        'logs: history (implicit HEAD, non-existent file)' \
 494        'gitweb_run "p=.git;a=history;f=non-existent"'
 495test_debug 'cat gitweb.log'
 496test_expect_success \
 498        'logs: history (implicit HEAD, deleted file)' \
 499        'git checkout master &&
 500         echo "to be deleted" > deleted_file &&
 501         git add deleted_file &&
 502         git commit -m "Add file to be deleted" &&
 503         git rm deleted_file &&
 504         git commit -m "Delete file" &&
 505         gitweb_run "p=.git;a=history;f=deleted_file"'
 506test_debug 'cat gitweb.log'
 507# ----------------------------------------------------------------------
 509# path_info links
 510test_expect_success \
 511        'path_info: project' \
 512        'gitweb_run "" "/.git"'
 513test_debug 'cat gitweb.log'
 514test_expect_success \
 516        'path_info: project/branch' \
 517        'gitweb_run "" "/.git/b"'
 518test_debug 'cat gitweb.log'
 519test_expect_success \
 521        'path_info: project/branch:file' \
 522        'gitweb_run "" "/.git/master:file"'
 523test_debug 'cat gitweb.log'
 524test_expect_success \
 526        'path_info: project/branch:dir/' \
 527        'gitweb_run "" "/.git/master:foo/"'
 528test_debug 'cat gitweb.log'
 529test_expect_success \
 531        'path_info: project/branch:file (non-existent)' \
 532        'gitweb_run "" "/.git/master:non-existent"'
 533test_debug 'cat gitweb.log'
 534test_expect_success \
 536        'path_info: project/branch:dir/ (non-existent)' \
 537        'gitweb_run "" "/.git/master:non-existent/"'
 538test_debug 'cat gitweb.log'
 539test_expect_success \
 542        'path_info: project/branch:/file' \
 543        'gitweb_run "" "/.git/master:/file"'
 544test_debug 'cat gitweb.log'
 545test_expect_success \
 547        'path_info: project/:/file (implicit HEAD)' \
 548        'gitweb_run "" "/.git/:/file"'
 549test_debug 'cat gitweb.log'
 550test_expect_success \
 552        'path_info: project/:/ (implicit HEAD, top tree)' \
 553        'gitweb_run "" "/.git/:/"'
 554test_debug 'cat gitweb.log'
 555# ----------------------------------------------------------------------
 558# feed generation
 559test_expect_success \
 561        'feeds: OPML' \
 562        'gitweb_run "a=opml"'
 563test_debug 'cat gitweb.log'
 564test_expect_success \
 566        'feed: RSS' \
 567        'gitweb_run "p=.git;a=rss"'
 568test_debug 'cat gitweb.log'
 569test_expect_success \
 571        'feed: Atom' \
 572        'gitweb_run "p=.git;a=atom"'
 573test_debug 'cat gitweb.log'
 574# ----------------------------------------------------------------------
 576# encoding/decoding
 577test_expect_success \
 579        'encode(commit): utf8' \
 580        '. "$TEST_DIRECTORY"/t3901-utf8.txt &&
 581         echo "UTF-8" >> file &&
 582         git add file &&
 583         git commit -F "$TEST_DIRECTORY"/t3900/1-UTF-8.txt &&
 584         gitweb_run "p=.git;a=commit"'
 585test_debug 'cat gitweb.log'
 586test_expect_success \
 588        'encode(commit): iso-8859-1' \
 589        '. "$TEST_DIRECTORY"/t3901-8859-1.txt &&
 590         echo "ISO-8859-1" >> file &&
 591         git add file &&
 592         git config i18n.commitencoding ISO-8859-1 &&
 593         git commit -F "$TEST_DIRECTORY"/t3900/ISO-8859-1.txt &&
 594         git config --unset i18n.commitencoding &&
 595         gitweb_run "p=.git;a=commit"'
 596test_debug 'cat gitweb.log'
 597test_expect_success \
 599        'encode(log): utf-8 and iso-8859-1' \
 600        'gitweb_run "p=.git;a=log"'
 601test_debug 'cat gitweb.log'
 602# ----------------------------------------------------------------------
 604# extra options
 605test_expect_success \
 607        'opt: log --no-merges' \
 608        'gitweb_run "p=.git;a=log;opt=--no-merges"'
 609test_debug 'cat gitweb.log'
 610test_expect_success \
 612        'opt: atom --no-merges' \
 613        'gitweb_run "p=.git;a=log;opt=--no-merges"'
 614test_debug 'cat gitweb.log'
 615test_expect_success \
 617        'opt: "file" history --no-merges' \
 618        'gitweb_run "p=.git;a=history;f=file;opt=--no-merges"'
 619test_debug 'cat gitweb.log'
 620test_expect_success \
 622        'opt: log --no-such-option (invalid option)' \
 623        'gitweb_run "p=.git;a=log;opt=--no-such-option"'
 624test_debug 'cat gitweb.log'
 625test_expect_success \
 627        'opt: tree --no-merges (invalid option for action)' \
 628        'gitweb_run "p=.git;a=tree;opt=--no-merges"'
 629test_debug 'cat gitweb.log'
 630# ----------------------------------------------------------------------
 632# testing config_to_multi / cloneurl
 633test_expect_success \
 635       'URL: no project URLs, no base URL' \
 636       'gitweb_run "p=.git;a=summary"'
 637test_debug 'cat gitweb.log'
 638test_expect_success \
 640       'URL: project URLs via gitweb.url' \
 641       'git config --add gitweb.url git://example.com/git/trash.git &&
 642        git config --add gitweb.url http://example.com/git/trash.git &&
 643        gitweb_run "p=.git;a=summary"'
 644test_debug 'cat gitweb.log'
 645cat >.git/cloneurl <<\EOF
 647git://example.com/git/trash.git
 648http://example.com/git/trash.git
 649EOF
 650test_expect_success \
 652       'URL: project URLs via cloneurl file' \
 653       'gitweb_run "p=.git;a=summary"'
 654test_debug 'cat gitweb.log'
 655# ----------------------------------------------------------------------
 657# gitweb config and repo config
 658cat >>gitweb_config.perl <<EOF
 660\$feature{'blame'}{'override'} = 1;
 662\$feature{'snapshot'}{'override'} = 1;
 663EOF
 664test_expect_success \
 666        'config override: tree view, features not overridden in repo config' \
 667        'gitweb_run "p=.git;a=tree"'
 668test_debug 'cat gitweb.log'
 669test_expect_success \
 671        'config override: tree view, features disabled in repo config' \
 672        'git config gitweb.blame no &&
 673         git config gitweb.snapshot none &&
 674         gitweb_run "p=.git;a=tree"'
 675test_debug 'cat gitweb.log'
 676test_expect_success \
 678        'config override: tree view, features enabled in repo config (1)' \
 679        'git config gitweb.blame yes &&
 680         git config gitweb.snapshot "zip,tgz, tbz2" &&
 681         gitweb_run "p=.git;a=tree"'
 682test_debug 'cat gitweb.log'
 683cat >.git/config <<\EOF
 685# testing noval and alternate separator
 686[gitweb]
 687        blame
 688        snapshot = zip tgz
 689EOF
 690test_expect_success \
 691        'config override: tree view, features enabled in repo config (2)' \
 692        'gitweb_run "p=.git;a=tree"'
 693test_debug 'cat gitweb.log'
 694# ----------------------------------------------------------------------
 696# non-ASCII in README.html
 697test_expect_success \
 699        'README.html with non-ASCII characters (utf-8)' \
 700        'echo "<b>UTF-8 example:</b><br />" > .git/README.html &&
 701         cat "$TEST_DIRECTORY"/t3900/1-UTF-8.txt >> .git/README.html &&
 702         gitweb_run "p=.git;a=summary"'
 703test_debug 'cat gitweb.log'
 704test_done