Skip to content

Commit

Permalink
Merge branch 'jc/binary'
Browse files Browse the repository at this point in the history
* jc/binary:
  diff --binary generates full index on binary files.
  Make apply --binary a no-op.
  • Loading branch information
Junio C Hamano committed Sep 13, 2006
2 parents f6e8dd3 + 82793c5 commit ae44b23
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 26 deletions.
13 changes: 4 additions & 9 deletions Documentation/git-apply.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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=<path-pattern>::
Don't apply changes to files matching the given path pattern. This can
Expand Down
19 changes: 5 additions & 14 deletions builtin-apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 7 additions & 1 deletion diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions t/t4103-apply-binary.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down

0 comments on commit ae44b23

Please sign in to comment.