Hello, everybody! So, this is a draft of what I mean by "adding tips to blame". Example output (sample from builtin/blame.c): 15:32 $ ./git blame --tips -L 1934,1960 builtin/blame.c cee7f245dc: git-pickaxe: blame rewritten. cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1934) cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1935) static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt) cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1936) { cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1937) int cnt; cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1938) const char *cp; cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1939) struct origin *suspect = ent->suspect; cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1940) struct commit_info ci; d59f765ac9: use sha1_to_hex_r() instead of strcpy d59f765ac9 builtin/blame.c (Jeff King 2015-09-24 17:08:03 -0400 1941) char hex[GIT_SHA1_HEXSZ + 1]; cee7f245dc: git-pickaxe: blame rewritten. cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1942) int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP); f2aea1696f: blame: add option to print tips (--tips) f2aea1696f builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600 1943) int revision_length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev; cee7f245dc: git-pickaxe: blame rewritten. cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1944) cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1945) get_commit_info(suspect->commit, &ci, 1); f2fd0760f6: Convert struct object to object_id f2fd0760f6 builtin/blame.c (brian m. carlson 2015-11-10 02:22:28 +0000 1946) sha1_to_hex_r(hex, suspect->commit->object.oid.hash); cee7f245dc: git-pickaxe: blame rewritten. cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1947) f2aea1696f: blame: add option to print tips (--tips) f2aea1696f builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600 1948) if (opt & OUTPUT_SHOW_TIPS) f2aea1696f builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600 1949) printf("\t%.*s: %s\n", revision_length, hex, ci.summary.buf); f2aea1696f builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600 1950) cee7f245dc: git-pickaxe: blame rewritten. cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1951) cp = nth_line(sb, ent->lno); cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1952) for (cnt = 0; cnt < ent->num_lines; cnt++) { cee7f245dc builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700 1953) char ch; f2aea1696f: blame: add option to print tips (--tips) f2aea1696f builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600 1954) int length = revision_length; b11121d9e3: git-blame: show lines attributed to boundary commits differently. b11121d9e3 builtin-blame.c (Junio C Hamano 2006-12-01 20:45:45 -0800 1955) b11121d9e3 builtin-blame.c (Junio C Hamano 2006-12-01 20:45:45 -0800 1956) if (suspect->commit->object.flags & UNINTERESTING) { e68989a739: annotate: fix for cvsserver. e68989a739 builtin-blame.c (Junio C Hamano 2007-02-06 01:52:04 -0800 1957) if (blank_boundary) e68989a739 builtin-blame.c (Junio C Hamano 2007-02-06 01:52:04 -0800 1958) memset(hex, ' ', length); 7ceacdffc5: "blame -c" should be compatible with "annotate" 7ceacdffc5 builtin-blame.c (Junio C Hamano 2008-09-05 00:57:35 -0700 1959) else if (!(opt & OUTPUT_ANNOTATE_COMPAT)) { 4c10a5caa7: blame: -b (blame.blankboundary) and --root (blame.showroot) 4c10a5caa7 builtin-blame.c (Junio C Hamano 2006-12-18 14:04:38 -0800 1960) length--; Does it look "worthy"? And if so, would it be better to think of something like an "aggregate" option (or something like that) that would include the common information as tips, something like: 15:32 $ ./git blame --tips -L 1934,1960 builtin/blame.c cee7f245dc: builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700) git-pickaxe: blame rewritten. 1934 1935 static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt) 1936 { 1937 int cnt; 1938 const char *cp; 1939 struct origin *suspect = ent->suspect; 1940 struct commit_info ci; d59f765ac9: builtin/blame.c (Jeff King 2015-09-24 17:08:03 -0400) use sha1_to_hex_r() instead of strcpy 1941 char hex[GIT_SHA1_HEXSZ + 1]; cee7f245dc: builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700) git-pickaxe: blame rewritten. 1942 int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP); f2aea1696f: builtin/blame.c (Edmundo Carmona Antoranz 2017-01-22 15:23:31 -0600) blame: add option to print tips (--tips) 1943 int revision_length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev; cee7f245dc: builtin-pickaxe.c (Junio C Hamano 2006-10-19 16:00:04 -0700) git-pickaxe: blame rewritten. 1944 1945 get_commit_info(suspect->commit, &ci, 1); Best regards! On Sun, Jan 22, 2017 at 3:28 PM, Edmundo Carmona Antoranz <eantoranz@xxxxxxxxx> wrote: > --- > builtin/blame.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/builtin/blame.c b/builtin/blame.c > index 126b8c9e5..4bc449f40 100644 > --- a/builtin/blame.c > +++ b/builtin/blame.c > @@ -1884,6 +1884,7 @@ static const char *format_time(unsigned long time, const char *tz_str, > #define OUTPUT_NO_AUTHOR 0200 > #define OUTPUT_SHOW_EMAIL 0400 > #define OUTPUT_LINE_PORCELAIN 01000 > +#define OUTPUT_SHOW_TIPS 02000 > > static void emit_porcelain_details(struct origin *suspect, int repeat) > { > @@ -1939,14 +1940,18 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt) > struct commit_info ci; > char hex[GIT_SHA1_HEXSZ + 1]; > int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP); > + int revision_length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev; > > get_commit_info(suspect->commit, &ci, 1); > sha1_to_hex_r(hex, suspect->commit->object.oid.hash); > > + if (opt & OUTPUT_SHOW_TIPS) > + printf("\t%.*s: %s\n", revision_length, hex, ci.summary.buf); > + > cp = nth_line(sb, ent->lno); > for (cnt = 0; cnt < ent->num_lines; cnt++) { > char ch; > - int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? GIT_SHA1_HEXSZ : abbrev; > + int length = revision_length; > > if (suspect->commit->object.flags & UNINTERESTING) { > if (blank_boundary) > @@ -2609,6 +2614,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) > { OPTION_CALLBACK, 'C', NULL, &opt, N_("score"), N_("Find line copies within and across files"), PARSE_OPT_OPTARG, blame_copy_callback }, > { OPTION_CALLBACK, 'M', NULL, &opt, N_("score"), N_("Find line movements within and across files"), PARSE_OPT_OPTARG, blame_move_callback }, > OPT_STRING_LIST('L', NULL, &range_list, N_("n,m"), N_("Process only line range n,m, counting from 1")), > + OPT_BIT(0, "tips", &output_option, N_("Show tips before content lines"), OUTPUT_SHOW_TIPS), > OPT__ABBREV(&abbrev), > OPT_END() > }; > -- > 2.11.0.rc1 >