Johannes Schindelin <johannes.schinde...@gmx.de> 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.schinde...@gmx.de>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to