From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Introduce Git.pm (v3)
Date: Sat, 24 Jun 2006 22:10:11 +0200 (CEST) [thread overview]
Message-ID: <Pine.LNX.4.63.0606242207510.29667@wbgn013.biozentrum.uni-wuerzburg.de> (raw)
In-Reply-To: <7vzmg35pkt.fsf@assigned-by-dhcp.cox.net>
Hi,
On Fri, 23 Jun 2006, Junio C Hamano wrote:
> By the way, I noticed NO_ACCURATE_DIFF is a compile time option
> to cause git-apply to accept diff output from implementations
> that botch "\No newline at the end of file", and I think it is
> wrong -- it should be a run time option to git-apply if we would
> want to support it, because the version of diff you have does
> not have much to do with which implementations of diff were used
> to generate patches you would receive and apply.
>
> Thoughts?
My original idea: on a machine where you have no accurate diff, you at
least want to pass the tests, and you want to ensure you can apply a diff
you generated on that machine.
But I was wrong. This patch is just compile tested, but obviously correct
(lacking usage() and Documentation updates as usual, since I do not want
to do that work before I know the patch is applied):
---
[PATCH] apply: add --no-accurate-diff and --accurate-diff options
You can still set the default behaviour in the Makefile, but at least you
can override it.
Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---
builtin-apply.c | 32 +++++++++++++++++++++++---------
1 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/builtin-apply.c b/builtin-apply.c
index e113c74..2d26ade 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -125,6 +125,7 @@ #define BINARY_LITERAL_DEFLATED 2
unsigned long deflate_origlen;
int lines_added, lines_deleted;
int score;
+ int no_accurate_diff:1;
struct fragment *fragments;
char *result;
unsigned long resultsize;
@@ -1333,7 +1334,8 @@ static int apply_line(char *output, cons
return plen;
}
-static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag)
+static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag,
+ int no_accurate_diff)
{
int match_beginning, match_end;
char *buf = desc->buffer;
@@ -1386,13 +1388,11 @@ static int apply_one_fragment(struct buf
size -= len;
}
-#ifdef NO_ACCURATE_DIFF
- if (oldsize > 0 && old[oldsize - 1] == '\n' &&
+ if (no_accurate_diff && oldsize > 0 && old[oldsize - 1] == '\n' &&
newsize > 0 && new[newsize - 1] == '\n') {
oldsize--;
newsize--;
}
-#endif
oldlines = old;
newlines = new;
@@ -1614,7 +1614,7 @@ static int apply_fragments(struct buffer
return apply_binary(desc, patch);
while (frag) {
- if (apply_one_fragment(desc, frag) < 0)
+ if (apply_one_fragment(desc, frag, patch->no_accurate_diff) < 0)
return error("patch failed: %s:%ld",
name, frag->oldpos);
frag = frag->next;
@@ -2097,7 +2097,7 @@ static int use_patch(struct patch *p)
return 1;
}
-static int apply_patch(int fd, const char *filename)
+static int apply_patch(int fd, const char *filename, int no_accurate_diff)
{
unsigned long offset, size;
char *buffer = read_patch_file(fd, &size);
@@ -2113,6 +2113,7 @@ static int apply_patch(int fd, const cha
int nr;
patch = xcalloc(1, sizeof(*patch));
+ patch->no_accurate_diff = no_accurate_diff;
nr = parse_chunk(buffer + offset, size, patch);
if (nr < 0)
break;
@@ -2180,6 +2181,11 @@ int cmd_apply(int argc, const char **arg
{
int i;
int read_stdin = 1;
+#ifdef NO_ACCURATE_DIFF
+ int no_accurate_diff = 1;
+#else
+ int no_accurate_diff = 0;
+#endif
const char *whitespace_option = NULL;
for (i = 1; i < argc; i++) {
@@ -2188,7 +2194,7 @@ int cmd_apply(int argc, const char **arg
int fd;
if (!strcmp(arg, "-")) {
- apply_patch(0, "<stdin>");
+ apply_patch(0, "<stdin>", no_accurate_diff);
read_stdin = 0;
continue;
}
@@ -2265,6 +2271,14 @@ int cmd_apply(int argc, const char **arg
parse_whitespace_option(arg + 13);
continue;
}
+ if (!strcmp(arg, "--no-accurate-diff")) {
+ no_accurate_diff = 1;
+ continue;
+ }
+ if (!strcmp(arg, "--accurate-diff")) {
+ no_accurate_diff = 0;
+ continue;
+ }
if (check_index && prefix_length < 0) {
prefix = setup_git_directory();
@@ -2281,12 +2295,12 @@ int cmd_apply(int argc, const char **arg
usage(apply_usage);
read_stdin = 0;
set_default_whitespace_mode(whitespace_option);
- apply_patch(fd, arg);
+ apply_patch(fd, arg, no_accurate_diff);
close(fd);
}
set_default_whitespace_mode(whitespace_option);
if (read_stdin)
- apply_patch(0, "<stdin>");
+ apply_patch(0, "<stdin>", no_accurate_diff);
if (whitespace_error) {
if (squelch_whitespace_errors &&
squelch_whitespace_errors < whitespace_error) {
next prev parent reply other threads:[~2006-06-24 20:10 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-22 22:02 [PATCH] Introduce Git.pm (v3) Petr Baudis
2006-06-22 23:18 ` Junio C Hamano
2006-06-22 23:50 ` Petr Baudis
2006-06-23 0:22 ` Junio C Hamano
2006-06-23 1:12 ` Petr Baudis
2006-06-23 4:41 ` Junio C Hamano
2006-06-23 6:03 ` Jakub Narebski
2006-06-23 6:34 ` Nguyễn Thái Ngọc Duy
2006-06-23 12:45 ` Petr Baudis
2006-06-26 23:20 ` Jakub Narebski
2006-06-23 8:57 ` Junio C Hamano
2006-06-23 12:04 ` Eric W. Biederman
2006-06-23 12:39 ` Petr Baudis
2006-06-24 0:39 ` Junio C Hamano
2006-06-24 1:01 ` Junio C Hamano
2006-06-24 1:07 ` Junio C Hamano
2006-06-24 20:10 ` Johannes Schindelin [this message]
2006-06-25 1:20 ` Junio C Hamano
2006-06-25 1:54 ` Johannes Schindelin
2006-06-24 1:04 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.63.0606242207510.29667@wbgn013.biozentrum.uni-wuerzburg.de \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).