projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] Debian: build-depend on "bc"
[git.git]
/
apply.c
diff --git
a/apply.c
b/apply.c
index
c671d9e
..
964df2d
100644
(file)
--- a/
apply.c
+++ b/
apply.c
@@
-387,7
+387,7
@@
static char *git_header_name(char *line)
default:
continue;
case '\n':
default:
continue;
case '\n':
-
break
;
+
return NULL
;
case '\t': case ' ':
second = name+len;
for (;;) {
case '\t': case ' ':
second = name+len;
for (;;) {
@@
-563,7
+563,7
@@
static int find_header(char *line, unsigned long size, int *hdrsize, struct patc
struct fragment dummy;
if (parse_fragment_header(line, len, &dummy) < 0)
continue;
struct fragment dummy;
if (parse_fragment_header(line, len, &dummy) < 0)
continue;
- error("patch fragment without header at line %d: %.*s", linenr, len-1, line);
+ error("patch fragment without header at line %d: %.*s", linenr,
(int)
len-1, line);
}
if (size < len + 6)
}
if (size < len + 6)
@@
-672,9
+672,13
@@
static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
added++;
newlines--;
break;
added++;
newlines--;
break;
- /* We allow "\ No newline at end of file" */
+
+ /* We allow "\ No newline at end of file". Depending
+ * on locale settings when the patch was produced we
+ * don't know what this line looks like. The only
+ * thing we do know is that it begins with "\ ". */
case '\\':
case '\\':
- if (len < 12 || memcmp(line, "\\
No newline", 1
2))
+ if (len < 12 || memcmp(line, "\\
",
2))
return -1;
break;
}
return -1;
break;
}
@@
-683,7
+687,7
@@
static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
* it in the above loop because we hit oldlines == newlines == 0
* before seeing it.
*/
* it in the above loop because we hit oldlines == newlines == 0
* before seeing it.
*/
- if (12 < size && !memcmp(line, "\\
No newline", 1
2))
+ if (12 < size && !memcmp(line, "\\
",
2))
offset += linelen(line, size);
patch->lines_added += added;
offset += linelen(line, size);
patch->lines_added += added;
@@
-968,7
+972,7
@@
static int apply_fragments(struct buffer_desc *desc, struct patch *patch)
while (frag) {
if (apply_one_fragment(desc, frag) < 0)
while (frag) {
if (apply_one_fragment(desc, frag) < 0)
- return error("patch failed: %s:%d", patch->old_name, frag->oldpos);
+ return error("patch failed: %s:%
l
d", patch->old_name, frag->oldpos);
frag = frag->next;
}
return 0;
frag = frag->next;
}
return 0;
@@
-1043,8
+1047,12
@@
static int check_patch(struct patch *patch)
return error("%s: already exists in working directory", new_name);
if (errno != ENOENT)
return error("%s: %s", new_name, strerror(errno));
return error("%s: already exists in working directory", new_name);
if (errno != ENOENT)
return error("%s: %s", new_name, strerror(errno));
- if (!patch->new_mode)
- patch->new_mode = S_IFREG | 0644;
+ if (!patch->new_mode) {
+ if (patch->is_new)
+ patch->new_mode = S_IFREG | 0644;
+ else
+ patch->new_mode = patch->old_mode;
+ }
}
if (new_name && old_name) {
}
if (new_name && old_name) {
@@
-1373,7
+1381,7
@@
static struct excludes {
static int use_patch(struct patch *p)
{
static int use_patch(struct patch *p)
{
- const char *pathname = p->new_name ? : p->old_name;
+ const char *pathname = p->new_name ?
p->new_name
: p->old_name;
struct excludes *x = excludes;
while (x) {
if (fnmatch(x->path, pathname, 0) == 0)
struct excludes *x = excludes;
while (x) {
if (fnmatch(x->path, pathname, 0) == 0)