aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--.gitmodules8
-rw-r--r--Makefile102
-rw-r--r--cgit.c36
-rw-r--r--cgit.css75
-rw-r--r--cgit.h47
-rw-r--r--cgitrc9
-rwxr-xr-xgen-version.sh20
m---------git0
-rw-r--r--parsing.c2
-rw-r--r--shared.c45
-rwxr-xr-xsubmodules.sh181
-rw-r--r--ui-commit.c78
-rw-r--r--ui-diff.c66
-rw-r--r--ui-log.c26
-rw-r--r--ui-repolist.c66
-rw-r--r--ui-shared.c234
-rw-r--r--ui-snapshot.c156
-rw-r--r--ui-summary.c49
-rw-r--r--ui-tag.c74
-rw-r--r--ui-tree.c213
-rw-r--r--ui-view.c55
22 files changed, 929 insertions, 614 deletions
diff --git a/.gitignore b/.gitignore
index c4c9ac3..5664962 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
1# Files I don't care to see in git-status/commit 1# Files I don't care to see in git-status/commit
2cgit 2cgit
3VERSION
3*.o 4*.o
4*~ 5*~
diff --git a/.gitmodules b/.gitmodules
index 51dd1ef..1daea94 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,5 +1,3 @@
1# This file maps a submodule path to an url from where the submodule 1[submodule "git"]
2# can be obtained. The script "submodules.sh" finds the url in this file 2 url = git://git.kernel.org/pub/scm/git/git.git
3# when invoked with -i to clone the submodules. 3 path = git
4
5git git://git.kernel.org/pub/scm/git/git.git
diff --git a/Makefile b/Makefile
index 57f80f8..fcbe3e4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,87 +1,71 @@
1CGIT_VERSION = 0.5 1CGIT_VERSION = v0.5
2
3prefix = /var/www/htdocs/cgit
4
5SHA1_HEADER = <openssl/sha.h>
6CACHE_ROOT = /var/cache/cgit
7CGIT_CONFIG = /etc/cgitrc
8CGIT_SCRIPT_NAME = cgit.cgi 2CGIT_SCRIPT_NAME = cgit.cgi
3CGIT_SCRIPT_PATH = /var/www/htdocs/cgit
4CGIT_CONFIG = /etc/cgitrc
5CACHE_ROOT = /var/cache/cgit
6SHA1_HEADER = <openssl/sha.h>
7GIT_VER = 1.5.2
8GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2
9 9
10# 10#
11# Let the user override the above settings. 11# Let the user override the above settings.
12# 12#
13-include cgit.conf 13-include cgit.conf
14 14
15
15EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto 16EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto
16OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \ 17OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \
17 ui-summary.o ui-log.o ui-view.o ui-tree.o ui-commit.o ui-diff.o \ 18 ui-summary.o ui-log.o ui-tree.o ui-commit.o ui-diff.o \
18 ui-snapshot.o ui-blob.o 19 ui-snapshot.o ui-blob.o ui-tag.o
20
21
22.PHONY: all git install clean distclean force-version get-git
19 23
20CFLAGS += -Wall 24all: cgit git
21 25
22ifdef DEBUG 26VERSION: force-version
23 CFLAGS += -g 27 @./gen-version.sh "$(CGIT_VERSION)"
24endif 28-include VERSION
25 29
26CFLAGS += -Igit 30
31CFLAGS += -g -Wall -Igit
27CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)' 32CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)'
28CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"' 33CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"'
29CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' 34CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"'
30CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' 35CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"'
31 36
32 37
33# 38cgit: cgit.c $(OBJECTS)
34# If make is run on a nongit platform, get the git sources as a tarball.
35#
36GITVER = $(shell git version 2>/dev/null || echo nogit)
37ifeq ($(GITVER),nogit)
38GITURL = http://www.kernel.org/pub/software/scm/git/git-1.5.2.tar.bz2
39INITGIT = test -e git/git.c || ((curl "$(GITURL)" | tar -xj) && mv git-1.5.2 git)
40else
41INITGIT = ./submodules.sh -i
42endif
43
44
45#
46# basic build rules
47#
48all: cgit
49
50cgit: cgit.c cgit.h $(OBJECTS)
51 $(CC) $(CFLAGS) cgit.c -o cgit $(OBJECTS) $(EXTLIBS) 39 $(CC) $(CFLAGS) cgit.c -o cgit $(OBJECTS) $(EXTLIBS)
52 40
53$(OBJECTS): cgit.h git/libgit.a 41$(OBJECTS): cgit.h git/xdiff/lib.a git/libgit.a VERSION
54 42
55git/libgit.a: 43git/xdiff/lib.a: | git
56 $(INITGIT)
57 $(MAKE) -C git
58 44
59# 45git/libgit.a: | git
60# phony targets
61#
62install: all clean-cache
63 mkdir -p $(prefix)
64 install cgit $(prefix)/$(CGIT_SCRIPT_NAME)
65 install cgit.css $(prefix)/cgit.css
66 46
67clean-cgit: 47git:
68 rm -f cgit *.o 48 cd git && $(MAKE) xdiff/lib.a
49 cd git && $(MAKE) libgit.a
69 50
70distclean-cgit: clean-cgit 51install: all
71 git clean -d -x 52 mkdir -p $(CGIT_SCRIPT_PATH)
72 53 install cgit $(CGIT_SCRIPT_PATH)/$(CGIT_SCRIPT_NAME)
73clean-sub: 54 install cgit.css $(CGIT_SCRIPT_PATH)/cgit.css
74 $(MAKE) -C git clean
75
76distclean-sub: clean-sub
77 $(shell cd git && git clean -d -x)
78
79clean-cache:
80 rm -rf $(CACHE_ROOT)/* 55 rm -rf $(CACHE_ROOT)/*
81 56
82clean: clean-cgit clean-sub 57uninstall:
58 rm -f $(CGIT_SCRIPT_PATH)/$(CGIT_SCRIPT_NAME)
59 rm -f $(CGIT_SCRIPT_PATH)/cgit.css
60 rm -rf $(CACHE_ROOT)
61
62clean:
63 rm -f cgit VERSION *.o
64 cd git && $(MAKE) clean
83 65
84distclean: distclean-cgit distclean-sub 66distclean: clean
67 git clean -d -x
68 cd git && git clean -d -x
85 69
86.PHONY: all install clean clean-cgit clean-sub clean-cache \ 70get-git:
87 distclean distclean-cgit distclean-sub 71 curl $(GIT_URL) | tar -xj && rm -rf git && mv git-$(GIT_VER) git
diff --git a/cgit.c b/cgit.c
index 34e590e..c86d290 100644
--- a/cgit.c
+++ b/cgit.c
@@ -8,9 +8,6 @@
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11const char cgit_version[] = CGIT_VERSION;
12
13
14static int cgit_prepare_cache(struct cacheitem *item) 11static int cgit_prepare_cache(struct cacheitem *item)
15{ 12{
16 if (!cgit_repo && cgit_query_repo) { 13 if (!cgit_repo && cgit_query_repo) {
@@ -29,13 +26,15 @@ static int cgit_prepare_cache(struct cacheitem *item)
29 } 26 }
30 27
31 if (!cgit_cmd) { 28 if (!cgit_cmd) {
32 item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root, 29 item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root,
33 cache_safe_filename(cgit_repo->url))); 30 cache_safe_filename(cgit_repo->url),
31 cache_safe_filename(cgit_querystring)));
34 item->ttl = cgit_cache_repo_ttl; 32 item->ttl = cgit_cache_repo_ttl;
35 } else { 33 } else {
36 item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, 34 item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root,
37 cache_safe_filename(cgit_repo->url), cgit_query_page, 35 cache_safe_filename(cgit_repo->url),
38 cache_safe_filename(cgit_querystring))); 36 cgit_query_page,
37 cache_safe_filename(cgit_querystring)));
39 if (cgit_query_has_symref) 38 if (cgit_query_has_symref)
40 item->ttl = cgit_cache_dynamic_ttl; 39 item->ttl = cgit_cache_dynamic_ttl;
41 else if (cgit_query_has_sha1) 40 else if (cgit_query_has_sha1)
@@ -69,8 +68,10 @@ static void cgit_print_repo_page(struct cacheitem *item)
69 setenv("GIT_DIR", cgit_repo->path, 1); 68 setenv("GIT_DIR", cgit_repo->path, 1);
70 69
71 if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) { 70 if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) {
72 cgit_print_snapshot(item, cgit_query_sha1, "zip", 71 cgit_print_snapshot(item, cgit_query_head, cgit_query_sha1,
73 cgit_repo->url, cgit_query_name); 72 cgit_repobasename(cgit_repo->url),
73 cgit_query_path,
74 cgit_repo->snapshots );
74 return; 75 return;
75 } 76 }
76 77
@@ -92,22 +93,21 @@ static void cgit_print_repo_page(struct cacheitem *item)
92 93
93 switch(cgit_cmd) { 94 switch(cgit_cmd) {
94 case CMD_LOG: 95 case CMD_LOG:
95 cgit_print_log(cgit_query_head, cgit_query_ofs, 96 cgit_print_log(cgit_query_sha1, cgit_query_ofs,
96 cgit_max_commit_count, cgit_query_search, 97 cgit_max_commit_count, cgit_query_search,
97 cgit_query_path, 1); 98 cgit_query_path, 1);
98 break; 99 break;
99 case CMD_TREE: 100 case CMD_TREE:
100 cgit_print_tree(cgit_query_head, cgit_query_sha1, cgit_query_path); 101 cgit_print_tree(cgit_query_sha1, cgit_query_path);
101 break; 102 break;
102 case CMD_COMMIT: 103 case CMD_COMMIT:
103 cgit_print_commit(cgit_query_head); 104 cgit_print_commit(cgit_query_sha1);
104 break; 105 break;
105 case CMD_VIEW: 106 case CMD_TAG:
106 cgit_print_view(cgit_query_sha1, cgit_query_path); 107 cgit_print_tag(cgit_query_sha1);
107 break; 108 break;
108 case CMD_DIFF: 109 case CMD_DIFF:
109 cgit_print_diff(cgit_query_head, cgit_query_sha1, cgit_query_sha2, 110 cgit_print_diff(cgit_query_sha1, cgit_query_sha2);
110 cgit_query_path);
111 break; 111 break;
112 default: 112 default:
113 cgit_print_error("Invalid request"); 113 cgit_print_error("Invalid request");
@@ -227,6 +227,7 @@ static void cgit_parse_args(int argc, const char **argv)
227int main(int argc, const char **argv) 227int main(int argc, const char **argv)
228{ 228{
229 struct cacheitem item; 229 struct cacheitem item;