summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-11-09 22:59:23 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-11-09 23:19:50 (GMT)
commitff36de0847768873cc793afd6378d3b229591436 (patch)
tree570356837b65fbeaff2fe2ee57ff23dffc534eeb
parentc44922a7817398d63bb2b46dc599bd05c710e746 (diff)
downloadgit-ff36de0847768873cc793afd6378d3b229591436.zip
git-ff36de0847768873cc793afd6378d3b229591436.tar.gz
git-ff36de0847768873cc793afd6378d3b229591436.tar.bz2
git-apply: do not fail on binary diff when not applying nor checking.
We run git-apply with --stat and --summary at the end of the pull by default, which causes it to barf when the pull brought in changes to binary files. Just mark them as binary patch and proceed when not applying nor checking. [jc: I almost missed --check until I saw Linus did something similar.] Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--apply.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/apply.c b/apply.c
index 3e53b34..cf8aa87 100644
--- a/apply.c
+++ b/apply.c
@@ -53,7 +53,7 @@ struct fragment {
struct patch {
char *new_name, *old_name, *def_name;
unsigned int old_mode, new_mode;
- int is_rename, is_copy, is_new, is_delete;
+ int is_rename, is_copy, is_new, is_delete, is_binary;
int lines_added, lines_deleted;
int score;
struct fragment *fragments;
@@ -890,8 +890,18 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);
- if (!patchsize && !metadata_changes(patch))
- die("patch with only garbage at line %d", linenr);
+ if (!patchsize && !metadata_changes(patch)) {
+ static const char binhdr[] = "Binary files ";
+
+ if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
+ !memcmp(binhdr, buffer + hdrsize, sizeof(binhdr)-1))
+ patch->is_binary = 1;
+
+ if (patch->is_binary && !apply && !check)
+ ;
+ else
+ die("patch with only garbage at line %d", linenr);
+ }
return offset + hdrsize + patchsize;
}
@@ -949,9 +959,12 @@ static void show_stats(struct patch *patch)
add = (add * max + max_change / 2) / max_change;
del = total - add;
}
- printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
- len, name, patch->lines_added + patch->lines_deleted,
- add, pluses, del, minuses);
+ if (patch->is_binary)
+ printf(" %s%-*s | Bin\n", prefix, len, name);
+ else
+ printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
+ len, name, patch->lines_added + patch->lines_deleted,
+ add, pluses, del, minuses);
if (qname)
free(qname);
}