diff options
context:
space:
mode:
authorBryce Kwon <bryce@brycekwon.com>
committerBryce Kwon <bryce@brycekwon.com>
commit
parent
tree
download
Fix the submodule rows in the tree listing
A submodule row linked to a path with its trailing slash stripped, was labelled by its path rather than its entry name, shared the name's element with its hash, claimed a size of zero and offered a blame button that cannot work on a gitlink.
Diffstat (limited to 'source/ui-shared.c')
-rw-r--r--source/ui-shared.c30
1 file changed, 17 insertions, 13 deletions
diff --git a/source/ui-shared.c b/source/ui-shared.c
index 05fa30b..02352bf 100644
--- a/source/ui-shared.c
+++ b/source/ui-shared.c
@@ -1032,7 +1032,8 @@ void cgit_submodule_link(const char *class, char *path, const char *rev)
{
struct string_list *list;
struct string_list_item *item;
- char tail, *dir;
+ char tail;
+ const char *name;
size_t len;
len = 0;
@@ -1047,6 +1048,12 @@ void cgit_submodule_link(const char *class, char *path, const char *rev)
item = lookup_path(list, path);
}
}
+
+ // The row shows the entry's own name, like every other row, while
+ // the lookups above want the full path.
+ name = strrchr(path, '/');
+ name = name ? name + 1 : path;
+
if (item || ctx.repo->module_link) {
html("<a ");
if (class)
@@ -1056,29 +1063,26 @@ void cgit_submodule_link(const char *class, char *path, const char *rev)
const char *args[] = { rev };
emit_module_link(item->util, args, 1);
} else {
- const char *args[2];
- dir = strrchr(path, '/');
- if (dir)
- dir++;
- else
- dir = path;
- args[0] = dir;
- args[1] = rev;
+ const char *args[] = { name, rev };
emit_module_link(ctx.repo->module_link, args, 2);
}
html("'>");
- html_txt(path);
+ html_txt(name);
html("</a>");
} else {
html("<span");
if (class)
htmlf(" class='%s'", class);
html(">");
- html_txt(path);
+ html_txt(name);
html("</span>");
}
- html_txtf(" @ %.7s", rev);
- if (item && tail)
+ html(" @ <span class='ls-mod-hash' title='");
+ html_attr(rev);
+ html("'>");
+ html_txtf("%.7s", rev);
+ html("</span>");
+ if (tail == '/')
path[len - 1] = tail;
}