author | Johan Herland <johan@herland.net> | 2010-06-09 23:09:35 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2010-06-19 08:40:24 (UTC) |
commit | 685872b770be2af643d00365d5358e46687f7385 (patch) (side-by-side diff) | |
tree | 279a8399c3e9b189a7171df6ca009a58bf1bb8c7 /ui-shared.c | |
parent | 34c2331d2c33ea28743a2ee3e62f7337ae9887f6 (diff) | |
download | cgit-685872b770be2af643d00365d5358e46687f7385.zip cgit-685872b770be2af643d00365d5358e46687f7385.tar.gz cgit-685872b770be2af643d00365d5358e46687f7385.tar.bz2 |
ui-commit: Preserve path limit in links to commit page
This includes adding a path argument to cgit_commit_link() and updating all
its callers. The callers from within the commit page (i.e. the "commit",
"unidiff"/"side-by-side diff" and "parent" links) all preserve the path
limit of the current commit page. All other callers pass NULL (i.e. no path
limit).
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-shared.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/ui-shared.c b/ui-shared.c index d5c4c10..372b9e7 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -274,108 +274,109 @@ void cgit_tree_link(const char *name, const char *title, const char *class, { reporevlink("tree", name, title, class, head, rev, path); } void cgit_plain_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path) { reporevlink("plain", name, title, class, head, rev, path); } void cgit_log_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path, int ofs, const char *grep, const char *pattern, int showmsg) { char *delim; delim = repolink(title, class, "log", head, path); if (rev && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); delim = "&"; } if (grep && pattern) { html(delim); html("qt="); html_url_arg(grep); delim = "&"; html(delim); html("q="); html_url_arg(pattern); } if (ofs > 0) { html(delim); html("ofs="); htmlf("%d", ofs); delim = "&"; } if (showmsg) { html(delim); html("showmsg=1"); } html("'>"); html_txt(name); html("</a>"); } void cgit_commit_link(char *name, const char *title, const char *class, - const char *head, const char *rev, int toggle_ssdiff) + const char *head, const char *rev, const char *path, + int toggle_ssdiff) { if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { name[ctx.cfg.max_msg_len] = '\0'; name[ctx.cfg.max_msg_len - 1] = '.'; name[ctx.cfg.max_msg_len - 2] = '.'; name[ctx.cfg.max_msg_len - 3] = '.'; } char *delim; - delim = repolink(title, class, "commit", head, NULL); + delim = repolink(title, class, "commit", head, path); if (rev && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); delim = "&"; } if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { html(delim); html("ss=1"); } html("'>"); html_txt(name); html("</a>"); } void cgit_refs_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path) { reporevlink("refs", name, title, class, head, rev, path); } void cgit_snapshot_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *archivename) { reporevlink("snapshot", name, title, class, head, rev, archivename); } void cgit_diff_link(const char *name, const char *title, const char *class, const char *head, const char *new_rev, const char *old_rev, const char *path, int toggle_ssdiff) { char *delim; delim = repolink(title, class, "diff", head, path); if (new_rev && ctx.qry.head != NULL && strcmp(new_rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(new_rev); delim = "&"; } if (old_rev) { html(delim); html("id2="); html_url_arg(old_rev); delim = "&"; } if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { @@ -421,97 +422,97 @@ void cgit_self_link(char *name, const char *title, const char *class, else if (!strcmp(ctx->qry.page, "log")) return cgit_log_link(name, title, class, ctx->qry.head, ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, ctx->qry.path, ctx->qry.ofs, ctx->qry.grep, ctx->qry.search, ctx->qry.showmsg); else if (!strcmp(ctx->qry.page, "commit")) return cgit_commit_link(name, title, class, ctx->qry.head, ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, ctx->qry.path, 0); else if (!strcmp(ctx->qry.page, "patch")) return cgit_patch_link(name, title, class, ctx->qry.head, ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, ctx->qry.path); else if (!strcmp(ctx->qry.page, "refs")) return cgit_refs_link(name, title, class, ctx->qry.head, ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, ctx->qry.path); else if (!strcmp(ctx->qry.page, "snapshot")) return cgit_snapshot_link(name, title, class, ctx->qry.head, ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, ctx->qry.path); else if (!strcmp(ctx->qry.page, "diff")) return cgit_diff_link(name, title, class, ctx->qry.head, ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 0); else if (!strcmp(ctx->qry.page, "stats")) return cgit_stats_link(name, title, class, ctx->qry.head, ctx->qry.path); /* Don't known how to make link for this page */ repolink(title, class, ctx->qry.page, ctx->qry.head, ctx->qry.path); html("><!-- cgit_self_link() doesn't know how to make link for page '"); html_txt(ctx->qry.page); html("' -->"); html_txt(name); html("</a>"); } void cgit_object_link(struct object *obj) { char *page, *shortrev, *fullrev, *name; fullrev = sha1_to_hex(obj->sha1); shortrev = xstrdup(fullrev); shortrev[10] = '\0'; if (obj->type == OBJ_COMMIT) { cgit_commit_link(fmt("commit %s...", shortrev), NULL, NULL, - ctx.qry.head, fullrev, 0); + ctx.qry.head, fullrev, NULL, 0); return; } else if (obj->type == OBJ_TREE) page = "tree"; else if (obj->type == OBJ_TAG) page = "tag"; else page = "blob"; name = fmt("%s %s...", typename(obj->type), shortrev); reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL); } void cgit_print_date(time_t secs, const char *format, int local_time) { char buf[64]; struct tm *time; if (!secs) return; if(local_time) time = localtime(&secs); else time = gmtime(&secs); strftime(buf, sizeof(buf)-1, format, time); html_txt(buf); } void cgit_print_age(time_t t, time_t max_relative, const char *format) { time_t now, secs; if (!t) return; time(&now); secs = now - t; if (secs > max_relative && max_relative >= 0) { cgit_print_date(t, format, ctx.cfg.local_time); return; } if (secs < TM_HOUR * 2) { htmlf("<span class='age-mins'>%.0f min.</span>", secs * 1.0 / TM_MIN); return; } if (secs < TM_DAY * 2) { htmlf("<span class='age-hours'>%.0f hours</span>", secs * 1.0 / TM_HOUR); @@ -748,97 +749,97 @@ static void print_header(struct cgit_context *ctx) html("<td class='main'>"); if (ctx->repo) { cgit_index_link("index", NULL, NULL, NULL, 0); html(" : "); cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL); html("</td><td class='form'>"); html("<form method='get' action=''>\n"); cgit_add_hidden_formfields(0, 1, ctx->qry.page); html("<select name='h' onchange='this.form.submit();'>\n"); for_each_branch_ref(print_branch_option, ctx->qry.head); html("</select> "); html("<input type='submit' name='' value='switch'/>"); html("</form>"); } else html_txt(ctx->cfg.root_title); html("</td></tr>\n"); html("<tr><td class='sub'>"); if (ctx->repo) { html_txt(ctx->repo->desc); html("</td><td class='sub right'>"); html_txt(ctx->repo->owner); } else { if (ctx->cfg.root_desc) html_txt(ctx->cfg.root_desc); else if (ctx->cfg.index_info) html_include(ctx->cfg.index_info); } html("</td></tr></table>\n"); } void cgit_print_pageheader(struct cgit_context *ctx) { html("<div id='cgit'>"); if (!ctx->cfg.noheader) print_header(ctx); html("<table class='tabs'><tr><td>\n"); if (ctx->repo) { cgit_summary_link("summary", NULL, hc(ctx, "summary"), ctx->qry.head); cgit_refs_link("refs", NULL, hc(ctx, "refs"), ctx->qry.head, ctx->qry.sha1, NULL); cgit_log_link("log", NULL, hc(ctx, "log"), ctx->qry.head, NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg); cgit_tree_link("tree", NULL, hc(ctx, "tree"), ctx->qry.head, ctx->qry.sha1, NULL); cgit_commit_link("commit", NULL, hc(ctx, "commit"), - ctx->qry.head, ctx->qry.sha1, 0); + ctx->qry.head, ctx->qry.sha1, NULL, 0); cgit_diff_link("diff", NULL, hc(ctx, "diff"), ctx->qry.head, ctx->qry.sha1, ctx->qry.sha2, NULL, 0); if (ctx->repo->max_stats) cgit_stats_link("stats", NULL, hc(ctx, "stats"), ctx->qry.head, NULL); if (ctx->repo->readme) reporevlink("about", "about", NULL, hc(ctx, "about"), ctx->qry.head, NULL, NULL); html("</td><td class='form'>"); html("<form class='right' method='get' action='"); if (ctx->cfg.virtual_root) html_url_path(cgit_fileurl(ctx->qry.repo, "log", ctx->qry.vpath, NULL)); html("'>\n"); cgit_add_hidden_formfields(1, 0, "log"); html("<select name='qt'>\n"); html_option("grep", "log msg", ctx->qry.grep); html_option("author", "author", ctx->qry.grep); html_option("committer", "committer", ctx->qry.grep); html("</select>\n"); html("<input class='txt' type='text' size='10' name='q' value='"); html_attr(ctx->qry.search); html("'/>\n"); html("<input type='submit' value='search'/>\n"); html("</form>\n"); } else { site_link(NULL, "index", NULL, hc(ctx, "repolist"), NULL, 0); if (ctx->cfg.root_readme) site_link("about", "about", NULL, hc(ctx, "about"), NULL, 0); html("</td><td class='form'>"); html("<form method='get' action='"); html_attr(cgit_rooturl()); html("'>\n"); html("<input type='text' name='q' size='10' value='"); html_attr(ctx->qry.search); html("'/>\n"); html("<input type='submit' value='search'/>\n"); html("</form>"); } html("</td></tr></table>\n"); if (ctx->qry.vpath) { html("<div class='path'>"); html("path: "); cgit_print_path_crumbs(ctx, ctx->qry.vpath); html("</div>"); } |