Skip to content

Commit

Permalink
Merge branch 'jc/apply-ws-fix-tab-in-indent' into maint
Browse files Browse the repository at this point in the history
* jc/apply-ws-fix-tab-in-indent:
  test: resurrect q_to_tab
  apply --whitespace=fix: avoid running over the postimage buffer
  • Loading branch information
Junio C Hamano committed Apr 22, 2013
2 parents 2c697a6 + 329b26e commit 2124745
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 7 deletions.
16 changes: 10 additions & 6 deletions builtin/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -2117,10 +2117,10 @@ static void update_pre_post_images(struct image *preimage,

/*
* Adjust the common context lines in postimage. This can be
* done in-place when we are just doing whitespace fixing,
* which does not make the string grow, but needs a new buffer
* when ignoring whitespace causes the update, since in this case
* we could have e.g. tabs converted to multiple spaces.
* done in-place when we are shrinking it with whitespace
* fixing, but needs a new buffer when ignoring whitespace or
* expanding leading tabs to spaces.
*
* We trust the caller to tell us if the update can be done
* in place (postlen==0) or not.
*/
Expand Down Expand Up @@ -2185,7 +2185,7 @@ static int match_fragment(struct image *img,
int i;
char *fixed_buf, *buf, *orig, *target;
struct strbuf fixed;
size_t fixed_len;
size_t fixed_len, postlen;
int preimage_limit;

if (preimage->nr + try_lno <= img->nr) {
Expand Down Expand Up @@ -2335,6 +2335,7 @@ static int match_fragment(struct image *img,
strbuf_init(&fixed, preimage->len + 1);
orig = preimage->buf;
target = img->buf + try;
postlen = 0;
for (i = 0; i < preimage_limit; i++) {
size_t oldlen = preimage->line[i].len;
size_t tgtlen = img->line[try_lno + i].len;
Expand Down Expand Up @@ -2362,6 +2363,7 @@ static int match_fragment(struct image *img,
match = (tgtfix.len == fixed.len - fixstart &&
!memcmp(tgtfix.buf, fixed.buf + fixstart,
fixed.len - fixstart));
postlen += tgtfix.len;

strbuf_release(&tgtfix);
if (!match)
Expand Down Expand Up @@ -2399,8 +2401,10 @@ static int match_fragment(struct image *img,
* hunk match. Update the context lines in the postimage.
*/
fixed_buf = strbuf_detach(&fixed, &fixed_len);
if (postlen < postimage->len)
postlen = 0;
update_pre_post_images(preimage, postimage,
fixed_buf, fixed_len, 0);
fixed_buf, fixed_len, postlen);
return 1;

unmatch_exit:
Expand Down
26 changes: 26 additions & 0 deletions t/t4124-apply-ws-rule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -486,4 +486,30 @@ test_expect_success 'same, but with CR-LF line endings && cr-at-eol unset' '
test_cmp one expect
'

test_expect_success 'whitespace=fix to expand' '
qz_to_tab_space >preimage <<-\EOF &&
QQa
QQb
QQc
ZZZZZZZZZZZZZZZZd
QQe
QQf
QQg
EOF
qz_to_tab_space >patch <<-\EOF &&
diff --git a/preimage b/preimage
--- a/preimage
+++ b/preimage
@@ -1,7 +1,6 @@
QQa
QQb
QQc
-QQd
QQe
QQf
QQg
EOF
git -c core.whitespace=tab-in-indent apply --whitespace=fix patch
'

test_done
2 changes: 1 addition & 1 deletion t/t4150-am.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ test_expect_success 'setup: messages' '
vero eos et accusam et justo duo dolores et ea rebum.
EOF
q_to_tab <<-\EOF >>msg &&
qz_to_tab_space <<-\EOF >>msg &&
QDuis autem vel eum iriure dolor in hendrerit in vulputate velit
Qesse molestie consequat, vel illum dolore eu feugiat nulla facilisis
Qat vero eros et accumsan et iusto odio dignissim qui blandit
Expand Down
4 changes: 4 additions & 0 deletions t/test-lib-functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ q_to_tab () {
tr Q '\011'
}

qz_to_tab_space () {
tr QZ '\011\040'
}

append_cr () {
sed -e 's/$/Q/' | tr Q '\015'
}
Expand Down

0 comments on commit 2124745

Please sign in to comment.