projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make path-limiting be incremental when possible.
[git.git]
/
apply.c
diff --git
a/apply.c
b/apply.c
index
453482a
..
c50b3a6
100644
(file)
--- a/
apply.c
+++ b/
apply.c
@@
-32,7
+32,7
@@
static int no_add = 0;
static int show_index_info = 0;
static int line_termination = '\n';
static const char apply_usage[] =
static int show_index_info = 0;
static int line_termination = '\n';
static const char apply_usage[] =
-"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [-pNUM] <patch>...";
+"git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [-pNUM]
[--whitespace=<nowarn|warn|error|error-all|strip>]
<patch>...";
static enum whitespace_eol {
nowarn_whitespace,
static enum whitespace_eol {
nowarn_whitespace,
@@
-651,7
+651,7
@@
static int parse_git_header(char *line, int len, unsigned int size, struct patch
len = linelen(line, size);
if (!len || line[len-1] != '\n')
break;
len = linelen(line, size);
if (!len || line[len-1] != '\n')
break;
- for (i = 0; i <
sizeof(optable) / sizeof(optable[0]
); i++) {
+ for (i = 0; i <
ARRAY_SIZE(optable
); i++) {
const struct opentry *p = optable + i;
int oplen = strlen(p->str);
if (len < oplen || memcmp(p->str, line, oplen))
const struct opentry *p = optable + i;
int oplen = strlen(p->str);
if (len < oplen || memcmp(p->str, line, oplen))
@@
-693,7
+693,7
@@
static int parse_range(const char *line, int len, int offset, const char *expect
line += digits;
len -= digits;
line += digits;
len -= digits;
- *p2 =
*p
1;
+ *p2 = 1;
if (*line == ',') {
digits = parse_num(line+1, p2);
if (!digits)
if (*line == ',') {
digits = parse_num(line+1, p2);
if (!digits)
@@
-834,7
+834,7
@@
static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
patch->new_name = NULL;
}
patch->new_name = NULL;
}
- if (patch->is_new
!= !
oldlines)
+ if (patch->is_new
&&
oldlines)
return error("new file depends on old contents");
if (patch->is_delete != !newlines) {
if (newlines)
return error("new file depends on old contents");
if (patch->is_delete != !newlines) {
if (newlines)
@@
-901,6
+901,8
@@
static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
break;
}
}
break;
}
}
+ if (oldlines || newlines)
+ return -1;
/* If a fragment ends with an incomplete line, we failed to include
* it in the above loop because we hit oldlines == newlines == 0
* before seeing it.
/* If a fragment ends with an incomplete line, we failed to include
* it in the above loop because we hit oldlines == newlines == 0
* before seeing it.
@@
-1232,6
+1234,14
@@
static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag)
size -= len;
}
size -= len;
}
+#ifdef NO_ACCURATE_DIFF
+ if (oldsize > 0 && old[oldsize - 1] == '\n' &&
+ newsize > 0 && new[newsize - 1] == '\n') {
+ oldsize--;
+ newsize--;
+ }
+#endif
+
offset = find_offset(buf, desc->size, old, oldsize, frag->newpos);
if (offset >= 0) {
int diff = newsize - oldsize;
offset = find_offset(buf, desc->size, old, oldsize, frag->newpos);
if (offset >= 0) {
int diff = newsize - oldsize;
@@
-1394,12
+1404,13
@@
static int check_patch(struct patch *patch)
costate.not_new = 0;
costate.refresh_cache = 1;
if (checkout_entry(active_cache[pos],
costate.not_new = 0;
costate.refresh_cache = 1;
if (checkout_entry(active_cache[pos],
- &costate) ||
+ &costate,
+ NULL) ||
lstat(old_name, &st))
return -1;
}
lstat(old_name, &st))
return -1;
}
- changed = ce_match_stat(active_cache[pos], &st);
+ changed = ce_match_stat(active_cache[pos], &st
, 1
);
if (changed)
return error("%s: does not match index",
old_name);
if (changed)
return error("%s: does not match index",
old_name);