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

[PATCH] log --reflog: use dwim_log

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 9, 2007, 00:28 UTC
Message-ID
<Pine.LNX.4.63.0702090127510.22628@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<7vveicw850.fsf@assigned-by-dhcp.cox.net>

Since "git log origin/master" uses dwim_log() to match "refs/remotes/origin/master", it makes sense to do that for "git log --reflog", too.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
	I changed dwim_ref() to dwim_log() as per Nico's request.
 cache.h       |    1 +
 reflog-walk.c |   13 +++++++++++++
 sha1_name.c   |    2 +-
 3 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/cache.h b/cache.h
index 6f55fdc..44941c0 100644
--- a/cache.h
+++ b/cache.h
@@ -304,6 +304,7 @@ extern char *sha1_to_hex(const unsigned char *sha1);	/* static buffer result! */
 extern int read_ref(const char *filename, unsigned char *sha1);
 extern const char *resolve_ref(const char *path, unsigned char *sha1, int, int *);
 extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
+extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
 
 extern int create_symref(const char *ref, const char *refs_heads_master, const char *logmsg);
 extern int validate_headref(const char *ref);
diff --git a/reflog-walk.c b/reflog-walk.c
index 653ec95..e0f1332 100644
--- a/reflog-walk.c
+++ b/reflog-walk.c
@@ -174,6 +174,19 @@ void add_reflog_for_walk(struct reflog_walk_info *info,
 			branch = xstrdup(head);
 		}
 		reflogs = read_complete_reflog(branch);
+		if (!reflogs || reflogs->nr == 0) {
+			unsigned char sha1[20];
+			char *b;
+			if (dwim_log(branch, strlen(branch), sha1, &b) == 1) {
+				if (reflogs) {
+					free(reflogs->ref);
+					free(reflogs);
+				}
+				free(branch);
+				branch = b;
+				reflogs = read_complete_reflog(branch);
+			}
+		}
 		if (!reflogs || reflogs->nr == 0)
 			die("No reflogs found for '%s'", branch);
 		path_list_insert(branch, &info->complete_reflogs)->util
diff --git a/sha1_name.c b/sha1_name.c
index d0d9536..c50a378 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -268,7 +268,7 @@ int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
 	return refs_found;
 }
 
-static int dwim_log(const char *str, int len, unsigned char *sha1, char **log)
+int dwim_log(const char *str, int len, unsigned char *sha1, char **log)
 {
 	const char **p;
 	int logs_found = 0;
-- 
1.5.0.rc4.2051.g679c-dirty
Previous: Johannes SchindelinNext: Junio C Hamano
Message 11 of 13 in “[BUG] Empty reflogs and "git log -g"”
  1. Santi BéjarFeb 8, 2007
  2. Santi BéjarFeb 8, 2007
  3. Johannes SchindelinFeb 8, 2007
  4. Nicolas PitreFeb 8, 2007
  5. Johannes SchindelinFeb 8, 2007
  6. Johannes SchindelinFeb 8, 2007
  7. Jakub NarebskiFeb 8, 2007
  8. Johannes SchindelinFeb 8, 2007
  9. Junio C HamanoFeb 8, 2007
  10. for_each_reflog_ent: be forgiving about missing messageJohannes Schindelin, Feb 8, 2007
  11. log --reflog: use dwim_logJohannes Schindelin, Feb 9, 2007
  12. Junio C HamanoFeb 9, 2007
  13. Junio C HamanoFeb 9, 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.