From 2b6eef943ff81df63a809857b7b400ee175eb29b Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 6 Sep 2006 22:45:21 -0700 Subject: [PATCH 1/2] Make apply --binary a no-op. Historically we did not allow binary patch applied without an explicit permission from the user, and this flag was the way to do so. This makes the flag a no-op by always allowing binary patch application. Signed-off-by: Junio C Hamano --- Documentation/git-apply.txt | 13 ++++--------- builtin-apply.c | 19 +++++-------------- t/t4103-apply-binary.sh | 4 ++-- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt index c76cfffdc6..0a6f7b3219 100644 --- a/Documentation/git-apply.txt +++ b/Documentation/git-apply.txt @@ -110,15 +110,10 @@ OPTIONS deletion part but not addition part. --allow-binary-replacement, --binary:: - When applying a patch, which is a git-enhanced patch - that was prepared to record the pre- and post-image object - name in full, and the path being patched exactly matches - the object the patch applies to (i.e. "index" line's - pre-image object name is what is in the working tree), - and the post-image object is available in the object - database, use the post-image object as the patch - result. This allows binary files to be patched in a - very limited way. + Historically we did not allow binary patch applied + without an explicit permission from the user, and this + flag was the way to do so. Currently we always allow binary + patch application, so this is a no-op. --exclude=:: Don't apply changes to files matching the given path pattern. This can diff --git a/builtin-apply.c b/builtin-apply.c index 872c8005a2..6e0864ce27 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -28,7 +28,6 @@ static int prefix_length = -1; static int newfd = -1; static int p_value = 1; -static int allow_binary_replacement; static int check_index; static int write_index; static int cached; @@ -1228,14 +1227,12 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch) } } - /* Empty patch cannot be applied if: - * - it is a binary patch and we do not do binary_replace, or - * - text patch without metadata change + /* Empty patch cannot be applied if it is a text patch + * without metadata change. A binary patch appears + * empty to us here. */ if ((apply || check) && - (patch->is_binary - ? !allow_binary_replacement - : !metadata_changes(patch))) + (!patch->is_binary && !metadata_changes(patch))) die("patch with only garbage at line %d", linenr); } @@ -1676,11 +1673,6 @@ static int apply_binary(struct buffer_desc *desc, struct patch *patch) unsigned char hdr[50]; int hdrlen; - if (!allow_binary_replacement) - return error("cannot apply binary patch to '%s' " - "without --allow-binary-replacement", - name); - /* For safety, we require patch index line to contain * full 40-byte textual SHA1 for old and new, at least for now. */ @@ -2497,8 +2489,7 @@ int cmd_apply(int argc, const char **argv, const char *prefix) } if (!strcmp(arg, "--allow-binary-replacement") || !strcmp(arg, "--binary")) { - allow_binary_replacement = 1; - continue; + continue; /* now no-op */ } if (!strcmp(arg, "--numstat")) { apply = 0; diff --git a/t/t4103-apply-binary.sh b/t/t4103-apply-binary.sh index ff052699a2..e2b1124c78 100755 --- a/t/t4103-apply-binary.sh +++ b/t/t4103-apply-binary.sh @@ -94,11 +94,11 @@ test_expect_failure 'apply binary diff (copy) -- should fail.' \ 'do_reset git-apply --index C.diff' -test_expect_failure 'apply binary diff without replacement -- should fail.' \ +test_expect_success 'apply binary diff without replacement.' \ 'do_reset git-apply BF.diff' -test_expect_failure 'apply binary diff without replacement (copy) -- should fail.' \ +test_expect_success 'apply binary diff without replacement (copy).' \ 'do_reset git-apply CF.diff' From 82793c55e45ea1c7306ff396d8ce316241e584da Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 7 Sep 2006 00:54:22 -0700 Subject: [PATCH 2/2] diff --binary generates full index on binary files. ... without --full-index. Signed-off-by: Junio C Hamano --- diff.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/diff.c b/diff.c index 9dcbda3117..6638865709 100644 --- a/diff.c +++ b/diff.c @@ -1588,6 +1588,12 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o) if (hashcmp(one->sha1, two->sha1)) { int abbrev = o->full_index ? 40 : DEFAULT_ABBREV; + if (o->binary) { + mmfile_t mf; + if ((!fill_mmfile(&mf, one) && mmfile_is_binary(&mf)) || + (!fill_mmfile(&mf, two) && mmfile_is_binary(&mf))) + abbrev = 40; + } len += snprintf(msg + len, sizeof(msg) - len, "index %.*s..%.*s", abbrev, sha1_to_hex(one->sha1), @@ -1818,7 +1824,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->full_index = 1; else if (!strcmp(arg, "--binary")) { options->output_format |= DIFF_FORMAT_PATCH; - options->full_index = options->binary = 1; + options->binary = 1; } else if (!strcmp(arg, "-a") || !strcmp(arg, "--text")) { options->text = 1;