Re: [PATCH] Remove the line length limit for graft files
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:59:31
Hi, On Fri, 27 Dec 2013, Jonathan Nieder wrote:
Johannes Schindelin wrote: [...]quoted
--- builtin/blame.c | 8 ++++---- commit.c | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-)Is this easy to reproduce so some interested but lazy person could write a test?
Yep. Make 25 orphan commits, add a graft line to make the first a merge of the rest.
quoted
--- a/builtin/blame.c +++ b/builtin/blame.c@@ -1804,17 +1804,17 @@ static int prepare_lines(struct scoreboard *sb) static int read_ancestry(const char *graft_file) { FILE *fp = fopen(graft_file, "r"); - char buf[1024]; + struct strbuf buf = STRBUF_INIT; if (!fp) return -1; - while (fgets(buf, sizeof(buf), fp)) { + while (!strbuf_getwholeline(&buf, fp, '\n')) {If there is no newline at EOF, this will skip the last line, while the old behavior was to pay attention to it. I haven't thought through whether that's a good or bad change. Maybe it should just be documented?
The way I read
int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
{
int ch;
if (feof(fp))
return EOF;
strbuf_reset(sb);
while ((ch = fgetc(fp)) != EOF) {
strbuf_grow(sb, 1);
sb->buf[sb->len++] = ch;
if (ch == term)
break;
}
if (ch == EOF && sb->len == 0)
return EOF;
sb->buf[sb->len] = '\0';
return 0;
}
it returns EOF only if ch == EOF *and* sb->len == 0, i.e. if no characters
have been read before hitting EOF.
In other words, strbuf_getwholeline() -- despite requiring an explicit
terminating character argument -- does not require the last line to end
with that terminating character.
A quick test (in my case, because I am lazy, modifying test-mergesort.c to
output the lines that were read by strbuf_getwholeline()) also confirms my
suspicion.
Or maybe I missed something?
Ciao,
Dscho
--
--
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.
You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en
---
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.