On Mon, Feb 25, 2019 at 05:03:50PM +0000, Matthew Booth wrote:
> Example output:
>
> =========
> $ git --version
> git version 2.20.1
>
> $ git log -L 2957,3107:nova/compute/manager.py -s
> commit 35ce77835bb271bad3c18eaf22146edac3a42ea0
> <snip>
>
> diff --git a/nova/compute/manager.py b/nova/compute/manager.py
> --- a/nova/compute/manager.py
> +++ b/nova/compute/manager.py
> @@ -2937,152 +2921,151 @@
> def rebuild_instance(self, context, instance, orig_image_ref, image_ref,
> injected_files, new_pass, orig_sys_metadata,
> <snip>
> =========
At first I wondered why you would want to do this, since the point of -L
is to walk through that diff. But I suppose you might want to see just
the commits, without the actual patch, and that's what "-s" ought to do.
> git log docs suggest it should not do this:
>
> -s, --no-patch
> Suppress diff output. Useful for commands like git show
> that show the patch by default, or to cancel
> the effect of --patch.
>
> Couldn't find anything in a search of the archives of this mailing
> list, although that's obviously far from conclusive. Seems to be
> longstanding, as it was mentioned on StackOverflow back in 2015:
I think the issue is just that "-L" follows a very different code path
than the normal diff generator. Perhaps something like this helps?
diff --git a/line-log.c b/line-log.c
index 63df51a08f..ed46a3a493 100644
--- a/line-log.c
+++ b/line-log.c
@@ -1106,7 +1106,8 @@ int line_log_print(struct rev_info *rev, struct commit
*commit)
struct line_log_data *range = lookup_line_range(rev, commit);
show_log(rev);
- dump_diff_hacky(rev, range);
+ if (!(rev->diffopt.output_format & DIFF_FORMAT_NO_OUTPUT))
+ dump_diff_hacky(rev, range);
return 1;
}
-Peff