Thread (7 messages) flat view 7 messages, 2 authors, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help