Re: [PATCH] Fix git to be (more) ANSI C99 compliant.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:30
Rene Scharfe [off-list ref] writes:
Junio C Hamano schrieb:quoted
BTW, I think we would probably want to have this patch on top of Rene's patch. In all instances, the variable "buf" is of type "const char *" and the existing casts do not make sense to me.diff --git a/builtin-tar-tree.c b/builtin-tar-tree.c index 5c8a5f0..39a61b6 100644Your patch reverts builtin-tar-tree.c to the version which is currently both in master and next, which I think is a good change. However, could it be avoided at merge time?
Sorry for attributing those "casts [that] do not make sense to me" to you -- it is not your code but part of Florian's patch. I think applying the patch in question on top of Florian's 11172e would be the most sensible, since that is currently the tip of ff/c99 topic branch whose early parts have been merged to "next" and the tip to "pu". When Linus feels as sympathetic as I do, we can pull the rest of ff/c99 branch to "next" and then eventually to "master" and the patch will be merged together without introducing the nonsense casts. Another possibility is to amend the tip of ff/c99 topic branch, since it is not merged to "next" yet. I promised not to rewind "master" nor "next", but never made promises not to rewind "pu", so it is a fair game. I think it is simpler and cleaner, so that will be what I will do.
OT: I found the blobs 5c8a5f0 and 39a61b6 by guessing (they are builtin-tar-tree.c in pu and master, respectively). OK, that was easy. But is there a way to reversely look up an object without guessing, i.e. find out which commit(s) introduced a certain blob?
You could do something like this (totally untested).
Going from the above "diff --git" index line you have object
name abbreviations and pathnames as clues. To take advantage of
it, you could use "git rev-list pu -- builtin-tar-tree.c"
instead of unlimited list.
$ git rev-list pu |
git diff-tree -r --stdin --pretty |
perl -e '
my @lines = ();
sub flush_em {
my @found = ();
my @comment = ();
for my $l (@lines) {
if ($l !~ /^:/) {
push @comment, $l;
next;
}
for (@ARGV) {
if ($l =~ / $_/) {
push @found, $l;
last;
}
}
}
if (@found) {
print join("", @comment, @found);
}
@lines = ();
}
while (<STDIN>) {
if (/^commit [0-9a-f]{40}$/) { flush_em(); }
push @lines, $_;
}
flush_em();
' 39a61b6 5c8a5f0