about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-07-23 20:48:21 +0000
committerRory& <root@rory.gay>2026-02-06 14:09:52 +0100
commita29ef76db6266b32c0176eec3aacae500a940443 (patch)
treee9fe3e4484778e534266c50a8c4b6fafa32862bd
parentRemove dependency on memrchr (diff)
downloadcgit-magenta-a29ef76db6266b32c0176eec3aacae500a940443.tar.xz
Add "this commit" option to switch form
Branches are grouped into their own section to make the "this commit"
option visually distinct.

Adding this option will result in two options being marked as selected
if a branch has the same name as a commit oid.  But that would cause
all sorts of other problems anyway (attempting to switch to the branch
would actually give you the commit, etc.), so let's not worry about
that.

A "permalink" link on the blob view next to the "plain" link would
probably be more discoverable, but that would only work for the blob
view.  The switch UI is visible everywhere.

Signed-off-by: Alyssa Ross <hi@alyssa.is>
-rw-r--r--ui-shared.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c

index 6b6850f..6c209cb 100644 --- a/ui-shared.c +++ b/ui-shared.c
@@ -936,6 +936,15 @@ void cgit_add_clone_urls(void (*fn)(const char *)) add_clone_urls(fn, ctx.cfg.clone_prefix, ctx.repo->url); } +static int print_this_commit_option(void) +{ + struct object_id oid; + if (get_oid(ctx.qry.head, &oid)) + return 1; + html_option(oid_to_hex(&oid), "this commit", ctx.qry.head); + return 0; +} + static int print_branch_option(const struct reference *ref, void *cb_data) { char *name = (char *)ref->name; @@ -1042,11 +1051,14 @@ static void print_header(void) html("<form method='get'>\n"); cgit_add_hidden_formfields(0, 1, ctx.qry.page); html("<select name='h' onchange='this.form.submit();'>\n"); + print_this_commit_option(); + html("<optgroup label='branches'>"); refs_for_each_branch_ref(get_main_ref_store(the_repository), print_branch_option, ctx.qry.head); if (ctx.repo->enable_remote_branches) refs_for_each_remote_ref(get_main_ref_store(the_repository), print_branch_option, ctx.qry.head); + html("</optgroup>"); html("</select> "); html("<input type='submit' value='switch'/>"); html("</form>");