Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > Support for grafts predates Git's strbuf, and hence it is understandable > that there was a hard-coded line length limit of 1023 characters (which > was chosen a bit awkwardly, given that it is *exactly* one byte short of > aligning with the 41 bytes occupied by a commit name and the following > space or new-line character). > > While regular commit histories hardly win comprehensibility in general > if they merge more than twenty-two branches in one go, it is not Git's > business to limit grafts in such a way. > > In this particular developer's case, the use case that requires > substantially longer graft lines to be supported is the visualization of > the commits' order implied by their changes: commits are considered to > have an implicit relationship iff exchanging them in an interactive > rebase would result in merge conflicts. > > Thusly implied branches tend to be very shallow in general, and the > resulting thicket of implied branches is usually very wide; It is > actually quite common that *most* of the commits in a topic branch have > not even one implied parent, so that a final merge commit has about as > many implied parents as there are commits in said branch. > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > builtin/blame.c | 8 ++++---- > commit.c | 10 +++++----- > 2 files changed, 9 insertions(+), 9 deletions(-) Makes sense. It is in line with the spirit of ef98c5cafb3e (commit-tree: lift completely arbitrary limit of 16 parents, 2008-06-27), too ;-) Thanks, will queue. > diff --git a/builtin/blame.c b/builtin/blame.c > index 1407ae7..9047b6e 100644 > --- 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')) { > /* The format is just "Commit Parent1 Parent2 ...\n" */ > - int len = strlen(buf); > - struct commit_graft *graft = read_graft_line(buf, len); > + struct commit_graft *graft = read_graft_line(buf.buf, buf.len); > if (graft) > register_commit_graft(graft, 0); > } > fclose(fp); > + strbuf_release(&buf); > return 0; > } > > diff --git a/commit.c b/commit.c > index de16a3c..57ebea2 100644 > --- a/commit.c > +++ b/commit.c > @@ -196,19 +196,19 @@ bad_graft_data: > static int read_graft_file(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')) { > /* The format is just "Commit Parent1 Parent2 ...\n" */ > - int len = strlen(buf); > - struct commit_graft *graft = read_graft_line(buf, len); > + struct commit_graft *graft = read_graft_line(buf.buf, buf.len); > if (!graft) > continue; > if (register_commit_graft(graft, 1)) > - error("duplicate graft data: %s", buf); > + error("duplicate graft data: %s", buf.buf); > } > fclose(fp); > + strbuf_release(&buf); > return 0; > } > > -- > 1.8.4.msysgit.0.1109.g3c58b16 > > -- -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html