diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-12-16 13:08:32 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-12-16 13:08:32 -0800 |
commit | f0070a7df98540ebd0ba6ecb7aef4620efe27724 (patch) | |
tree | 7709292d94464899030197ae1b412c3a4734d0b2 /xdiff | |
parent | Merge branch 'dl/rebase-with-autobase' (diff) | |
parent | xdiff: unignore changes in function context (diff) | |
download | tgif-f0070a7df98540ebd0ba6ecb7aef4620efe27724.tar.xz |
Merge branch 'rs/xdiff-ignore-ws-w-func-context'
The "diff" machinery learned not to lose added/removed blank lines
in the context when --ignore-blank-lines and --function-context are
used at the same time.
* rs/xdiff-ignore-ws-w-func-context:
xdiff: unignore changes in function context
Diffstat (limited to 'xdiff')
-rw-r--r-- | xdiff/xemit.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/xdiff/xemit.c b/xdiff/xemit.c index 30713ae9a9..9d7d6c5087 100644 --- a/xdiff/xemit.c +++ b/xdiff/xemit.c @@ -172,10 +172,12 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, struct func_line func_line = { 0 }; for (xch = xscr; xch; xch = xche->next) { + xdchange_t *xchp = xch; xche = xdl_get_hunk(&xch, xecfg); if (!xch) break; +pre_context_calculation: s1 = XDL_MAX(xch->i1 - xecfg->ctxlen, 0); s2 = XDL_MAX(xch->i2 - xecfg->ctxlen, 0); @@ -212,6 +214,21 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, if (fs1 < s1) { s2 = XDL_MAX(s2 - (s1 - fs1), 0); s1 = fs1; + + /* + * Did we extend context upwards into an + * ignored change? + */ + while (xchp != xch && + xchp->i1 + xchp->chg1 <= s1 && + xchp->i2 + xchp->chg2 <= s2) + xchp = xchp->next; + + /* If so, show it after all. */ + if (xchp != xch) { + xch = xchp; + goto pre_context_calculation; + } } } |