git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: cg-log "fatal: bad revision ''"

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Apr 20, 2007, 23:25 UTC
Message-ID
<alpine.LFD.0.98.0704201554550.9964@woody.linux-foundation.org>
In-Reply-To
<Pine.LNX.4.64.0704201900430.4275@castor.milkiway.cos>
On Fri, 20 Apr 2007, Michael Dressel wrote:
> 
> Thanx for the reply. Is there a way to follow renaming at all, either 
> with cogito or git?

"git blame" will follow renames, but doesn't really show things as a log, more just as a "these commits mattered" thing.

You can use something like this patch to then make it *look* like a "log" function.

Junio - I really think that something along these lines is worth doing, but I wonder what the right semantics are. This patch is stupid, and just keeps the "blame" semantics, just showing it in a "log format". It does mean that when I do

	git blame -C --log block/ll_rw_block.c
it will show entries for the old drivers/block/ll_rw_blk.c location.

HOWEVER, it's still broken, because when you do logging, you don't actually care about the diffs at all, so *any* difference from the previous version should show up, even if the lines don't show up in the end result. So this doesn't really do what people actually *want* to do, it does somethign much more complicated ;)

		Linus
---
 builtin-blame.c |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/builtin-blame.c b/builtin-blame.c
index 8919b02..ee98753 100644
--- a/builtin-blame.c
+++ b/builtin-blame.c
@@ -16,6 +16,7 @@
 #include "quote.h"
 #include "xdiff-interface.h"
 #include "cache-tree.h"
+#include "log-tree.h"
 
 static char blame_usage[] =
 "git-blame [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>] [-M] [-C] [-C] [--contents <filename>] [--incremental] [commit] [--] file\n"
@@ -30,6 +31,7 @@ static char blame_usage[] =
 "  -L n,m              Process only line range n,m, counting from 1\n"
 "  -M, -C              Find line movements within and across files\n"
 "  --incremental       Show blame entries as we find them, incrementally\n"
+"  --log               Show blame entries as a log\n"
 "  --contents file     Use <file>'s contents as the final image\n"
 "  -S revs-file        Use revisions from revs-file instead of calling git-rev-list\n";
 
@@ -42,6 +44,7 @@ static int show_root;
 static int blank_boundary;
 static int incremental;
 static int cmd_is_annotate;
+static int log;
 
 #ifndef DEBUG
 #define DEBUG 0
@@ -1370,11 +1373,15 @@ static void write_filename_info(const char *path)
  * The blame_entry is found to be guilty for the range.  Mark it
  * as such, and show it in incremental output.
  */
-static void found_guilty_entry(struct blame_entry *ent)
+static void found_guilty_entry(struct rev_info *revs, struct blame_entry *ent)
 {
 	if (ent->guilty)
 		return;
 	ent->guilty = 1;
+	if (log) {
+		log_tree_commit(revs, ent->suspect->commit);
+		return;
+	}
 	if (incremental) {
 		struct origin *suspect = ent->suspect;
 
@@ -1443,7 +1450,7 @@ static void assign_blame(struct scoreboard *sb, struct rev_info *revs, int opt)
 		/* Take responsibility for the remaining entries */
 		for (ent = sb->ent; ent; ent = ent->next)
 			if (same_suspect(ent->suspect, suspect))
-				found_guilty_entry(ent);
+				found_guilty_entry(revs, ent);
 		origin_decref(suspect);
 
 		if (DEBUG) /* sanity */
@@ -2072,7 +2079,6 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 	cmd_is_annotate = !strcmp(argv[0], "annotate");
 
 	git_config(git_blame_config);
-	save_commit_buffer = 0;
 
 	opt = 0;
 	seen_dashdash = 0;
@@ -2123,6 +2129,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 		}
 		else if (!strcmp("--incremental", arg))
 			incremental = 1;
+		else if (!strcmp("--log", arg))
+			log = 1;
 		else if (!strcmp("--score-debug", arg))
 			output_option |= OUTPUT_SHOW_SCORE;
 		else if (!strcmp("-f", arg) ||
@@ -2244,6 +2252,11 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
 	init_revisions(&revs, NULL);
 	setup_revisions(unk, argv, &revs, NULL);
+	revs.abbrev = DEFAULT_ABBREV;
+	revs.commit_format = CMIT_FMT_DEFAULT;
+	revs.verbose_header = 1;
+	revs.always_show_header = 1;
+
 	memset(&sb, 0, sizeof(sb));
 
 	/*
@@ -2335,7 +2348,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 
 	assign_blame(&sb, &revs, opt);
 
-	if (incremental)
+	if (incremental || log)
 		return 0;
 
 	coalesce(&sb);
Previous: Michael DresselNext: Junio C Hamano
Message 4 of 6 in “cg-log "fatal: bad revision ''"”
  1. MichaelTiloDressel@t-online.deApr 20, 2007
  2. Petr BaudisApr 20, 2007
  3. Michael DresselApr 20, 2007
  4. Linus TorvaldsApr 20, 2007
  5. Junio C HamanoApr 20, 2007
  6. Michael DresselApr 23, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.