author | Lars Hjemli <hjemli@gmail.com> | 2006-12-15 23:33:28 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-15 23:33:28 (UTC) |
commit | 148fb9622c6a96021e572d1a372e38896506031f (patch) (unidiff) | |
tree | 2bfde276f3fed3b3a42afbdd90a64c98d0502ae3 | |
parent | 9a8f88658d51aeb86a79ac1121de13562ad2601f (diff) | |
download | cgit-148fb9622c6a96021e572d1a372e38896506031f.zip cgit-148fb9622c6a96021e572d1a372e38896506031f.tar.gz cgit-148fb9622c6a96021e572d1a372e38896506031f.tar.bz2 |
Move cgit_print_date into ui-shared, reuse in ui-summary
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 1 | ||||
-rw-r--r-- | ui-commit.c | 11 | ||||
-rw-r--r-- | ui-shared.c | 12 | ||||
-rw-r--r-- | ui-summary.c | 20 |
4 files changed, 24 insertions, 20 deletions
@@ -40,60 +40,61 @@ extern int cgit_cache_dynamic_ttl; | |||
40 | extern int cgit_cache_static_ttl; | 40 | extern int cgit_cache_static_ttl; |
41 | extern int cgit_cache_max_create_time; | 41 | extern int cgit_cache_max_create_time; |
42 | 42 | ||
43 | extern char *cgit_repo_name; | 43 | extern char *cgit_repo_name; |
44 | extern char *cgit_repo_desc; | 44 | extern char *cgit_repo_desc; |
45 | extern char *cgit_repo_owner; | 45 | extern char *cgit_repo_owner; |
46 | 46 | ||
47 | extern int cgit_query_has_symref; | 47 | extern int cgit_query_has_symref; |
48 | extern int cgit_query_has_sha1; | 48 | extern int cgit_query_has_sha1; |
49 | 49 | ||
50 | extern char *cgit_querystring; | 50 | extern char *cgit_querystring; |
51 | extern char *cgit_query_repo; | 51 | extern char *cgit_query_repo; |
52 | extern char *cgit_query_page; | 52 | extern char *cgit_query_page; |
53 | extern char *cgit_query_head; | 53 | extern char *cgit_query_head; |
54 | extern char *cgit_query_sha1; | 54 | extern char *cgit_query_sha1; |
55 | extern int cgit_query_ofs; | 55 | extern int cgit_query_ofs; |
56 | 56 | ||
57 | extern int htmlfd; | 57 | extern int htmlfd; |
58 | 58 | ||
59 | extern void cgit_global_config_cb(const char *name, const char *value); | 59 | extern void cgit_global_config_cb(const char *name, const char *value); |
60 | extern void cgit_repo_config_cb(const char *name, const char *value); | 60 | extern void cgit_repo_config_cb(const char *name, const char *value); |
61 | extern void cgit_querystring_cb(const char *name, const char *value); | 61 | extern void cgit_querystring_cb(const char *name, const char *value); |
62 | 62 | ||
63 | extern char *fmt(const char *format,...); | 63 | extern char *fmt(const char *format,...); |
64 | 64 | ||
65 | extern void html(const char *txt); | 65 | extern void html(const char *txt); |
66 | extern void htmlf(const char *format,...); | 66 | extern void htmlf(const char *format,...); |
67 | extern void html_txt(char *txt); | 67 | extern void html_txt(char *txt); |
68 | extern void html_attr(char *txt); | 68 | extern void html_attr(char *txt); |
69 | extern void html_link_open(char *url, char *title, char *class); | 69 | extern void html_link_open(char *url, char *title, char *class); |
70 | extern void html_link_close(void); | 70 | extern void html_link_close(void); |
71 | 71 | ||
72 | extern int cgit_read_config(const char *filename, configfn fn); | 72 | extern int cgit_read_config(const char *filename, configfn fn); |
73 | extern int cgit_parse_query(char *txt, configfn fn); | 73 | extern int cgit_parse_query(char *txt, configfn fn); |
74 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); | 74 | extern struct commitinfo *cgit_parse_commit(struct commit *commit); |
75 | 75 | ||
76 | extern void cache_prepare(struct cacheitem *item); | 76 | extern void cache_prepare(struct cacheitem *item); |
77 | extern int cache_lock(struct cacheitem *item); | 77 | extern int cache_lock(struct cacheitem *item); |
78 | extern int cache_unlock(struct cacheitem *item); | 78 | extern int cache_unlock(struct cacheitem *item); |
79 | extern int cache_cancel_lock(struct cacheitem *item); | 79 | extern int cache_cancel_lock(struct cacheitem *item); |
80 | extern int cache_exist(struct cacheitem *item); | 80 | extern int cache_exist(struct cacheitem *item); |
81 | extern int cache_expired(struct cacheitem *item); | 81 | extern int cache_expired(struct cacheitem *item); |
82 | 82 | ||
83 | extern char *cgit_repourl(const char *reponame); | 83 | extern char *cgit_repourl(const char *reponame); |
84 | extern char *cgit_pageurl(const char *reponame, const char *pagename, | 84 | extern char *cgit_pageurl(const char *reponame, const char *pagename, |
85 | const char *query); | 85 | const char *query); |
86 | 86 | ||
87 | extern void cgit_print_error(char *msg); | 87 | extern void cgit_print_error(char *msg); |
88 | extern void cgit_print_date(unsigned long secs); | ||
88 | extern void cgit_print_docstart(char *title, struct cacheitem *item); | 89 | extern void cgit_print_docstart(char *title, struct cacheitem *item); |
89 | extern void cgit_print_docend(); | 90 | extern void cgit_print_docend(); |
90 | extern void cgit_print_pageheader(char *title); | 91 | extern void cgit_print_pageheader(char *title); |
91 | 92 | ||
92 | extern void cgit_print_repolist(struct cacheitem *item); | 93 | extern void cgit_print_repolist(struct cacheitem *item); |
93 | extern void cgit_print_summary(); | 94 | extern void cgit_print_summary(); |
94 | extern void cgit_print_log(const char *tip, int ofs, int cnt); | 95 | extern void cgit_print_log(const char *tip, int ofs, int cnt); |
95 | extern void cgit_print_view(const char *hex); | 96 | extern void cgit_print_view(const char *hex); |
96 | extern void cgit_print_tree(const char *hex); | 97 | extern void cgit_print_tree(const char *hex); |
97 | extern void cgit_print_commit(const char *hex); | 98 | extern void cgit_print_commit(const char *hex); |
98 | 99 | ||
99 | #endif /* CGIT_H */ | 100 | #endif /* CGIT_H */ |
diff --git a/ui-commit.c b/ui-commit.c index 1c0e7e5..2d38f0b 100644 --- a/ui-commit.c +++ b/ui-commit.c | |||
@@ -1,61 +1,50 @@ | |||
1 | #include "cgit.h" | 1 | #include "cgit.h" |
2 | 2 | ||
3 | void cgit_print_date(unsigned long secs) | ||
4 | { | ||
5 | char buf[32]; | ||
6 | struct tm *time; | ||
7 | |||
8 | time = gmtime(&secs); | ||
9 | strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); | ||
10 | html_txt(buf); | ||
11 | |||
12 | } | ||
13 | |||
14 | void cgit_print_commit(const char *hex) | 3 | void cgit_print_commit(const char *hex) |
15 | { | 4 | { |
16 | struct commit *commit; | 5 | struct commit *commit; |
17 | struct commitinfo *info; | 6 | struct commitinfo *info; |
18 | struct commit_list *p; | 7 | struct commit_list *p; |
19 | unsigned long size; | 8 | unsigned long size; |
20 | char type[20]; | 9 | char type[20]; |
21 | char *buf; | 10 | char *buf; |
22 | 11 | ||
23 | unsigned char sha1[20]; | 12 | unsigned char sha1[20]; |
24 | 13 | ||
25 | if (get_sha1(hex, sha1)) { | 14 | if (get_sha1(hex, sha1)) { |
26 | cgit_print_error(fmt("Bad object id: %s", hex)); | 15 | cgit_print_error(fmt("Bad object id: %s", hex)); |
27 | return; | 16 | return; |
28 | } | 17 | } |
29 | 18 | ||
30 | buf = read_sha1_file(sha1, type, &size); | 19 | buf = read_sha1_file(sha1, type, &size); |
31 | if (!buf) { | 20 | if (!buf) { |
32 | cgit_print_error(fmt("Bad object reference: %s", hex)); | 21 | cgit_print_error(fmt("Bad object reference: %s", hex)); |
33 | return; | 22 | return; |
34 | } | 23 | } |
35 | 24 | ||
36 | commit = lookup_commit(sha1); | 25 | commit = lookup_commit(sha1); |
37 | if (!commit) { | 26 | if (!commit) { |
38 | cgit_print_error(fmt("Bad commit reference: %s", hex)); | 27 | cgit_print_error(fmt("Bad commit reference: %s", hex)); |
39 | return; | 28 | return; |
40 | } | 29 | } |
41 | 30 | ||
42 | commit->buffer = buf; | 31 | commit->buffer = buf; |
43 | if (parse_commit_buffer(commit, buf, size)) { | 32 | if (parse_commit_buffer(commit, buf, size)) { |
44 | cgit_print_error(fmt("Malformed commit buffer: %s", hex)); | 33 | cgit_print_error(fmt("Malformed commit buffer: %s", hex)); |
45 | return; | 34 | return; |
46 | } | 35 | } |
47 | 36 | ||
48 | info = cgit_parse_commit(commit); | 37 | info = cgit_parse_commit(commit); |
49 | 38 | ||
50 | html("<table class='commit-info'>\n"); | 39 | html("<table class='commit-info'>\n"); |
51 | html("<tr><th>author</th><td colspan='2'>"); | 40 | html("<tr><th>author</th><td colspan='2'>"); |
52 | html_txt(info->author); | 41 | html_txt(info->author); |
53 | html("</td></tr>\n"); | 42 | html("</td></tr>\n"); |
54 | html("<tr><th>committer</th><td>"); | 43 | html("<tr><th>committer</th><td>"); |
55 | html_txt(info->committer); | 44 | html_txt(info->committer); |
56 | html("</td><td class='right'>"); | 45 | html("</td><td class='right'>"); |
57 | cgit_print_date(commit->date); | 46 | cgit_print_date(commit->date); |
58 | html("</td></tr>\n"); | 47 | html("</td></tr>\n"); |
59 | html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='"); | 48 | html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='"); |
60 | html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("id=%s", sha1_to_hex(commit->tree->object.sha1)))); | 49 | html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("id=%s", sha1_to_hex(commit->tree->object.sha1)))); |
61 | htmlf("'>%s</a></td></tr>\n", sha1_to_hex(commit->tree->object.sha1)); | 50 | htmlf("'>%s</a></td></tr>\n", sha1_to_hex(commit->tree->object.sha1)); |
diff --git a/ui-shared.c b/ui-shared.c index cb8a8df..1a6c127 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -15,83 +15,95 @@ const char cgit_doctype[] = | |||
15 | static char *http_date(time_t t) | 15 | static char *http_date(time_t t) |
16 | { | 16 | { |
17 | static char day[][4] = | 17 | static char day[][4] = |
18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | 18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; |
19 | static char month[][4] = | 19 | static char month[][4] = |
20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | 20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", |
21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; | 21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; |
22 | struct tm *tm = gmtime(&t); | 22 | struct tm *tm = gmtime(&t); |
23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], | 23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], |
24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, | 24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, |
25 | tm->tm_hour, tm->tm_min, tm->tm_sec); | 25 | tm->tm_hour, tm->tm_min, tm->tm_sec); |
26 | } | 26 | } |
27 | 27 | ||
28 | static int ttl_seconds(int ttl) | 28 | static int ttl_seconds(int ttl) |
29 | { | 29 | { |
30 | if (ttl<0) | 30 | if (ttl<0) |
31 | return 60 * 60 * 24 * 365; | 31 | return 60 * 60 * 24 * 365; |
32 | else | 32 | else |
33 | return ttl * 60; | 33 | return ttl * 60; |
34 | } | 34 | } |
35 | 35 | ||
36 | void cgit_print_error(char *msg) | 36 | void cgit_print_error(char *msg) |
37 | { | 37 | { |
38 | html("<div class='error'>"); | 38 | html("<div class='error'>"); |
39 | html_txt(msg); | 39 | html_txt(msg); |
40 | html("</div>\n"); | 40 | html("</div>\n"); |
41 | } | 41 | } |
42 | 42 | ||
43 | char *cgit_repourl(const char *reponame) | 43 | char *cgit_repourl(const char *reponame) |
44 | { | 44 | { |
45 | if (cgit_virtual_root) { | 45 | if (cgit_virtual_root) { |
46 | return fmt("%s/%s/", cgit_virtual_root, reponame); | 46 | return fmt("%s/%s/", cgit_virtual_root, reponame); |
47 | } else { | 47 | } else { |
48 | return fmt("?r=%s", reponame); | 48 | return fmt("?r=%s", reponame); |
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
52 | char *cgit_pageurl(const char *reponame, const char *pagename, | 52 | char *cgit_pageurl(const char *reponame, const char *pagename, |
53 | const char *query) | 53 | const char *query) |
54 | { | 54 | { |
55 | if (cgit_virtual_root) { | 55 | if (cgit_virtual_root) { |
56 | return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, | 56 | return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, |
57 | pagename, query); | 57 | pagename, query); |
58 | } else { | 58 | } else { |
59 | return fmt("?r=%s&p=%s&%s", reponame, pagename, query); | 59 | return fmt("?r=%s&p=%s&%s", reponame, pagename, query); |
60 | } | 60 | } |
61 | } | 61 | } |
62 | 62 | ||
63 | |||
64 | void cgit_print_date(unsigned long secs) | ||
65 | { | ||
66 | char buf[32]; | ||
67 | struct tm *time; | ||
68 | |||
69 | time = gmtime(&secs); | ||
70 | strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); | ||
71 | html_txt(buf); | ||
72 | |||
73 | } | ||
74 | |||
63 | void cgit_print_docstart(char *title, struct cacheitem *item) | 75 | void cgit_print_docstart(char *title, struct cacheitem *item) |
64 | { | 76 | { |
65 | html("Content-Type: text/html; charset=utf-8\n"); | 77 | html("Content-Type: text/html; charset=utf-8\n"); |
66 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | 78 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); |
67 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | 79 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + |
68 | ttl_seconds(item->ttl))); | 80 | ttl_seconds(item->ttl))); |
69 | html("\n"); | 81 | html("\n"); |
70 | html(cgit_doctype); | 82 | html(cgit_doctype); |
71 | html("<html>\n"); | 83 | html("<html>\n"); |
72 | html("<head>\n"); | 84 | html("<head>\n"); |
73 | html("<title>"); | 85 | html("<title>"); |
74 | html_txt(title); | 86 | html_txt(title); |
75 | html("</title>\n"); | 87 | html("</title>\n"); |
76 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); | 88 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); |
77 | html("<link rel='stylesheet' type='text/css' href='"); | 89 | html("<link rel='stylesheet' type='text/css' href='"); |
78 | html_attr(cgit_css); | 90 | html_attr(cgit_css); |
79 | html("'/>\n"); | 91 | html("'/>\n"); |
80 | html("</head>\n"); | 92 | html("</head>\n"); |
81 | html("<body>\n"); | 93 | html("<body>\n"); |
82 | } | 94 | } |
83 | 95 | ||
84 | void cgit_print_docend() | 96 | void cgit_print_docend() |
85 | { | 97 | { |
86 | html("</body>\n</html>\n"); | 98 | html("</body>\n</html>\n"); |
87 | } | 99 | } |
88 | 100 | ||
89 | void cgit_print_pageheader(char *title) | 101 | void cgit_print_pageheader(char *title) |
90 | { | 102 | { |
91 | html("<div id='header'>"); | 103 | html("<div id='header'>"); |
92 | htmlf("<a href='%s'>", cgit_logo_link); | 104 | htmlf("<a href='%s'>", cgit_logo_link); |
93 | htmlf("<img id='logo' src='%s'/>\n", cgit_logo); | 105 | htmlf("<img id='logo' src='%s'/>\n", cgit_logo); |
94 | htmlf("</a>"); | 106 | htmlf("</a>"); |
95 | html_txt(title); | 107 | html_txt(title); |
96 | html("</div>"); | 108 | html("</div>"); |
97 | } | 109 | } |
diff --git a/ui-summary.c b/ui-summary.c index 46814dd..8ff3642 100644 --- a/ui-summary.c +++ b/ui-summary.c | |||
@@ -1,60 +1,62 @@ | |||
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 | 10 | ||
11 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, | 11 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, |
12 | int flags, void *cb_data) | 12 | int flags, void *cb_data) |
13 | { | 13 | { |
14 | struct commit *commit; | 14 | struct commit *commit; |
15 | struct commitinfo *info; | ||
15 | char buf[256], *url; | 16 | char buf[256], *url; |
16 | 17 | ||
17 | commit = lookup_commit(sha1); | 18 | commit = lookup_commit(sha1); |
18 | if (commit && !parse_commit(commit)){ | 19 | if (commit && !parse_commit(commit)){ |
20 | info = cgit_parse_commit(commit); | ||
19 | html("<tr><td>"); | 21 | html("<tr><td>"); |
20 | url = cgit_pageurl(cgit_query_repo, "log", | 22 | url = cgit_pageurl(cgit_query_repo, "log", |
21 | fmt("h=%s", refname)); | 23 | fmt("h=%s", refname)); |
22 | html_link_open(url, NULL, NULL); | 24 | html_link_open(url, NULL, NULL); |
23 | strncpy(buf, refname, sizeof(buf)); | 25 | strncpy(buf, refname, sizeof(buf)); |
24 | html_txt(buf); | 26 | html_txt(buf); |
25 | html_link_close(); | 27 | html_link_close(); |
26 | html("</td><td>"); | 28 | html("</td><td>"); |
27 | pretty_print_commit(CMIT_FMT_ONELINE, commit, ~0, buf, | 29 | cgit_print_date(commit->date); |
28 | sizeof(buf), 0, NULL, NULL, 0); | 30 | html("</td><td>"); |
29 | html_txt(buf); | 31 | url = cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(sha1))); |
30 | html("</td><td><a href='"); | 32 | html_link_open(url, NULL, NULL); |
31 | html_attr(cgit_pageurl(cgit_query_repo, "tree", | 33 | html_txt(info->subject); |
32 | fmt("id=%s", | 34 | html_link_close(); |
33 | sha1_to_hex(commit->tree->object.sha1)))); | 35 | html("</td><td>"); |
34 | html("'>tree</a>"); | 36 | html_txt(info->author); |
35 | html("</td></tr>\n"); | 37 | html("</td></tr>\n"); |
36 | } else { | 38 | } else { |
37 | html("<tr><td>"); | 39 | html("<tr><td>"); |
38 | html_txt(buf); | 40 | html_txt(buf); |
39 | html("</td><td>"); | 41 | html("</td><td>"); |
40 | htmlf("*** bad ref %s", sha1_to_hex(sha1)); | 42 | htmlf("*** bad ref %s", sha1_to_hex(sha1)); |
41 | html("</td></tr>\n"); | 43 | html("</td></tr>\n"); |
42 | } | 44 | } |
43 | return 0; | 45 | return 0; |
44 | } | 46 | } |
45 | 47 | ||
46 | static void cgit_print_branches() | 48 | static void cgit_print_branches() |
47 | { | 49 | { |
48 | html("<table class='list'>"); | 50 | html("<table class='list'>"); |
49 | html("<tr><th>Branch</th><th>Last commit</th><th>Link</th></tr>\n"); | 51 | html("<tr><th class='left'>Branch</th><th class='left'>Updated</th><th class='left'>Commit subject</th><th class='left'>Author</th></tr>\n"); |
50 | for_each_branch_ref(cgit_print_branch_cb, NULL); | 52 | for_each_branch_ref(cgit_print_branch_cb, NULL); |
51 | html("</table>"); | 53 | html("</table>"); |
52 | } | 54 | } |
53 | 55 | ||
54 | void cgit_print_summary() | 56 | void cgit_print_summary() |
55 | { | 57 | { |
56 | html("<h2>"); | 58 | html("<h2>"); |
57 | html_txt("Repo summary page"); | 59 | html_txt("Repo summary page"); |
58 | html("</h2>"); | 60 | html("</h2>"); |
59 | cgit_print_branches(); | 61 | cgit_print_branches(); |
60 | } | 62 | } |