]> granicus.if.org Git - cgit/commitdiff
ui-shared: add helper for generating non-urlencoded links
authorAndy Green <andy@warmcat.com>
Tue, 19 Jun 2018 02:32:25 +0000 (10:32 +0800)
committerAndy Green <andy@warmcat.com>
Thu, 28 Jun 2018 23:53:21 +0000 (07:53 +0800)
We are going to have to produce plain links in the next patch.
But depending on config, the links are not simple.

Reproduce the logic in repolink() to generate correctly-
formatted links in a strbuf, without urlencoding, in a reusable
helper cgit_repo_create_url().

Signed-off-by: Andy Green <andy@warmcat.com>
ui-shared.c
ui-shared.h

index 15887cc93a5ba9a18a50905e6c756ce9c9fa75b2..2327570af50097fdf4be7aac16a7ead89ea7fa55 100644 (file)
@@ -226,6 +226,38 @@ void cgit_index_link(const char *name, const char *title, const char *class,
        site_link(NULL, name, title, class, pattern, sort, ofs, always_root);
 }
 
+const char *cgit_repo_create_url(struct strbuf *sb, struct strbuf *sb_post,
+                                const char *page, const char *head,
+                                const char *path)
+{
+       const char *delim = "?";
+
+       if (ctx.cfg.virtual_root) {
+               strbuf_addf(sb, "%s%s", ctx.cfg.virtual_root, ctx.repo->url);
+       } else {
+               strbuf_addstr(sb, ctx.cfg.script_name);
+               sb = sb_post;
+               strbuf_addf(sb, "?url=%s", ctx.repo->url);
+               delim = "&";
+       }
+
+       if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/')
+               strbuf_addch(sb, '/');
+
+       if (page) {
+               strbuf_addf(sb, "%s/", page);
+               if (path)
+                       strbuf_addstr(sb, path);
+       }
+
+       if (head && ctx.repo->defbranch && strcmp(head, ctx.repo->defbranch)) {
+               strbuf_addf(sb_post, "%sh=%s", delim, head);
+               delim = "&";
+       }
+
+       return delim;
+}
+
 static char *repolink(const char *title, const char *class, const char *page,
                      const char *head, const char *path)
 {
index 1bc9b6171bbd4f155da3ed4777a8291b9f6ff85e..8d32a3d061b7e8721c335188e49cd1621aeb61d9 100644 (file)
@@ -59,6 +59,9 @@ extern void cgit_object_link(struct object *obj);
 
 extern void cgit_submodule_link(const char *class, char *path,
                                const char *rev);
+extern const char *cgit_repo_create_url(struct strbuf *sb, struct strbuf *sb_post,
+                                        const char *page, const char *head,
+                                        const char *path);
 
 extern void cgit_print_layout_start(void);
 extern void cgit_print_layout_end(void);