I like the idea of the new ':/<oneline prefix>' notation, and gave it
a try, but all I could get was a segfault. It was dereferencing a NULL
commit list. Fix below. With it, this example now works:
$ mkdir .j; cd .j; touch f
$ git-init; git-add f; git-commit -mc f; echo x >f; git-commit -md f
$ git-diff -p :/c :/d
diff --git a/f b/f
index e69de29..587be6b 100644
--- a/f
+++ b/f
@@ -0,0 +1 @@
+x
Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
committed by
Junio C Hamano
parent
8a3fbdd9e6
commit
ed8ad7e2e2
@ -605,7 +605,7 @@ static int handle_one_ref(const char *path,
|
|||||||
int get_sha1_oneline(const char *prefix, unsigned char *sha1)
|
int get_sha1_oneline(const char *prefix, unsigned char *sha1)
|
||||||
{
|
{
|
||||||
struct commit_list *list = NULL, *backup = NULL, *l;
|
struct commit_list *list = NULL, *backup = NULL, *l;
|
||||||
struct commit *commit;
|
struct commit *commit = NULL;
|
||||||
|
|
||||||
if (prefix[0] == '!') {
|
if (prefix[0] == '!') {
|
||||||
if (prefix[1] != '!')
|
if (prefix[1] != '!')
|
||||||
@ -617,8 +617,12 @@ int get_sha1_oneline(const char *prefix, unsigned char *sha1)
|
|||||||
for_each_ref(handle_one_ref, &list);
|
for_each_ref(handle_one_ref, &list);
|
||||||
for (l = list; l; l = l->next)
|
for (l = list; l; l = l->next)
|
||||||
commit_list_insert(l->item, &backup);
|
commit_list_insert(l->item, &backup);
|
||||||
while ((commit = pop_most_recent_commit(&list, ONELINE_SEEN))) {
|
while (list) {
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
commit = pop_most_recent_commit(&list, ONELINE_SEEN);
|
||||||
|
if (!commit)
|
||||||
|
break;
|
||||||
parse_object(commit->object.sha1);
|
parse_object(commit->object.sha1);
|
||||||
if (!commit->buffer || !(p = strstr(commit->buffer, "\n\n")))
|
if (!commit->buffer || !(p = strstr(commit->buffer, "\n\n")))
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user