diff options
author | John Keeping | 2014-08-01 22:14:17 +0100 |
---|---|---|
committer | Jason A. Donenfeld | 2014-12-23 19:04:04 -0700 |
commit | bbfa006e6eb93d56842c1d90bbba1c5484afb855 (patch) | |
tree | b1dbf7beb06c1deae73d10998cc5cad87d736f22 | |
parent | Remove trailing slash after remove-suffix (diff) | |
download | cgit-bbfa006e6eb93d56842c1d90bbba1c5484afb855.tar.gz cgit-bbfa006e6eb93d56842c1d90bbba1c5484afb855.zip |
Extract clone URL printing to ui-shared.c
This will allow us to reuse the same logic to add clone URL <link/> elements to the header of all repo-specific pages in order to support the rel-vcs microformat. Signed-off-by: John Keeping <john@keeping.me.uk>
-rw-r--r-- | ui-shared.c | 37 | ||||
-rw-r--r-- | ui-shared.h | 2 | ||||
-rw-r--r-- | ui-summary.c | 58 |
3 files changed, 51 insertions, 46 deletions
diff --git a/ui-shared.c b/ui-shared.c index 6243d1b..4e317d0 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -727,6 +727,43 @@ void cgit_print_docend() | |||
727 | html("</body>\n</html>\n"); | 727 | html("</body>\n</html>\n"); |
728 | } | 728 | } |
729 | 729 | ||
730 | static void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix) | ||
731 | { | ||
732 | struct strbuf buf = STRBUF_INIT; | ||
733 | char *h = txt, *t, c; | ||
734 | |||
735 | while (h && *h) { | ||
736 | while (h && *h == ' ') | ||
737 | h++; | ||
738 | if (!*h) | ||
739 | break; | ||
740 | t = h; | ||
741 | while (t && *t && *t != ' ') | ||
742 | t++; | ||
743 | c = *t; | ||
744 | *t = 0; | ||
745 | |||
746 | if (suffix && *suffix) { | ||
747 | strbuf_reset(&buf); | ||
748 | strbuf_addf(&buf, "%s/%s", h, suffix); | ||
749 | h = buf.buf; | ||
750 | } | ||
751 | fn(h); | ||
752 | *t = c; | ||
753 | h = t; | ||
754 | } | ||
755 | |||
756 | strbuf_release(&buf); | ||
757 | } | ||
758 | |||
759 | void cgit_add_clone_urls(void (*fn)(const char *)) | ||
760 | { | ||
761 | if (ctx.repo->clone_url) | ||
762 | add_clone_urls(fn, expand_macros(ctx.repo->clone_url), NULL); | ||
763 | else if (ctx.cfg.clone_prefix) | ||
764 | add_clone_urls(fn, ctx.cfg.clone_prefix, ctx.repo->url); | ||
765 | } | ||
766 | |||
730 | static int print_branch_option(const char *refname, const unsigned char *sha1, | 767 | static int print_branch_option(const char *refname, const unsigned char *sha1, |
731 | int flags, void *cb_data) | 768 | int flags, void *cb_data) |
732 | { | 769 | { |
diff --git a/ui-shared.h b/ui-shared.h index fc9be3b..f8cf220 100644 --- a/ui-shared.h +++ b/ui-shared.h | |||
@@ -11,6 +11,8 @@ extern char *cgit_fileurl(const char *reponame, const char *pagename, | |||
11 | extern char *cgit_pageurl(const char *reponame, const char *pagename, | 11 | extern char *cgit_pageurl(const char *reponame, const char *pagename, |
12 | const char *query); | 12 | const char *query); |
13 | 13 | ||
14 | extern void cgit_add_clone_urls(void (*fn)(const char *)); | ||
15 | |||
14 | extern void cgit_index_link(const char *name, const char *title, | 16 | extern void cgit_index_link(const char *name, const char *title, |
15 | const char *class, const char *pattern, const char *sort, int ofs); | 17 | const char *class, const char *pattern, const char *sort, int ofs); |
16 | extern void cgit_summary_link(const char *name, const char *title, | 18 | extern void cgit_summary_link(const char *name, const char *title, |
diff --git a/ui-summary.c b/ui-summary.c index 3728c3e..70ea908 100644 --- a/ui-summary.c +++ b/ui-summary.c | |||
@@ -12,62 +12,30 @@ | |||
12 | #include "ui-log.h" | 12 | #include "ui-log.h" |
13 | #include "ui-refs.h" | 13 | #include "ui-refs.h" |
14 | #include "ui-blob.h" | 14 | #include "ui-blob.h" |
15 | #include "ui-shared.h" | ||
15 | #include <libgen.h> | 16 | #include <libgen.h> |
16 | 17 | ||
17 | static void print_url(char *base, char *suffix) | 18 | static int urls; |
19 | |||
20 | static void print_url(const char *url) | ||
18 | { | 21 | { |
19 | int columns = 3; | 22 | int columns = 3; |
20 | struct strbuf basebuf = STRBUF_INIT; | ||
21 | 23 | ||
22 | if (ctx.repo->enable_log_filecount) | 24 | if (ctx.repo->enable_log_filecount) |
23 | columns++; | 25 | columns++; |
24 | if (ctx.repo->enable_log_linecount) | 26 | if (ctx.repo->enable_log_linecount) |
25 | columns++; | 27 | columns++; |
26 | 28 | ||
27 | if (!base || !*base) | 29 | if (urls++ == 0) { |
28 | return; | 30 | htmlf("<tr class='nohover'><td colspan='%d'> </td></tr>", columns); |
29 | if (suffix && *suffix) { | 31 | htmlf("<tr><th class='left' colspan='%d'>Clone</th></tr>\n", columns); |
30 | strbuf_addf(&basebuf, "%s/%s", base, suffix); | ||
31 | base = basebuf.buf; | ||
32 | } | 32 | } |
33 | |||
33 | htmlf("<tr><td colspan='%d'><a href='", columns); | 34 | htmlf("<tr><td colspan='%d'><a href='", columns); |
34 | html_url_path(base); | 35 | html_url_path(url); |
35 | html("'>"); | 36 | html("'>"); |
36 | html_txt(base); | 37 | html_txt(url); |
37 | html("</a></td></tr>\n"); | 38 | html("</a></td></tr>\n"); |
38 | strbuf_release(&basebuf); | ||
39 | } | ||
40 | |||
41 | static void print_urls(char *txt, char *suffix) | ||
42 | { | ||
43 | char *h = txt, *t, c; | ||
44 | int urls = 0; | ||
45 | int columns = 3; | ||
46 | |||
47 | if (ctx.repo->enable_log_filecount) | ||
48 | columns++; | ||
49 | if (ctx.repo->enable_log_linecount) | ||
50 | columns++; | ||
51 | |||
52 | |||
53 | while (h && *h) { | ||
54 | while (h && *h == ' ') | ||
55 | h++; | ||
56 | if (!*h) | ||
57 | break; | ||
58 | t = h; | ||
59 | while (t && *t && *t != ' ') | ||
60 | t++; | ||
61 | c = *t; | ||
62 | *t = 0; | ||
63 | if (urls++ == 0) { | ||
64 | htmlf("<tr class='nohover'><td colspan='%d'> </td></tr>", columns); | ||
65 | htmlf("<tr><th class='left' colspan='%d'>Clone</th></tr>\n", columns); | ||
66 | } | ||
67 | print_url(h, suffix); | ||
68 | *t = c; | ||
69 | h = t; | ||
70 | } | ||
71 | } | 39 | } |
72 | 40 | ||
73 | void cgit_print_summary() | 41 | void cgit_print_summary() |
@@ -88,10 +56,8 @@ void cgit_print_summary() | |||
88 | cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL, | 56 | cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL, |
89 | NULL, NULL, 0, 0, 0); | 57 | NULL, NULL, 0, 0, 0); |
90 | } | 58 | } |
91 | if (ctx.repo->clone_url) | 59 | urls = 0; |
92 | print_urls(expand_macros(ctx.repo->clone_url), NULL); | 60 | cgit_add_clone_urls(print_url); |
93 | else if (ctx.cfg.clone_prefix) | ||
94 | print_urls(ctx.cfg.clone_prefix, ctx.repo->url); | ||
95 | html("</table>"); | 61 | html("</table>"); |
96 | } | 62 | } |
97 | 63 | ||