[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git
Subject:    Re: [PATCH] Add new git-graph command
From:       Adam Simpkins <adam () adamsimpkins ! net>
Date:       2008-03-31 18:47:38
Message-ID: 20080331184737.GA28412 () adamsimpkins ! net
[Download RAW message or body]

On Mon, Mar 31, 2008 at 08:17:28PM +0300, Teemu Likonen wrote:
> Adam Simpkins kirjoitti:
> 
> > Ultimately, it would probably be better to integrate this
> > functionality into git-log, instead of having it as a standalone
> > command.  For example, a new --graph option could be added to cause
> > the graph to be displayed alongside the existing git log output.
> > However, this would require tighter integration between the graphing
> > code and the log_tree.c and pretty.c code, which I'm not all that
> > familiar with.
> 
> I just want to say that I really like your 'git graph'. I would like to 
> see it integrated to 'git log', perhaps as 'git log --pretty=graph' 
> or 'git log --graph'.

Thanks!

I was thinking more about how to add it to 'git log', and it might not
be all that difficult.  Instead of providing the graphing
functionality as a standalone command, it could be wrapped up in the
following API:

  struct graph;
  void graph_update(struct graph *graph, struct commit *commit);
  void graph_next_line(struct graph *graph, struct strbuf *sb);
  bool graph_is_commit_finished(struct graph *graph);

While walking through the commit list, graph_update() should be called
once for each commit.  After graph_update() has been called,
graph_next_line() can then be called to format the next line of the
graph into the strbuf.  It should be called multiple times, until
graph_is_commit_finished() returns true.  Then graph_update() can be
called with the next commit.

If graph_next_line() is called when graph_is_commit_finished()
returns, it would simply format straight lines for each column.  For
example, if there were currently 3 columns, it would format "| | |".
This allows graph_next_line() to be used to vertically pad the graph.

This API would allow the 'git log' code to format each line of the
graph into a strbuf, and print it out in front of each line of normal
log output.  This way, it could work even with something like
"git log --graph --pretty=full".  The graph would be prefixed to the
normal output, and padded vertically for as long as necessary.

I'm just not sure how difficult it will be to change the log-tree.c
code to invoke graph_next_line() before each individual line of
output.  It certainly shouldn't be that difficult just to implement
'git log --pretty=graph', but it may be more complicated if we want to
make the graphing be a boolean option that can be enabled with any
--pretty format.

I might try coding it up next weekend.

-- 
Adam Simpkins
adam@adamsimpkins.net
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic