author | Lars Hjemli <hjemli@gmail.com> | 2008-02-23 21:45:33 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-03-18 07:13:10 (UTC) |
commit | b1f9b9c1459cb9a30ebf80721aff6ef788d1f891 (patch) (unidiff) | |
tree | 05796a741faef90c12aadd3a5c92b702ec870c48 | |
parent | b88fb016d0209f7041ac7d3b4d2c077318407a4d (diff) | |
download | cgit-b1f9b9c1459cb9a30ebf80721aff6ef788d1f891.zip cgit-b1f9b9c1459cb9a30ebf80721aff6ef788d1f891.tar.gz cgit-b1f9b9c1459cb9a30ebf80721aff6ef788d1f891.tar.bz2 |
Introduce html.h
All html-functions can be quite easily separated from the rest of cgit, so
lets do it; the only issue was html_filemode which uses some git-defined
macros so the function is moved into ui-shared.c::cgit_print_filemode().
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 1 | ||||
-rw-r--r-- | cgit.h | 15 | ||||
-rw-r--r-- | html.c | 31 | ||||
-rw-r--r-- | html.h | 18 | ||||
-rw-r--r-- | shared.c | 2 | ||||
-rw-r--r-- | ui-blob.c | 9 | ||||
-rw-r--r-- | ui-commit.c | 7 | ||||
-rw-r--r-- | ui-diff.c | 2 | ||||
-rw-r--r-- | ui-log.c | 1 | ||||
-rw-r--r-- | ui-patch.c | 1 | ||||
-rw-r--r-- | ui-refs.c | 4 | ||||
-rw-r--r-- | ui-repolist.c | 3 | ||||
-rw-r--r-- | ui-shared.c | 16 | ||||
-rw-r--r-- | ui-snapshot.c | 1 | ||||
-rw-r--r-- | ui-summary.c | 1 | ||||
-rw-r--r-- | ui-tag.c | 2 | ||||
-rw-r--r-- | ui-tree.c | 3 |
17 files changed, 71 insertions, 46 deletions
@@ -282,25 +282,24 @@ static void cgit_parse_args(int argc, const char **argv) | |||
282 | if (!strncmp(argv[i], "--ofs=", 6)) { | 282 | if (!strncmp(argv[i], "--ofs=", 6)) { |
283 | ctx.qry.ofs = atoi(argv[i]+6); | 283 | ctx.qry.ofs = atoi(argv[i]+6); |
284 | } | 284 | } |
285 | } | 285 | } |
286 | } | 286 | } |
287 | 287 | ||
288 | int main(int argc, const char **argv) | 288 | int main(int argc, const char **argv) |
289 | { | 289 | { |
290 | struct cacheitem item; | 290 | struct cacheitem item; |
291 | const char *cgit_config_env = getenv("CGIT_CONFIG"); | 291 | const char *cgit_config_env = getenv("CGIT_CONFIG"); |
292 | 292 | ||
293 | cgit_prepare_context(&ctx); | 293 | cgit_prepare_context(&ctx); |
294 | htmlfd = STDOUT_FILENO; | ||
295 | item.st.st_mtime = time(NULL); | 294 | item.st.st_mtime = time(NULL); |
296 | cgit_repolist.length = 0; | 295 | cgit_repolist.length = 0; |
297 | cgit_repolist.count = 0; | 296 | cgit_repolist.count = 0; |
298 | cgit_repolist.repos = NULL; | 297 | cgit_repolist.repos = NULL; |
299 | 298 | ||
300 | cgit_read_config(cgit_config_env ? cgit_config_env : CGIT_CONFIG, | 299 | cgit_read_config(cgit_config_env ? cgit_config_env : CGIT_CONFIG, |
301 | cgit_global_config_cb); | 300 | cgit_global_config_cb); |
302 | if (getenv("SCRIPT_NAME")) | 301 | if (getenv("SCRIPT_NAME")) |
303 | ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); | 302 | ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME")); |
304 | if (getenv("QUERY_STRING")) | 303 | if (getenv("QUERY_STRING")) |
305 | ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); | 304 | ctx.qry.raw = xstrdup(getenv("QUERY_STRING")); |
306 | cgit_parse_args(argc, argv); | 305 | cgit_parse_args(argc, argv); |
@@ -177,26 +177,24 @@ struct cgit_config { | |||
177 | struct cgit_context { | 177 | struct cgit_context { |
178 | struct cgit_query qry; | 178 | struct cgit_query qry; |
179 | struct cgit_config cfg; | 179 | struct cgit_config cfg; |
180 | struct cgit_repo *repo; | 180 | struct cgit_repo *repo; |
181 | }; | 181 | }; |
182 | 182 | ||
183 | extern const char *cgit_version; | 183 | extern const char *cgit_version; |
184 | 184 | ||
185 | extern struct cgit_repolist cgit_repolist; | 185 | extern struct cgit_repolist cgit_repolist; |
186 | extern struct cgit_context ctx; | 186 | extern struct cgit_context ctx; |
187 | extern int cgit_cmd; | 187 | extern int cgit_cmd; |
188 | 188 | ||
189 | extern int htmlfd; | ||
190 | |||
191 | extern void cgit_prepare_context(struct cgit_context *ctx); | 189 | extern void cgit_prepare_context(struct cgit_context *ctx); |
192 | extern int cgit_get_cmd_index(const char *cmd); | 190 | extern int cgit_get_cmd_index(const char *cmd); |
193 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); | 191 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); |
194 | extern void cgit_global_config_cb(const char *name, const char *value); | 192 | extern void cgit_global_config_cb(const char *name, const char *value); |
195 | extern void cgit_repo_config_cb(const char *name, const char *value); | 193 | extern void cgit_repo_config_cb(const char *name, const char *value); |
196 | extern void cgit_querystring_cb(const char *name, const char *value); | 194 | extern void cgit_querystring_cb(const char *name, const char *value); |
197 | 195 | ||
198 | extern int chk_zero(int result, char *msg); | 196 | extern int chk_zero(int result, char *msg); |
199 | extern int chk_positive(int result, char *msg); | 197 | extern int chk_positive(int result, char *msg); |
200 | extern int chk_non_negative(int result, char *msg); | 198 | extern int chk_non_negative(int result, char *msg); |
201 | 199 | ||
202 | extern int hextoint(char c); | 200 | extern int hextoint(char c); |
@@ -213,36 +211,24 @@ extern void *cgit_free_commitinfo(struct commitinfo *info); | |||
213 | extern int cgit_diff_files(const unsigned char *old_sha1, | 211 | extern int cgit_diff_files(const unsigned char *old_sha1, |
214 | const unsigned char *new_sha1, | 212 | const unsigned char *new_sha1, |
215 | linediff_fn fn); | 213 | linediff_fn fn); |
216 | 214 | ||
217 | extern void cgit_diff_tree(const unsigned char *old_sha1, | 215 | extern void cgit_diff_tree(const unsigned char *old_sha1, |
218 | const unsigned char *new_sha1, | 216 | const unsigned char *new_sha1, |
219 | filepair_fn fn, const char *prefix); | 217 | filepair_fn fn, const char *prefix); |
220 | 218 | ||
221 | extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); | 219 | extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); |
222 | 220 | ||
223 | extern char *fmt(const char *format,...); | 221 | extern char *fmt(const char *format,...); |
224 | 222 | ||
225 | extern void html(const char *txt); | ||
226 | extern void htmlf(const char *format,...); | ||
227 | extern void html_txt(char *txt); | ||
228 | extern void html_ntxt(int len, char *txt); | ||
229 | extern void html_attr(char *txt); | ||
230 | extern void html_hidden(char *name, char *value); | ||
231 | extern void html_option(char *value, char *text, char *selected_value); | ||
232 | extern void html_link_open(char *url, char *title, char *class); | ||
233 | extern void html_link_close(void); | ||
234 | extern void html_filemode(unsigned short mode); | ||
235 | extern int html_include(const char *filename); | ||
236 | |||
237 | extern int cgit_read_config(const char *filename, configfn fn); | 223 | extern int cgit_read_config(const char *filename, configfn fn); |
238 | extern int cgit_parse_query(char *txt, configfn fn); | 224 | extern int cgit_parse_query(char *txt, configfn fn); |
239 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); | 225 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); |
240 | extern struct taginfo *cgit_parse_tag(struct tag *tag); | 226 | extern struct taginfo *cgit_parse_tag(struct tag *tag); |
241 | extern void cgit_parse_url(const char *url); | 227 | extern void cgit_parse_url(const char *url); |
242 | 228 | ||
243 | extern char *cache_safe_filename(const char *unsafe); | 229 | extern char *cache_safe_filename(const char *unsafe); |
244 | extern int cache_lock(struct cacheitem *item); | 230 | extern int cache_lock(struct cacheitem *item); |
245 | extern int cache_unlock(struct cacheitem *item); | 231 | extern int cache_unlock(struct cacheitem *item); |
246 | extern int cache_cancel_lock(struct cacheitem *item); | 232 | extern int cache_cancel_lock(struct cacheitem *item); |
247 | extern int cache_exist(struct cacheitem *item); | 233 | extern int cache_exist(struct cacheitem *item); |
248 | extern int cache_expired(struct cacheitem *item); | 234 | extern int cache_expired(struct cacheitem *item); |
@@ -271,24 +257,25 @@ extern void cgit_diff_link(char *name, char *title, char *class, char *head, | |||
271 | 257 | ||
272 | extern void cgit_object_link(struct object *obj); | 258 | extern void cgit_object_link(struct object *obj); |
273 | 259 | ||
274 | extern void cgit_print_error(char *msg); | 260 | extern void cgit_print_error(char *msg); |
275 | extern void cgit_print_date(time_t secs, char *format); | 261 | extern void cgit_print_date(time_t secs, char *format); |
276 | extern void cgit_print_age(time_t t, time_t max_relative, char *format); | 262 | extern void cgit_print_age(time_t t, time_t max_relative, char *format); |
277 | extern void cgit_print_docstart(char *title, struct cacheitem *item); | 263 | extern void cgit_print_docstart(char *title, struct cacheitem *item); |
278 | extern void cgit_print_docend(); | 264 | extern void cgit_print_docend(); |
279 | extern void cgit_print_pageheader(char *title, int show_search); | 265 | extern void cgit_print_pageheader(char *title, int show_search); |
280 | extern void cgit_print_snapshot_start(const char *mimetype, | 266 | extern void cgit_print_snapshot_start(const char *mimetype, |
281 | const char *filename, | 267 | const char *filename, |
282 | struct cacheitem *item); | 268 | struct cacheitem *item); |
269 | extern void cgit_print_filemode(unsigned short mode); | ||
283 | extern void cgit_print_branches(int maxcount); | 270 | extern void cgit_print_branches(int maxcount); |
284 | extern void cgit_print_tags(int maxcount); | 271 | extern void cgit_print_tags(int maxcount); |
285 | 272 | ||
286 | extern void cgit_print_repolist(struct cacheitem *item); | 273 | extern void cgit_print_repolist(struct cacheitem *item); |
287 | extern void cgit_print_summary(); | 274 | extern void cgit_print_summary(); |
288 | extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, | 275 | extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, |
289 | char *pattern, char *path, int pager); | 276 | char *pattern, char *path, int pager); |
290 | extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path); | 277 | extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path); |
291 | extern void cgit_print_tree(const char *rev, char *path); | 278 | extern void cgit_print_tree(const char *rev, char *path); |
292 | extern void cgit_print_commit(char *hex); | 279 | extern void cgit_print_commit(char *hex); |
293 | extern void cgit_print_refs(); | 280 | extern void cgit_print_refs(); |
294 | extern void cgit_print_tag(char *revname); | 281 | extern void cgit_print_tag(char *revname); |
@@ -1,37 +1,45 @@ | |||
1 | /* html.c: helper functions for html output | 1 | /* html.c: helper functions for html output |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include <unistd.h> |
10 | #include <stdio.h> | ||
11 | #include <stdlib.h> | ||
12 | #include <stdarg.h> | ||
13 | #include <string.h> | ||
14 | |||
15 | int htmlfd = STDOUT_FILENO; | ||
10 | 16 | ||
11 | char *fmt(const char *format, ...) | 17 | char *fmt(const char *format, ...) |
12 | { | 18 | { |
13 | static char buf[8][1024]; | 19 | static char buf[8][1024]; |
14 | static int bufidx; | 20 | static int bufidx; |
15 | int len; | 21 | int len; |
16 | va_list args; | 22 | va_list args; |
17 | 23 | ||
18 | bufidx++; | 24 | bufidx++; |
19 | bufidx &= 7; | 25 | bufidx &= 7; |
20 | 26 | ||
21 | va_start(args, format); | 27 | va_start(args, format); |
22 | len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); | 28 | len = vsnprintf(buf[bufidx], sizeof(buf[bufidx]), format, args); |
23 | va_end(args); | 29 | va_end(args); |
24 | if (len>sizeof(buf[bufidx])) | 30 | if (len>sizeof(buf[bufidx])) { |
25 | die("[html.c] string truncated: %s", format); | 31 | fprintf(stderr, "[html.c] string truncated: %s\n", format); |
32 | exit(1); | ||
33 | } | ||
26 | return buf[bufidx]; | 34 | return buf[bufidx]; |
27 | } | 35 | } |
28 | 36 | ||
29 | void html(const char *txt) | 37 | void html(const char *txt) |
30 | { | 38 | { |
31 | write(htmlfd, txt, strlen(txt)); | 39 | write(htmlfd, txt, strlen(txt)); |
32 | } | 40 | } |
33 | 41 | ||
34 | void htmlf(const char *format, ...) | 42 | void htmlf(const char *format, ...) |
35 | { | 43 | { |
36 | static char buf[65536]; | 44 | static char buf[65536]; |
37 | va_list args; | 45 | va_list args; |
@@ -151,43 +159,28 @@ void html_link_open(char *url, char *title, char *class) | |||
151 | html_attr(class); | 159 | html_attr(class); |
152 | } | 160 | } |
153 | html("'>"); | 161 | html("'>"); |
154 | } | 162 | } |
155 | 163 | ||
156 | void html_link_close(void) | 164 | void html_link_close(void) |
157 | { | 165 | { |
158 | html("</a>"); | 166 | html("</a>"); |
159 | } | 167 | } |
160 | 168 | ||
161 | void html_fileperm(unsigned short mode) | 169 | void html_fileperm(unsigned short mode) |
162 | { | 170 | { |
163 | htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), | 171 | htmlf("%c%c%c", (mode & 4 ? 'r' : '-'), |
164 | (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); | 172 | (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); |
165 | } | 173 | } |
166 | 174 | ||
167 | void html_filemode(unsigned short mode) | ||
168 | { | ||
169 | if (S_ISDIR(mode)) | ||
170 | html("d"); | ||
171 | else if (S_ISLNK(mode)) | ||
172 | html("l"); | ||
173 | else if (S_ISGITLINK(mode)) | ||
174 | html("m"); | ||
175 | else | ||
176 | html("-"); | ||
177 | html_fileperm(mode >> 6); | ||
178 | html_fileperm(mode >> 3); | ||
179 | html_fileperm(mode); | ||
180 | } | ||
181 | |||
182 | int html_include(const char *filename) | 175 | int html_include(const char *filename) |
183 | { | 176 | { |
184 | FILE *f; | 177 | FILE *f; |
185 | char buf[4096]; | 178 | char buf[4096]; |
186 | size_t len; | 179 | size_t len; |
187 | 180 | ||
188 | if (!(f = fopen(filename, "r"))) | 181 | if (!(f = fopen(filename, "r"))) |
189 | return -1; | 182 | return -1; |
190 | while((len = fread(buf, 1, 4096, f)) > 0) | 183 | while((len = fread(buf, 1, 4096, f)) > 0) |
191 | write(htmlfd, buf, len); | 184 | write(htmlfd, buf, len); |
192 | fclose(f); | 185 | fclose(f); |
193 | return 0; | 186 | return 0; |
@@ -0,0 +1,18 @@ | |||
1 | #ifndef HTML_H | ||
2 | #define HTML_H | ||
3 | |||
4 | extern int htmlfd; | ||
5 | |||
6 | extern void html(const char *txt); | ||
7 | extern void htmlf(const char *format,...); | ||
8 | extern void html_txt(char *txt); | ||
9 | extern void html_ntxt(int len, char *txt); | ||
10 | extern void html_attr(char *txt); | ||
11 | extern void html_hidden(char *name, char *value); | ||
12 | extern void html_option(char *value, char *text, char *selected_value); | ||
13 | extern void html_link_open(char *url, char *title, char *class); | ||
14 | extern void html_link_close(void); | ||
15 | extern void html_fileperm(unsigned short mode); | ||
16 | extern int html_include(const char *filename); | ||
17 | |||
18 | #endif /* HTML_H */ | ||
@@ -5,26 +5,24 @@ | |||
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | ||
11 | struct cgit_repolist cgit_repolist; | 11 | struct cgit_repolist cgit_repolist; |
12 | struct cgit_context ctx; | 12 | struct cgit_context ctx; |
13 | int cgit_cmd; | 13 | int cgit_cmd; |
14 | 14 | ||
15 | const char *cgit_version = CGIT_VERSION; | 15 | const char *cgit_version = CGIT_VERSION; |
16 | 16 | ||
17 | int htmlfd = 0; | ||
18 | |||
19 | void cgit_prepare_context(struct cgit_context *ctx) | 17 | void cgit_prepare_context(struct cgit_context *ctx) |
20 | { | 18 | { |
21 | memset(ctx, 0, sizeof(ctx)); | 19 | memset(ctx, 0, sizeof(ctx)); |
22 | ctx->cfg.agefile = "info/web/last-modified"; | 20 | ctx->cfg.agefile = "info/web/last-modified"; |
23 | ctx->cfg.cache_dynamic_ttl = 5; | 21 | ctx->cfg.cache_dynamic_ttl = 5; |
24 | ctx->cfg.cache_max_create_time = 5; | 22 | ctx->cfg.cache_max_create_time = 5; |
25 | ctx->cfg.cache_repo_ttl = 5; | 23 | ctx->cfg.cache_repo_ttl = 5; |
26 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; | 24 | ctx->cfg.cache_root = CGIT_CACHE_ROOT; |
27 | ctx->cfg.cache_root_ttl = 5; | 25 | ctx->cfg.cache_root_ttl = 5; |
28 | ctx->cfg.cache_static_ttl = -1; | 26 | ctx->cfg.cache_static_ttl = -1; |
29 | ctx->cfg.css = "/cgit.css"; | 27 | ctx->cfg.css = "/cgit.css"; |
30 | ctx->cfg.logo = "/git-logo.png"; | 28 | ctx->cfg.logo = "/git-logo.png"; |
@@ -1,13 +1,22 @@ | |||
1 | /* ui-blob.c: show blob content | ||
2 | * | ||
3 | * Copyright (C) 2008 Lars Hjemli | ||
4 | * | ||
5 | * Licensed under GNU General Public License v2 | ||
6 | * (see COPYING for full license text) | ||
7 | */ | ||
8 | |||
1 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
2 | 11 | ||
3 | void cgit_print_blob(struct cacheitem *item, const char *hex, char *path) | 12 | void cgit_print_blob(struct cacheitem *item, const char *hex, char *path) |
4 | { | 13 | { |
5 | 14 | ||
6 | unsigned char sha1[20]; | 15 | unsigned char sha1[20]; |
7 | enum object_type type; | 16 | enum object_type type; |
8 | unsigned char *buf; | 17 | unsigned char *buf; |
9 | unsigned long size; | 18 | unsigned long size; |
10 | 19 | ||
11 | if (get_sha1_hex(hex, sha1)){ | 20 | if (get_sha1_hex(hex, sha1)){ |
12 | cgit_print_error(fmt("Bad hex value: %s", hex)); | 21 | cgit_print_error(fmt("Bad hex value: %s", hex)); |
13 | return; | 22 | return; |
diff --git a/ui-commit.c b/ui-commit.c index 25721ca..ed25824 100644 --- a/ui-commit.c +++ b/ui-commit.c | |||
@@ -1,21 +1,22 @@ | |||
1 | /* ui-commit.c: generate commit view | 1 | /* ui-commit.c: generate commit view |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | static int files, slots; | 12 | static int files, slots; |
12 | static int total_adds, total_rems, max_changes; | 13 | static int total_adds, total_rems, max_changes; |
13 | static int lines_added, lines_removed; | 14 | static int lines_added, lines_removed; |
14 | static char *curr_rev; | 15 | static char *curr_rev; |
15 | 16 | ||
16 | static struct fileinfo { | 17 | static struct fileinfo { |
17 | char status; | 18 | char status; |
18 | unsigned char old_sha1[20]; | 19 | unsigned char old_sha1[20]; |
19 | unsigned char new_sha1[20]; | 20 | unsigned char new_sha1[20]; |
20 | unsigned short old_mode; | 21 | unsigned short old_mode; |
21 | unsigned short new_mode; | 22 | unsigned short new_mode; |
@@ -53,34 +54,34 @@ void print_fileinfo(struct fileinfo *info) | |||
53 | class = "unk"; | 54 | class = "unk"; |
54 | break; | 55 | break; |
55 | case DIFF_STATUS_UNMERGED: | 56 | case DIFF_STATUS_UNMERGED: |
56 | class = "stg"; | 57 | class = "stg"; |
57 | break; | 58 | break; |
58 | default: | 59 | default: |
59 | die("bug: unhandled diff status %c", info->status); | 60 | die("bug: unhandled diff status %c", info->status); |
60 | } | 61 | } |
61 | 62 | ||
62 | html("<tr>"); | 63 | html("<tr>"); |
63 | htmlf("<td class='mode'>"); | 64 | htmlf("<td class='mode'>"); |
64 | if (is_null_sha1(info->new_sha1)) { | 65 | if (is_null_sha1(info->new_sha1)) { |
65 | html_filemode(info->old_mode); | 66 | cgit_print_filemode(info->old_mode); |
66 | } else { | 67 | } else { |
67 | html_filemode(info->new_mode); | 68 | cgit_print_filemode(info->new_mode); |
68 | } | 69 | } |
69 | 70 | ||
70 | if (info->old_mode != info->new_mode && | 71 | if (info->old_mode != info->new_mode && |
71 | !is_null_sha1(info->old_sha1) && | 72 | !is_null_sha1(info->old_sha1) && |
72 | !is_null_sha1(info->new_sha1)) { | 73 | !is_null_sha1(info->new_sha1)) { |
73 | html("<span class='modechange'>["); | 74 | html("<span class='modechange'>["); |
74 | html_filemode(info->old_mode); | 75 | cgit_print_filemode(info->old_mode); |
75 | html("]</span>"); | 76 | html("]</span>"); |
76 | } | 77 | } |
77 | htmlf("</td><td class='%s'>", class); | 78 | htmlf("</td><td class='%s'>", class); |
78 | cgit_diff_link(info->new_path, NULL, NULL, ctx.qry.head, curr_rev, | 79 | cgit_diff_link(info->new_path, NULL, NULL, ctx.qry.head, curr_rev, |
79 | NULL, info->new_path); | 80 | NULL, info->new_path); |
80 | if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) | 81 | if (info->status == DIFF_STATUS_COPIED || info->status == DIFF_STATUS_RENAMED) |
81 | htmlf(" (%s from %s)", | 82 | htmlf(" (%s from %s)", |
82 | info->status == DIFF_STATUS_COPIED ? "copied" : "renamed", | 83 | info->status == DIFF_STATUS_COPIED ? "copied" : "renamed", |
83 | info->old_path); | 84 | info->old_path); |
84 | html("</td><td class='right'>"); | 85 | html("</td><td class='right'>"); |
85 | htmlf("%d", info->added + info->removed); | 86 | htmlf("%d", info->added + info->removed); |
86 | html("</td><td class='graph'>"); | 87 | html("</td><td class='graph'>"); |
@@ -1,22 +1,22 @@ | |||
1 | /* ui-diff.c: show diff between two blobs | 1 | /* ui-diff.c: show diff between two blobs |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | #include "html.h" | |
11 | 11 | ||
12 | unsigned char old_rev_sha1[20]; | 12 | unsigned char old_rev_sha1[20]; |
13 | unsigned char new_rev_sha1[20]; | 13 | unsigned char new_rev_sha1[20]; |
14 | 14 | ||
15 | /* | 15 | /* |
16 | * print a single line returned from xdiff | 16 | * print a single line returned from xdiff |
17 | */ | 17 | */ |
18 | static void print_line(char *line, int len) | 18 | static void print_line(char *line, int len) |
19 | { | 19 | { |
20 | char *class = "ctx"; | 20 | char *class = "ctx"; |
21 | char c = line[len-1]; | 21 | char c = line[len-1]; |
22 | 22 | ||
@@ -1,21 +1,22 @@ | |||
1 | /* ui-log.c: functions for log output | 1 | /* ui-log.c: functions for log output |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | int files, add_lines, rem_lines; | 12 | int files, add_lines, rem_lines; |
12 | 13 | ||
13 | void count_lines(char *line, int size) | 14 | void count_lines(char *line, int size) |
14 | { | 15 | { |
15 | if (size <= 0) | 16 | if (size <= 0) |
16 | return; | 17 | return; |
17 | 18 | ||
18 | if (line[0] == '+') | 19 | if (line[0] == '+') |
19 | add_lines++; | 20 | add_lines++; |
20 | 21 | ||
21 | else if (line[0] == '-') | 22 | else if (line[0] == '-') |
@@ -1,21 +1,22 @@ | |||
1 | /* ui-patch.c: generate patch view | 1 | /* ui-patch.c: generate patch view |
2 | * | 2 | * |
3 | * Copyright (C) 2007 Lars Hjemli | 3 | * Copyright (C) 2007 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | static void print_line(char *line, int len) | 12 | static void print_line(char *line, int len) |
12 | { | 13 | { |
13 | char c = line[len-1]; | 14 | char c = line[len-1]; |
14 | 15 | ||
15 | line[len-1] = '\0'; | 16 | line[len-1] = '\0'; |
16 | htmlf("%s\n", line); | 17 | htmlf("%s\n", line); |
17 | line[len-1] = c; | 18 | line[len-1] = c; |
18 | } | 19 | } |
19 | 20 | ||
20 | static void header(unsigned char *sha1, char *path1, int mode1, | 21 | static void header(unsigned char *sha1, char *path1, int mode1, |
21 | unsigned char *sha2, char *path2, int mode2) | 22 | unsigned char *sha2, char *path2, int mode2) |
@@ -1,24 +1,22 @@ | |||
1 | /* ui-refs.c: browse symbolic refs | 1 | /* ui-refs.c: browse symbolic refs |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | #include "html.h" | |
11 | |||
12 | |||
13 | 11 | ||
14 | void cgit_print_refs() | 12 | void cgit_print_refs() |
15 | { | 13 | { |
16 | 14 | ||
17 | html("<table class='list nowrap'>"); | 15 | html("<table class='list nowrap'>"); |
18 | 16 | ||
19 | if (ctx.qry.path && !strncmp(ctx.qry.path, "heads", 5)) | 17 | if (ctx.qry.path && !strncmp(ctx.qry.path, "heads", 5)) |
20 | cgit_print_branches(0); | 18 | cgit_print_branches(0); |
21 | else if (ctx.qry.path && !strncmp(ctx.qry.path, "tags", 4)) | 19 | else if (ctx.qry.path && !strncmp(ctx.qry.path, "tags", 4)) |
22 | cgit_print_tags(0); | 20 | cgit_print_tags(0); |
23 | else { | 21 | else { |
24 | cgit_print_branches(0); | 22 | cgit_print_branches(0); |
diff --git a/ui-repolist.c b/ui-repolist.c index 5fde174..cd4e41d 100644 --- a/ui-repolist.c +++ b/ui-repolist.c | |||
@@ -1,23 +1,24 @@ | |||
1 | /* ui-repolist.c: functions for generating the repolist page | 1 | /* ui-repolist.c: functions for generating the repolist page |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | ||
10 | #include <time.h> | 9 | #include <time.h> |
11 | 10 | ||
11 | #include "cgit.h" | ||
12 | #include "html.h" | ||
12 | 13 | ||
13 | time_t read_agefile(char *path) | 14 | time_t read_agefile(char *path) |
14 | { | 15 | { |
15 | FILE *f; | 16 | FILE *f; |
16 | static char buf[64], buf2[64]; | 17 | static char buf[64], buf2[64]; |
17 | 18 | ||
18 | if (!(f = fopen(path, "r"))) | 19 | if (!(f = fopen(path, "r"))) |
19 | return -1; | 20 | return -1; |
20 | fgets(buf, sizeof(buf), f); | 21 | fgets(buf, sizeof(buf), f); |
21 | fclose(f); | 22 | fclose(f); |
22 | if (parse_date(buf, buf2, sizeof(buf2))) | 23 | if (parse_date(buf, buf2, sizeof(buf2))) |
23 | return strtoul(buf2, NULL, 10); | 24 | return strtoul(buf2, NULL, 10); |
diff --git a/ui-shared.c b/ui-shared.c index cc1ab8b..2eff79d 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -1,21 +1,22 @@ | |||
1 | /* ui-shared.c: common web output functions | 1 | /* ui-shared.c: common web output functions |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | const char cgit_doctype[] = | 12 | const char cgit_doctype[] = |
12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" | 13 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" |
13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; | 14 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; |
14 | 15 | ||
15 | static char *http_date(time_t t) | 16 | static char *http_date(time_t t) |
16 | { | 17 | { |
17 | static char day[][4] = | 18 | static char day[][4] = |
18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | 19 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; |
19 | static char month[][4] = | 20 | static char month[][4] = |
20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | 21 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", |
21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; | 22 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; |
@@ -558,13 +559,28 @@ void cgit_print_pageheader(char *title, int show_search) | |||
558 | 559 | ||
559 | void cgit_print_snapshot_start(const char *mimetype, const char *filename, | 560 | void cgit_print_snapshot_start(const char *mimetype, const char *filename, |
560 | struct cacheitem *item) | 561 | struct cacheitem *item) |
561 | { | 562 | { |
562 | htmlf("Content-Type: %s\n", mimetype); | 563 | htmlf("Content-Type: %s\n", mimetype); |
563 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); | 564 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); |
564 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | 565 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); |
565 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | 566 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + |
566 | ttl_seconds(item->ttl))); | 567 | ttl_seconds(item->ttl))); |
567 | html("\n"); | 568 | html("\n"); |
568 | } | 569 | } |
569 | 570 | ||
571 | void cgit_print_filemode(unsigned short mode) | ||
572 | { | ||
573 | if (S_ISDIR(mode)) | ||
574 | html("d"); | ||
575 | else if (S_ISLNK(mode)) | ||
576 | html("l"); | ||
577 | else if (S_ISGITLINK(mode)) | ||
578 | html("m"); | ||
579 | else | ||
580 | html("-"); | ||
581 | html_fileperm(mode >> 6); | ||
582 | html_fileperm(mode >> 3); | ||
583 | html_fileperm(mode); | ||
584 | } | ||
585 | |||
570 | /* vim:set sw=8: */ | 586 | /* vim:set sw=8: */ |
diff --git a/ui-snapshot.c b/ui-snapshot.c index dfedd8f..67dbbdd 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c | |||
@@ -1,21 +1,22 @@ | |||
1 | /* ui-snapshot.c: generate snapshot of a commit | 1 | /* ui-snapshot.c: generate snapshot of a commit |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | static int write_compressed_tar_archive(struct archiver_args *args,const char *filter) | 12 | static int write_compressed_tar_archive(struct archiver_args *args,const char *filter) |
12 | { | 13 | { |
13 | int rw[2]; | 14 | int rw[2]; |
14 | pid_t gzpid; | 15 | pid_t gzpid; |
15 | int stdout2; | 16 | int stdout2; |
16 | int status; | 17 | int status; |
17 | int rv; | 18 | int rv; |
18 | 19 | ||
19 | stdout2 = chk_non_negative(dup(STDIN_FILENO), "Preserving STDOUT before compressing"); | 20 | stdout2 = chk_non_negative(dup(STDIN_FILENO), "Preserving STDOUT before compressing"); |
20 | chk_zero(pipe(rw), "Opening pipe from compressor subprocess"); | 21 | chk_zero(pipe(rw), "Opening pipe from compressor subprocess"); |
21 | gzpid = chk_non_negative(fork(), "Forking compressor subprocess"); | 22 | gzpid = chk_non_negative(fork(), "Forking compressor subprocess"); |
diff --git a/ui-summary.c b/ui-summary.c index 3baac08..0afa0a3 100644 --- a/ui-summary.c +++ b/ui-summary.c | |||
@@ -1,21 +1,22 @@ | |||
1 | /* ui-summary.c: functions for generating repo summary page | 1 | /* ui-summary.c: functions for generating repo summary page |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | static int header; | 12 | static int header; |
12 | 13 | ||
13 | static int cmp_age(int age1, int age2) | 14 | static int cmp_age(int age1, int age2) |
14 | { | 15 | { |
15 | if (age1 != 0 && age2 != 0) | 16 | if (age1 != 0 && age2 != 0) |
16 | return age2 - age1; | 17 | return age2 - age1; |
17 | 18 | ||
18 | if (age1 == 0 && age2 == 0) | 19 | if (age1 == 0 && age2 == 0) |
19 | return 0; | 20 | return 0; |
20 | 21 | ||
21 | if (age1 == 0) | 22 | if (age1 == 0) |
@@ -1,22 +1,22 @@ | |||
1 | /* ui-tag.c: display a tag | 1 | /* ui-tag.c: display a tag |
2 | * | 2 | * |
3 | * Copyright (C) 2007 Lars Hjemli | 3 | * Copyright (C) 2007 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | #include "html.h" | |
11 | 11 | ||
12 | static void print_tag_content(char *buf) | 12 | static void print_tag_content(char *buf) |
13 | { | 13 | { |
14 | char *p; | 14 | char *p; |
15 | 15 | ||
16 | if (!buf) | 16 | if (!buf) |
17 | return; | 17 | return; |
18 | 18 | ||
19 | html("<div class='commit-subject'>"); | 19 | html("<div class='commit-subject'>"); |
20 | p = strchr(buf, '\n'); | 20 | p = strchr(buf, '\n'); |
21 | if (p) | 21 | if (p) |
22 | *p = '\0'; | 22 | *p = '\0'; |
@@ -1,21 +1,22 @@ | |||
1 | /* ui-tree.c: functions for tree output | 1 | /* ui-tree.c: functions for tree output |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | ||
10 | 11 | ||
11 | char *curr_rev; | 12 | char *curr_rev; |
12 | char *match_path; | 13 | char *match_path; |
13 | int header = 0; | 14 | int header = 0; |
14 | 15 | ||
15 | static void print_object(const unsigned char *sha1, char *path) | 16 | static void print_object(const unsigned char *sha1, char *path) |
16 | { | 17 | { |
17 | enum object_type type; | 18 | enum object_type type; |
18 | char *buf; | 19 | char *buf; |
19 | unsigned long size, lineno, start, idx; | 20 | unsigned long size, lineno, start, idx; |
20 | const char *linefmt = "<tr><td class='no'><a id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a></td><td class='txt'>"; | 21 | const char *linefmt = "<tr><td class='no'><a id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a></td><td class='txt'>"; |
21 | 22 | ||
@@ -70,25 +71,25 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, | |||
70 | fullpath = fmt("%s%s%s", ctx.qry.path ? ctx.qry.path : "", | 71 | fullpath = fmt("%s%s%s", ctx.qry.path ? ctx.qry.path : "", |
71 | ctx.qry.path ? "/" : "", name); | 72 | ctx.qry.path ? "/" : "", name); |
72 | 73 | ||
73 | type = sha1_object_info(sha1, &size); | 74 | type = sha1_object_info(sha1, &size); |
74 | if (type == OBJ_BAD && !S_ISGITLINK(mode)) { | 75 | if (type == OBJ_BAD && !S_ISGITLINK(mode)) { |
75 | htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", | 76 | htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", |
76 | name, | 77 | name, |
77 | sha1_to_hex(sha1)); | 78 | sha1_to_hex(sha1)); |
78 | return 0; | 79 | return 0; |
79 | } | 80 | } |
80 | 81 | ||
81 | html("<tr><td class='ls-mode'>"); | 82 | html("<tr><td class='ls-mode'>"); |
82 | html_filemode(mode); | 83 | cgit_print_filemode(mode); |
83 | html("</td><td>"); | 84 | html("</td><td>"); |
84 | if (S_ISGITLINK(mode)) { | 85 | if (S_ISGITLINK(mode)) { |
85 | htmlf("<a class='ls-mod' href='"); | 86 | htmlf("<a class='ls-mod' href='"); |
86 | html_attr(fmt(ctx.repo->module_link, | 87 | html_attr(fmt(ctx.repo->module_link, |
87 | name, | 88 | name, |
88 | sha1_to_hex(sha1))); | 89 | sha1_to_hex(sha1))); |
89 | html("'>"); | 90 | html("'>"); |
90 | html_txt(name); | 91 | html_txt(name); |
91 | html("</a>"); | 92 | html("</a>"); |
92 | } else if (S_ISDIR(mode)) { | 93 | } else if (S_ISDIR(mode)) { |
93 | cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, | 94 | cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, |
94 | curr_rev, fullpath); | 95 | curr_rev, fullpath); |