X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/4837fddc35bbd8d6f66a40486f75cdee3197172d..c1633c6befb6762e1ac9434a29980e4df5ffee21:/ui-tree.c?ds=sidebyside diff --git a/ui-tree.c b/ui-tree.c index 442b6be..b544440 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -150,13 +150,7 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, cgit_print_filemode(mode); html(""); if (S_ISGITLINK(mode)) { - htmlf(""); - html_txt(name); - html(""); + cgit_submodule_link("ls-mod", fullpath, sha1_to_hex(sha1)); } else if (S_ISDIR(mode)) { cgit_tree_link(name, NULL, "ls-dir", ctx.qry.head, curr_rev, fullpath); @@ -177,8 +171,9 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, if (ctx.repo->max_stats) cgit_stats_link("stats", NULL, "button", ctx.qry.head, fullpath); - cgit_plain_link("plain", NULL, "button", ctx.qry.head, curr_rev, - fullpath); + if (!S_ISGITLINK(mode)) + cgit_plain_link("plain", NULL, "button", ctx.qry.head, curr_rev, + fullpath); html("\n"); free(name); return 0; @@ -207,6 +202,9 @@ static void ls_tail() static void ls_tree(const unsigned char *sha1, char *path) { struct tree *tree; + struct pathspec paths = { + .nr = 0 + }; tree = parse_tree_indirect(sha1); if (!tree) { @@ -216,7 +214,7 @@ static void ls_tree(const unsigned char *sha1, char *path) } ls_head(); - read_tree_recursive(tree, "", 0, 1, NULL, ls_item, NULL); + read_tree_recursive(tree, "", 0, 1, &paths, ls_item, NULL); ls_tail(); } @@ -257,7 +255,14 @@ void cgit_print_tree(const char *rev, char *path) { unsigned char sha1[20]; struct commit *commit; - const char *paths[] = {path, NULL}; + struct pathspec_item path_items = { + .match = path, + .len = path ? strlen(path) : 0 + }; + struct pathspec paths = { + .nr = path ? 1 : 0, + .items = &path_items + }; if (!rev) rev = ctx.qry.head; @@ -279,6 +284,6 @@ void cgit_print_tree(const char *rev, char *path) } match_path = path; - read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); + read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, NULL); ls_tail(); }