X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/6b5b655f6d2449fe33d8f48f6e98d5e421bf3ff9..aafc42d8089437db5105feb12d540c33fe9f9e16:/ui-blame.c?ds=sidebyside diff --git a/ui-blame.c b/ui-blame.c index 62647a8..d565fff 100644 --- a/ui-blame.c +++ b/ui-blame.c @@ -41,37 +41,41 @@ static char *emit_suspect_detail(struct blame_origin *suspect) return strbuf_detach(&detail, NULL); } -static void emit_blame_entry(struct blame_scoreboard *sb, - struct blame_entry *ent) +static void emit_blame_entry_hash(struct blame_entry *ent) { struct blame_origin *suspect = ent->suspect; struct object_id *oid = &suspect->commit->object.oid; - const char *numberfmt = "%1$d\n"; - const char *cp, *cpend; + unsigned long line = 0; char *detail = emit_suspect_detail(suspect); - - html(""); + html(""); cgit_commit_link(find_unique_abbrev(oid->hash, DEFAULT_ABBREV), detail, NULL, ctx.qry.head, oid_to_hex(oid), suspect->path); - html("\n"); - + html(""); free(detail); - if (ctx.cfg.enable_tree_linenumbers) { - unsigned long lineno = ent->lno; - html("
");
-		while (lineno < ent->lno + ent->num_lines)
-			htmlf(numberfmt, ++lineno);
-		html("
\n"); - } + while (line++ < ent->num_lines) + html("\n"); +} + +static void emit_blame_entry_linenumber(struct blame_entry *ent) +{ + const char *numberfmt = "%1$d\n"; + + unsigned long lineno = ent->lno; + while (lineno < ent->lno + ent->num_lines) + htmlf(numberfmt, ++lineno); +} + +static void emit_blame_entry_line(struct blame_scoreboard *sb, + struct blame_entry *ent) +{ + const char *cp, *cpend; cp = blame_nth_line(sb, ent->lno); cpend = blame_nth_line(sb, ent->lno + ent->num_lines); - html("
");
 	html_ntxt(cp, cpend - cp);
-	html("
\n"); } struct walk_tree_context { @@ -131,16 +135,44 @@ static void print_object(const unsigned char *sha1, const char *path, return; } - html(""); + html("
\n\n"); + + /* Commit hashes */ + html("\n"); + + /* Line numbers */ + if (ctx.cfg.enable_tree_linenumbers) { + html("\n"); + } + + /* Lines */ + html("
"); + for (ent = sb.ent; ent; ent = ent->next) { + html("
");
+		emit_blame_entry_hash(ent);
+		html("
"); + } + html("
"); + for (ent = sb.ent; ent; ent = ent->next) { + html("
");
+			emit_blame_entry_linenumber(ent);
+			html("
"); + } + html("
"); for (ent = sb.ent; ent; ) { struct blame_entry *e = ent->next; - emit_blame_entry(&sb, ent); + html("
");
+		emit_blame_entry_line(&sb, ent);
+		html("
"); free(ent); ent = e; } - html("
\n"); + html("\n"); + free((void *)sb.final_buf); + html("\n\n"); + cgit_print_layout_end(); }