author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | |
Sun, 9 Oct 2011 11:36:57 +0000 (13:36 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 10 Oct 2011 19:05:07 +0000 (12:05 -0700) | ||
commit | 14937c2c06e63f93f65e1bc6693b95d4e54053d7 | |
tree | 5258015610490cb82b160974a5d8e864416cbbd6 | tree | snapshot |
parent | f99f4b3667a83f870565bb140711f0e585999108 | commit | diff |
diff: add option to show whole functions as context
Add the option -W/--function-context to git diff. It is similar to
the same option of git grep and expands the context of change hunks
so that the whole surrounding function is shown. This "natural"
context can allow changes to be understood better.
Note: GNU patch doesn't like diffs generated with the new option;
it seems to expect context lines to be the same before and after
changes. git apply doesn't complain.
This implementation has the same shortcoming as the one in grep,
namely that there is no way to explicitly find the end of a
function. That means that a few lines of extra context are shown,
right up to the next recognized function begins. It's already
useful in its current form, though.
The function get_func_line() in xdiff/xemit.c is extended to work
forward as well as backward to find post-context as well as
pre-context. It returns the position of the first found matching
line. The func_line parameter is made optional, as we don't need
it for -W.
The enhanced function is then used in xdl_emit_diff() to extend
the context as needed. If the added context overlaps with the
next change, it is merged into the current hunk.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Add the option -W/--function-context to git diff. It is similar to
the same option of git grep and expands the context of change hunks
so that the whole surrounding function is shown. This "natural"
context can allow changes to be understood better.
Note: GNU patch doesn't like diffs generated with the new option;
it seems to expect context lines to be the same before and after
changes. git apply doesn't complain.
This implementation has the same shortcoming as the one in grep,
namely that there is no way to explicitly find the end of a
function. That means that a few lines of extra context are shown,
right up to the next recognized function begins. It's already
useful in its current form, though.
The function get_func_line() in xdiff/xemit.c is extended to work
forward as well as backward to find post-context as well as
pre-context. It returns the position of the first found matching
line. The func_line parameter is made optional, as we don't need
it for -W.
The enhanced function is then used in xdl_emit_diff() to extend
the context as needed. If the added context overlaps with the
next change, it is merged into the current hunk.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/diff-options.txt | diff | blob | history | |
diff.c | diff | blob | history | |
diff.h | diff | blob | history | |
t/t4051-diff-function-context.sh | [new file with mode: 0644] | blob |
xdiff/xdiff.h | diff | blob | history | |
xdiff/xemit.c | diff | blob | history |