]> gitweb.ps.run Git - ps-cgit/commitdiff
Merge branch 'lh/cleanup'
authorLars Hjemli <hjemli@gmail.com>
Tue, 8 Apr 2008 19:29:21 +0000 (21:29 +0200)
committerLars Hjemli <hjemli@gmail.com>
Tue, 8 Apr 2008 19:29:21 +0000 (21:29 +0200)
* lh/cleanup: (21 commits)
  Reset ctx.repo to NULL when the config parser is finished
  Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()
  Move function for configfile parsing into configfile.[ch]
  Add cache.h
  Remove global and obsolete cgit_cmd
  Makefile: copy the QUIET constructs from the Makefile in git.git
  Move cgit_version from shared.c to cgit.c
  Makefile: autobuild dependency rules
  Initial Makefile cleanup
  Move non-generic functions from shared.c to cgit.c
  Add ui-shared.h
  Add separate header-files for each page/view
  Refactor snapshot support
  Add command dispatcher
  Remove obsolete cacheitem parameter to ui-functions
  Add struct cgit_page to cgit_context
  Introduce html.h
  Improve initialization of git directory
  Move cgit_repo into cgit_context
  Add all config variables into struct cgit_context
  ...

Makefile
git
html.c
tests/setup.sh
tests/t0010-validate-html.sh
tests/t0101-index.sh
tests/t0102-summary.sh
tests/t0108-patch.sh [new file with mode: 0755]
ui-patch.c

index 355186eb068df3c44a3ff6890a472ef2a58bd672..931c60e4d7a750f6453ecb8fde8c332a99f1047b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ CGIT_SCRIPT_PATH = /var/www/htdocs/cgit
 CGIT_CONFIG = /etc/cgitrc
 CACHE_ROOT = /var/cache/cgit
 SHA1_HEADER = <openssl/sha.h>
-GIT_VER = 1.5.4.1
+GIT_VER = 1.5.5.rc1
 GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2
 
 #
diff --git a/git b/git
index 527270689c364bea9b0630df9bae5e09c2071c1e..803d5158123346229d71de53818920efbc88ca0f 160000 (submodule)
--- a/git
+++ b/git
@@ -1 +1 @@
-Subproject commit 527270689c364bea9b0630df9bae5e09c2071c1e
+Subproject commit 803d5158123346229d71de53818920efbc88ca0f
diff --git a/html.c b/html.c
index 98ffaf976a4abdf92e4ba4f5a973ab0c5184a515..937b5e7d6ef162554e187dc047c506c973edb553 100644 (file)
--- a/html.c
+++ b/html.c
@@ -56,9 +56,7 @@ void html_txt(char *txt)
        while(t && *t){
                int c = *t;
                if (c=='<' || c=='>' || c=='&') {
-                       *t = '\0';
-                       html(txt);
-                       *t = c;
+                       write(htmlfd, txt, t - txt);
                        if (c=='>')
                                html("&gt;");
                        else if (c=='<')
@@ -79,9 +77,7 @@ void html_ntxt(int len, char *txt)
        while(t && *t && len--){
                int c = *t;
                if (c=='<' || c=='>' || c=='&') {
-                       *t = '\0';
-                       html(txt);
-                       *t = c;
+                       write(htmlfd, txt, t - txt);
                        if (c=='>')
                                html("&gt;");
                        else if (c=='<')
@@ -92,12 +88,8 @@ void html_ntxt(int len, char *txt)
                }
                t++;
        }
-       if (t!=txt) {
-               char c = *t;
-               *t = '\0';
-               html(txt);
-               *t = c;
-       }
+       if (t!=txt)
+               write(htmlfd, txt, t - txt);
        if (len<0)
                html("...");
 }
@@ -108,9 +100,7 @@ void html_attr(char *txt)
        while(t && *t){
                int c = *t;
                if (c=='<' || c=='>' || c=='\'') {
-                       *t = '\0';
-                       html(txt);
-                       *t = c;
+                       write(htmlfd, txt, t - txt);
                        if (c=='>')
                                html("&gt;");
                        else if (c=='<')
index 51d5a7519af685cd8a9927dce86bde737f63db24..66bf406d09f7129566f32067282cf4da219c8a0e 100755 (executable)
@@ -54,7 +54,9 @@ summary-tags=5
 
 repo.url=foo
 repo.path=$PWD/trash/repos/foo/.git
-repo.desc=the foo repo
+# Do not specify a description for this repo, as it then will be assigned
+# the constant value "[no description]" (which actually used to cause a
+# segfault).
 
 repo.url=bar
 repo.path=$PWD/trash/repos/bar/.git
@@ -65,8 +67,10 @@ EOF
 prepare_tests()
 {
        setup_repos
+       rm -f test-output.log 2>/dev/null
        test_count=0
        test_failed=0
+       echo "[$0]" "$@" >test-output.log
        echo "$@" "($0)"
 }
 
@@ -75,7 +79,8 @@ tests_done()
        printf "\n"
        if test $test_failed -gt 0
        then
-               printf "[%s of %s tests failed]\n" $test_failed $test_count
+               printf "test: *** %s failure(s), logfile=%s\n" \
+                       $test_failed "$(pwd)/test-output.log"
                false
        fi
 }
@@ -85,14 +90,17 @@ run_test()
        desc=$1
        script=$2
        ((test_count++))
-       eval "$2" >test-output.log
+       printf "\ntest %d: name='%s'\n" $test_count "$desc" >>test-output.log
+       printf "test %d: eval='%s'\n" $test_count "$2" >>test-output.log
+       eval "$2" >>test-output.log 2>>test-output.log
        res=$?
+       printf "test %d: exitcode=%d\n" $test_count $res >>test-output.log
        if test $res = 0
        then
-               printf "  %s: ok - %s\n" $test_count "$desc"
+               printf " %2d) %-60s [ok]\n" $test_count "$desc"
        else
                ((test_failed++))
-               printf "  %s: fail - %s\n" $test_count "$desc"
+               printf " %2d) %-60s [failed]\n" $test_count "$desc"
        fi
 }
 
index 907a415bda3bd65670058be4fc28ac93f4124a05..94aa52b5c7cd894712b146ee77dd82dc5b45bef8 100755 (executable)
@@ -7,9 +7,12 @@ test_url()
 {
        tidy_opt="-eq"
        test -z "$NO_TIDY_WARNINGS" || tidy_opt+=" --show-warnings no"
-       cgit_url "$1" | sed -e "1,4d" >trash/tidy-$test_count
+       cgit_url "$1" >trash/tidy-$test_count || return
+       sed -ie "1,4d" trash/tidy-$test_count || return
        tidy $tidy_opt trash/tidy-$test_count
        rc=$?
+
+       # tidy returns with exitcode 1 on warnings, 2 on error
        if test $rc = 2
        then
                false
index 12ed00c4e4574cf36a63996a08c3169284562e29..445af6a6f0b48a3774c8778f4cbf12c73d88d00e 100755 (executable)
@@ -6,8 +6,10 @@ prepare_tests "Check content on index page"
 
 run_test 'generate index page' 'cgit_url "" >trash/tmp'
 run_test 'find foo repo' 'grep -e "foo" trash/tmp'
+run_test 'find foo description' 'grep -e "\[no description\]" trash/tmp'
 run_test 'find bar repo' 'grep -e "bar" trash/tmp'
-run_test 'no tree-link' 'grep -ve "foo/tree" trash/tmp'
-run_test 'no log-link' 'grep -ve "foo/log" trash/tmp'
+run_test 'find bar description' 'grep -e "the bar repo" trash/tmp'
+run_test 'no tree-link' '! grep -e "foo/tree" trash/tmp'
+run_test 'no log-link' '! grep -e "foo/log" trash/tmp'
 
 tests_done
index 7edd67505a6c3bf59057168ca69d799f9fbebf1a..f0b0d9a700beea9d0754febbe79c17b1c324501d 100755 (executable)
@@ -8,13 +8,13 @@ run_test 'generate foo summary' 'cgit_url "foo" >trash/tmp'
 run_test 'find commit 1' 'grep -e "commit 1" trash/tmp'
 run_test 'find commit 5' 'grep -e "commit 5" trash/tmp'
 run_test 'find branch master' 'grep -e "master" trash/tmp'
-run_test 'no tags' 'grep -ve "tags" trash/tmp'
+run_test 'no tags' '! grep -e "tags" trash/tmp'
 
 run_test 'generate bar summary' 'cgit_url "bar" >trash/tmp'
-run_test 'no commit 45' 'grep -ve "commit 45" trash/tmp'
+run_test 'no commit 45' '! grep -e "commit 45" trash/tmp'
 run_test 'find commit 46' 'grep -e "commit 46" trash/tmp'
 run_test 'find commit 50' 'grep -e "commit 50" trash/tmp'
 run_test 'find branch master' 'grep -e "master" trash/tmp'
-run_test 'no tags' 'grep -ve "tags" trash/tmp'
+run_test 'no tags' '! grep -e "tags" trash/tmp'
 
 tests_done
diff --git a/tests/t0108-patch.sh b/tests/t0108-patch.sh
new file mode 100755 (executable)
index 0000000..33351d6
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+. ./setup.sh
+
+prepare_tests "Check content on patch page"
+
+run_test 'generate foo/patch' '
+       cgit_query "url=foo/patch" >trash/tmp
+'
+
+run_test 'find `From:` line' '
+       grep -e "^From: " trash/tmp
+'
+
+run_test 'find `Date:` line' '
+       grep -e "^Date: " trash/tmp
+'
+
+run_test 'find `Subject:` line' '
+       grep -e "^Subject: commit 5" trash/tmp
+'
+
+run_test 'find `cgit` signature' '
+        tail -1 trash/tmp | grep -e "^cgit"
+'
+
+run_test 'find initial commit' '
+       root=$(git --git-dir=$PWD/trash/repos/foo/.git rev-list HEAD | tail -1)
+'
+
+run_test 'generate patch for initial commit' '
+       cgit_query "url=foo/patch&id=$root" >trash/tmp
+'
+
+run_test 'find `cgit` signature' '
+       tail -1 trash/tmp | grep -e "^cgit"
+'
index 36bfae4836df393cd1c24c94b58e15702e2bc134..c1c4ce30368d668b954d460a4df3b836da58db4f 100644 (file)
@@ -90,7 +90,11 @@ void cgit_print_patch(char *hex)
                return;
        }
        info = cgit_parse_commit(commit);
-       hashcpy(old_sha1, commit->parents->item->object.sha1);
+
+       if (commit->parents && commit->parents->item)
+               hashcpy(old_sha1, commit->parents->item->object.sha1);
+       else
+               hashclr(old_sha1);
 
        patchname = fmt("%s.patch", sha1_to_hex(sha1));
        ctx.page.mimetype = "text/plain";