summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-01-13 17:34:37 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-01-13 17:34:37 (UTC)
commit2122c696a34133a616b9ec6d72abe9eb89e728aa (patch) (unidiff)
treefc3c4693f77b04c1eaf549841d5bae46d9801608
parentf39c3c99a12154cdafcdc501a821e3fadd3c0602 (diff)
parentb74cc91574a9284d2f6446fd2ef3df6298ed6992 (diff)
downloadcgit-2122c696a34133a616b9ec6d72abe9eb89e728aa.zip
cgit-2122c696a34133a616b9ec6d72abe9eb89e728aa.tar.gz
cgit-2122c696a34133a616b9ec6d72abe9eb89e728aa.tar.bz2
Merge branch 'stable'
* stable: CGIT 0.7.2 Use GIT-1.5.3.8 Compare string lengths when parsing the snapshot mask Default repo description to "[no description]"
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--Makefile4
m---------git0
-rw-r--r--shared.c2
-rw-r--r--ui-snapshot.c7
4 files changed, 7 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index eed59df..e39be18 100644
--- a/Makefile
+++ b/Makefile
@@ -1,55 +1,55 @@
1CGIT_VERSION = v0.7.1 1CGIT_VERSION = v0.7.2
2CGIT_SCRIPT_NAME = cgit.cgi 2CGIT_SCRIPT_NAME = cgit.cgi
3CGIT_SCRIPT_PATH = /var/www/htdocs/cgit 3CGIT_SCRIPT_PATH = /var/www/htdocs/cgit
4CGIT_CONFIG = /etc/cgitrc 4CGIT_CONFIG = /etc/cgitrc
5CACHE_ROOT = /var/cache/cgit 5CACHE_ROOT = /var/cache/cgit
6SHA1_HEADER = <openssl/sha.h> 6SHA1_HEADER = <openssl/sha.h>
7GIT_VER = 1.5.3.5 7GIT_VER = 1.5.3.8
8GIT_URL = http://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.bz2 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 15
16EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto 16EXTLIBS = git/libgit.a git/xdiff/lib.a -lz -lcrypto
17OBJECTS = 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 \
18 ui-summary.o ui-log.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 \
19 ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o ui-patch.o 19 ui-snapshot.o ui-blob.o ui-tag.o ui-refs.o ui-patch.o
20 20
21 21
22ifdef NEEDS_LIBICONV 22ifdef NEEDS_LIBICONV
23 EXTLIBS += -liconv 23 EXTLIBS += -liconv
24endif 24endif
25 25
26 26
27.PHONY: all git test install clean distclean emptycache force-version get-git 27.PHONY: all git test install clean distclean emptycache force-version get-git
28 28
29all: cgit git 29all: cgit git
30 30
31VERSION: force-version 31VERSION: force-version
32 @./gen-version.sh "$(CGIT_VERSION)" 32 @./gen-version.sh "$(CGIT_VERSION)"
33-include VERSION 33-include VERSION
34 34
35 35
36CFLAGS += -g -Wall -Igit 36CFLAGS += -g -Wall -Igit
37CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)' 37CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER)'
38CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"' 38CFLAGS += -DCGIT_VERSION='"$(CGIT_VERSION)"'
39CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"' 39CFLAGS += -DCGIT_CONFIG='"$(CGIT_CONFIG)"'
40CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"' 40CFLAGS += -DCGIT_SCRIPT_NAME='"$(CGIT_SCRIPT_NAME)"'
41CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"' 41CFLAGS += -DCGIT_CACHE_ROOT='"$(CACHE_ROOT)"'
42 42
43 43
44cgit: cgit.c $(OBJECTS) 44cgit: cgit.c $(OBJECTS)
45 $(CC) $(CFLAGS) cgit.c -o cgit $(OBJECTS) $(EXTLIBS) 45 $(CC) $(CFLAGS) cgit.c -o cgit $(OBJECTS) $(EXTLIBS)
46 46
47$(OBJECTS): cgit.h git/xdiff/lib.a git/libgit.a VERSION 47$(OBJECTS): cgit.h git/xdiff/lib.a git/libgit.a VERSION
48 48
49git/xdiff/lib.a: | git 49git/xdiff/lib.a: | git
50 50
51git/libgit.a: | git 51git/libgit.a: | git
52 52
53git: 53git:
54 cd git && $(MAKE) xdiff/lib.a 54 cd git && $(MAKE) xdiff/lib.a
55 cd git && $(MAKE) libgit.a 55 cd git && $(MAKE) libgit.a
diff --git a/git b/git
Subproject 3f2a7ae2c84c921e11041a5edc2522964fc1cce Subproject aadd4efa715f56e0eac5ac459c8ff4933b56d4c
diff --git a/shared.c b/shared.c
index 9c992c8..bf0581f 100644
--- a/shared.c
+++ b/shared.c
@@ -73,97 +73,97 @@ int cgit_get_cmd_index(const char *cmd)
73 "snapshot", "tag", "refs", "patch", NULL}; 73 "snapshot", "tag", "refs", "patch", NULL};
74 int i; 74 int i;
75 75
76 for(i = 0; cmds[i]; i++) 76 for(i = 0; cmds[i]; i++)
77 if (!strcmp(cmd, cmds[i])) 77 if (!strcmp(cmd, cmds[i]))
78 return i + 1; 78 return i + 1;
79 return 0; 79 return 0;
80} 80}
81 81
82int chk_zero(int result, char *msg) 82int chk_zero(int result, char *msg)
83{ 83{
84 if (result != 0) 84 if (result != 0)
85 die("%s: %s", msg, strerror(errno)); 85 die("%s: %s", msg, strerror(errno));
86 return result; 86 return result;
87} 87}
88 88
89int chk_positive(int result, char *msg) 89int chk_positive(int result, char *msg)
90{ 90{
91 if (result <= 0) 91 if (result <= 0)
92 die("%s: %s", msg, strerror(errno)); 92 die("%s: %s", msg, strerror(errno));
93 return result; 93 return result;
94} 94}
95 95
96int chk_non_negative(int result, char *msg) 96int chk_non_negative(int result, char *msg)
97{ 97{
98 if (result < 0) 98 if (result < 0)
99 die("%s: %s",msg, strerror(errno)); 99 die("%s: %s",msg, strerror(errno));
100 return result; 100 return result;
101} 101}
102 102
103struct repoinfo *add_repo(const char *url) 103struct repoinfo *add_repo(const char *url)
104{ 104{
105 struct repoinfo *ret; 105 struct repoinfo *ret;
106 106
107 if (++cgit_repolist.count > cgit_repolist.length) { 107 if (++cgit_repolist.count > cgit_repolist.length) {
108 if (cgit_repolist.length == 0) 108 if (cgit_repolist.length == 0)
109 cgit_repolist.length = 8; 109 cgit_repolist.length = 8;
110 else 110 else
111 cgit_repolist.length *= 2; 111 cgit_repolist.length *= 2;
112 cgit_repolist.repos = xrealloc(cgit_repolist.repos, 112 cgit_repolist.repos = xrealloc(cgit_repolist.repos,
113 cgit_repolist.length * 113 cgit_repolist.length *
114 sizeof(struct repoinfo)); 114 sizeof(struct repoinfo));
115 } 115 }
116 116
117 ret = &cgit_repolist.repos[cgit_repolist.count-1]; 117 ret = &cgit_repolist.repos[cgit_repolist.count-1];
118 ret->url = trim_end(url, '/'); 118 ret->url = trim_end(url, '/');
119 ret->name = ret->url; 119 ret->name = ret->url;
120 ret->path = NULL; 120 ret->path = NULL;
121 ret->desc = NULL; 121 ret->desc = "[no description]";
122 ret->owner = NULL; 122 ret->owner = NULL;
123 ret->group = cgit_repo_group; 123 ret->group = cgit_repo_group;
124 ret->defbranch = "master"; 124 ret->defbranch = "master";
125 ret->snapshots = cgit_snapshots; 125 ret->snapshots = cgit_snapshots;
126 ret->enable_log_filecount = cgit_enable_log_filecount; 126 ret->enable_log_filecount = cgit_enable_log_filecount;
127 ret->enable_log_linecount = cgit_enable_log_linecount; 127 ret->enable_log_linecount = cgit_enable_log_linecount;
128 ret->module_link = cgit_module_link; 128 ret->module_link = cgit_module_link;
129 ret->readme = NULL; 129 ret->readme = NULL;
130 return ret; 130 return ret;
131} 131}
132 132
133struct repoinfo *cgit_get_repoinfo(const char *url) 133struct repoinfo *cgit_get_repoinfo(const char *url)
134{ 134{
135 int i; 135 int i;
136 struct repoinfo *repo; 136 struct repoinfo *repo;
137 137
138 for (i=0; i<cgit_repolist.count; i++) { 138 for (i=0; i<cgit_repolist.count; i++) {
139 repo = &cgit_repolist.repos[i]; 139 repo = &cgit_repolist.repos[i];
140 if (!strcmp(repo->url, url)) 140 if (!strcmp(repo->url, url))
141 return repo; 141 return repo;
142 } 142 }
143 return NULL; 143 return NULL;
144} 144}
145 145
146void cgit_global_config_cb(const char *name, const char *value) 146void cgit_global_config_cb(const char *name, const char *value)
147{ 147{
148 if (!strcmp(name, "root-title")) 148 if (!strcmp(name, "root-title"))
149 cgit_root_title = xstrdup(value); 149 cgit_root_title = xstrdup(value);
150 else if (!strcmp(name, "css")) 150 else if (!strcmp(name, "css"))
151 cgit_css = xstrdup(value); 151 cgit_css = xstrdup(value);
152 else if (!strcmp(name, "logo")) 152 else if (!strcmp(name, "logo"))
153 cgit_logo = xstrdup(value); 153 cgit_logo = xstrdup(value);
154 else if (!strcmp(name, "index-header")) 154 else if (!strcmp(name, "index-header"))
155 cgit_index_header = xstrdup(value); 155 cgit_index_header = xstrdup(value);
156 else if (!strcmp(name, "index-info")) 156 else if (!strcmp(name, "index-info"))
157 cgit_index_info = xstrdup(value); 157 cgit_index_info = xstrdup(value);
158 else if (!strcmp(name, "logo-link")) 158 else if (!strcmp(name, "logo-link"))
159 cgit_logo_link = xstrdup(value); 159 cgit_logo_link = xstrdup(value);
160 else if (!strcmp(name, "module-link")) 160 else if (!strcmp(name, "module-link"))
161 cgit_module_link = xstrdup(value); 161 cgit_module_link = xstrdup(value);
162 else if (!strcmp(name, "virtual-root")) { 162 else if (!strcmp(name, "virtual-root")) {
163 cgit_virtual_root = trim_end(value, '/'); 163 cgit_virtual_root = trim_end(value, '/');
164 if (!cgit_virtual_root && (!strcmp(value, "/"))) 164 if (!cgit_virtual_root && (!strcmp(value, "/")))
165 cgit_virtual_root = ""; 165 cgit_virtual_root = "";
166 } else if (!strcmp(name, "nocache")) 166 } else if (!strcmp(name, "nocache"))
167 cgit_nocache = atoi(value); 167 cgit_nocache = atoi(value);
168 else if (!strcmp(name, "snapshots")) 168 else if (!strcmp(name, "snapshots"))
169 cgit_snapshots = cgit_parse_snapshots_mask(value); 169 cgit_snapshots = cgit_parse_snapshots_mask(value);
diff --git a/ui-snapshot.c b/ui-snapshot.c
index 4d1aa88..dfedd8f 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -85,72 +85,73 @@ void cgit_print_snapshot(struct cacheitem *item, const char *head,
85 sl = strlen(sat->suffix); 85 sl = strlen(sat->suffix);
86 if(fnl<sl || strcmp(&filename[fnl-sl],sat->suffix)) 86 if(fnl<sl || strcmp(&filename[fnl-sl],sat->suffix))
87 continue; 87 continue;
88 if (!hex) 88 if (!hex)
89 hex = head; 89 hex = head;
90 if(get_sha1(hex, sha1)) { 90 if(get_sha1(hex, sha1)) {
91 cgit_print_error(fmt("Bad object id: %s", hex)); 91 cgit_print_error(fmt("Bad object id: %s", hex));
92 return; 92 return;
93 } 93 }
94 commit = lookup_commit_reference(sha1); 94 commit = lookup_commit_reference(sha1);
95 if(!commit) { 95 if(!commit) {
96 cgit_print_error(fmt("Not a commit reference: %s", hex)); 96 cgit_print_error(fmt("Not a commit reference: %s", hex));
97 return;; 97 return;;
98 } 98 }
99 memset(&args,0,sizeof(args)); 99 memset(&args,0,sizeof(args));
100 args.base = fmt("%s/", prefix); 100 args.base = fmt("%s/", prefix);
101 args.tree = commit->tree; 101 args.tree = commit->tree;
102 args.time = commit->date; 102 args.time = commit->date;
103 cgit_print_snapshot_start(sat->mimetype, filename, item); 103 cgit_print_snapshot_start(sat->mimetype, filename, item);
104 (*sat->write_func)(&args); 104 (*sat->write_func)(&args);
105 return; 105 return;
106 } 106 }
107 cgit_print_error(fmt("Unsupported snapshot format: %s", filename)); 107 cgit_print_error(fmt("Unsupported snapshot format: %s", filename));
108} 108}
109 109
110void cgit_print_snapshot_links(const char *repo, const char *head, 110void cgit_print_snapshot_links(const char *repo, const char *head,
111 const char *hex, int snapshots) 111 const char *hex, int snapshots)
112{ 112{
113 const struct snapshot_archive_t* sat; 113 const struct snapshot_archive_t* sat;
114 char *filename; 114 char *filename;
115 int f; 115 int f;
116 116
117 for(f=0; f<snapshot_archives_len; f++) { 117 for(f=0; f<snapshot_archives_len; f++) {
118 sat = &snapshot_archives[f]; 118 sat = &snapshot_archives[f];
119 if(!(snapshots & sat->bit)) 119 if(!(snapshots & sat->bit))
120 continue; 120 continue;
121 filename = fmt("%s-%s%s", cgit_repobasename(repo), hex, 121 filename = fmt("%s-%s%s", cgit_repobasename(repo), hex,
122 sat->suffix); 122 sat->suffix);
123 cgit_snapshot_link(filename, NULL, NULL, (char *)head, 123 cgit_snapshot_link(filename, NULL, NULL, (char *)head,
124 (char *)hex, filename); 124 (char *)hex, filename);
125 html("<br/>"); 125 html("<br/>");
126 } 126 }
127} 127}
128 128
129int cgit_parse_snapshots_mask(const char *str) 129int cgit_parse_snapshots_mask(const char *str)
130{ 130{
131 const struct snapshot_archive_t* sat; 131 const struct snapshot_archive_t* sat;
132 static const char *delim = " \t,:/|;"; 132 static const char *delim = " \t,:/|;";
133 int f, tl, rv = 0; 133 int f, tl, sl, rv = 0;
134 134
135 /* favor legacy setting */ 135 /* favor legacy setting */
136 if(atoi(str)) 136 if(atoi(str))
137 return 1; 137 return 1;
138 for(;;) { 138 for(;;) {
139 str += strspn(str,delim); 139 str += strspn(str,delim);
140 tl = strcspn(str,delim); 140 tl = strcspn(str,delim);
141 if(!tl) 141 if(!tl)
142 break; 142 break;
143 for(f=0; f<snapshot_archives_len; f++) { 143 for(f=0; f<snapshot_archives_len; f++) {
144 sat = &snapshot_archives[f]; 144 sat = &snapshot_archives[f];
145 if(!(strncmp(sat->suffix, str, tl) && 145 sl = strlen(sat->suffix);
146 strncmp(sat->suffix+1, str, tl-1))) { 146 if((tl == sl && !strncmp(sat->suffix, str, tl)) ||
147 (tl == sl-1 && !strncmp(sat->suffix+1, str, tl-1))) {
147 rv |= sat->bit; 148 rv |= sat->bit;
148 break; 149 break;
149 } 150 }
150 } 151 }
151 str += tl; 152 str += tl;
152 } 153 }
153 return rv; 154 return rv;
154} 155}
155 156
156/* vim:set sw=8: */ 157/* vim:set sw=8: */