Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
builtin-apply.c: do not feed copy_wsfix() leading '+'
author
Junio C Hamano
<gitster@pobox.com>
Wed, 30 Jan 2008 22:27:50 +0000
(14:27 -0800)
committer
Junio C Hamano
<gitster@pobox.com>
Tue, 5 Feb 2008 08:38:41 +0000
(
00:38
-0800)
The "patch" parameter used to include leading '+' of an added
line in the patch, and the array was treated as 1-based. Make
it accept the contents of the line alone and simplify the code.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-apply.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
8441a9a
)
diff --git
a/builtin-apply.c
b/builtin-apply.c
index d0d008fde14df5346a8e593443aa196728908714..0bc33bdd523d3edd56f4be30f9cd5fc741f24a7a 100644
(file)
--- a/
builtin-apply.c
+++ b/
builtin-apply.c
@@
-1646,16
+1646,15
@@
static int copy_wsfix(char *output, const char *patch, int plen,
unsigned ws_rule)
{
/*
unsigned ws_rule)
{
/*
- * plen is number of bytes to be copied from patch,
- * starting at patch+1 (patch[0] is '+'). Typically
- * patch[plen] is '\n', unless this is the incomplete
- * last line.
+ * plen is number of bytes to be copied from patch, starting
+ * at patch. Typically patch[plen-1] is '\n', unless this is
+ * the incomplete last line.
*/
int i;
int add_nl_to_tail = 0;
int fixed = 0;
*/
int i;
int add_nl_to_tail = 0;
int fixed = 0;
- int last_tab_in_indent =
0
;
- int last_space_in_indent =
0
;
+ int last_tab_in_indent =
-1
;
+ int last_space_in_indent =
-1
;
int need_fix_leading_space = 0;
char *buf;
int need_fix_leading_space = 0;
char *buf;
@@
-1663,11
+1662,11
@@
static int copy_wsfix(char *output, const char *patch, int plen,
* Strip trailing whitespace
*/
if ((ws_rule & WS_TRAILING_SPACE) &&
* Strip trailing whitespace
*/
if ((ws_rule & WS_TRAILING_SPACE) &&
- (
1 < plen && isspace(patch[plen-1
]))) {
- if (patch[plen] == '\n')
+ (
2 < plen && isspace(patch[plen-2
]))) {
+ if (patch[plen
-1
] == '\n')
add_nl_to_tail = 1;
plen--;
add_nl_to_tail = 1;
plen--;
- while (0 < plen && isspace(patch[plen]))
+ while (0 < plen && isspace(patch[plen
-1
]))
plen--;
fixed = 1;
}
plen--;
fixed = 1;
}
@@
-1675,25
+1674,25
@@
static int copy_wsfix(char *output, const char *patch, int plen,
/*
* Check leading whitespaces (indent)
*/
/*
* Check leading whitespaces (indent)
*/
- for (i =
1
; i < plen; i++) {
+ for (i =
0
; i < plen; i++) {
char ch = patch[i];
if (ch == '\t') {
last_tab_in_indent = i;
if ((ws_rule & WS_SPACE_BEFORE_TAB) &&
char ch = patch[i];
if (ch == '\t') {
last_tab_in_indent = i;
if ((ws_rule & WS_SPACE_BEFORE_TAB) &&
- 0 < last_space_in_indent)
+ 0 <
=
last_space_in_indent)
need_fix_leading_space = 1;
} else if (ch == ' ') {
last_space_in_indent = i;
if ((ws_rule & WS_INDENT_WITH_NON_TAB) &&
8 <= i - last_tab_in_indent)
need_fix_leading_space = 1;
need_fix_leading_space = 1;
} else if (ch == ' ') {
last_space_in_indent = i;
if ((ws_rule & WS_INDENT_WITH_NON_TAB) &&
8 <= i - last_tab_in_indent)
need_fix_leading_space = 1;
- }
- else
+ } else
break;
}
buf = output;
if (need_fix_leading_space) {
break;
}
buf = output;
if (need_fix_leading_space) {
+ /* Process indent ourselves */
int consecutive_spaces = 0;
int last = last_tab_in_indent + 1;
int consecutive_spaces = 0;
int last = last_tab_in_indent + 1;
@@
-1706,10
+1705,10
@@
static int copy_wsfix(char *output, const char *patch, int plen,
}
/*
}
/*
- * between patch[
1..last
], strip the funny spaces,
+ * between patch[
0..last-1
], strip the funny spaces,
* updating them to tab as needed.
*/
* updating them to tab as needed.
*/
- for (i =
1; i < last; i++, plen--
) {
+ for (i =
0; i < last; i++
) {
char ch = patch[i];
if (ch != ' ') {
consecutive_spaces = 0;
char ch = patch[i];
if (ch != ' ') {
consecutive_spaces = 0;
@@
-1724,13
+1723,12
@@
static int copy_wsfix(char *output, const char *patch, int plen,
}
while (0 < consecutive_spaces--)
*output++ = ' ';
}
while (0 < consecutive_spaces--)
*output++ = ' ';
+ plen -= last;
+ patch += last;
fixed = 1;
fixed = 1;
- i = last;
}
}
- else
- i = 1;
- memcpy(output, patch
+ i
, plen);
+ memcpy(output, patch, plen);
if (add_nl_to_tail)
output[plen++] = '\n';
if (fixed)
if (add_nl_to_tail)
output[plen++] = '\n';
if (fixed)
@@
-1871,7
+1869,7
@@
static int apply_one_fragment(struct image *img, struct fragment *frag,
added = plen;
}
else {
added = plen;
}
else {
- added = copy_wsfix(new, patch, plen, ws_rule);
+ added = copy_wsfix(new, patch
+ 1
, plen, ws_rule);
}
add_line_info(&postimage, new, added,
(first == '+' ? 0 : LINE_COMMON));
}
add_line_info(&postimage, new, added,
(first == '+' ? 0 : LINE_COMMON));