Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Jun 26, 2006
  1. @tihirvon

    Add msg_sep to diff_options

    tihirvon authored Junio C Hamano committed
    Add msg_sep variable to struct diff_options.  msg_sep is printed after
    commit message.  Default is "\n", format-patch sets it to "---\n".
    This also removes the second argument from show_log() because all
    callers derived it from the first argument:
        show_log(rev, rev->loginfo, ...
    Signed-off-by: Timo Hirvonen <>
    Signed-off-by: Junio C Hamano <>
Commits on Apr 17, 2006
  1. Log message printout cleanups

    Linus Torvalds authored Junio C Hamano committed
    On Sun, 16 Apr 2006, Junio C Hamano wrote:
    > In the mid-term, I am hoping we can drop the generate_header()
    > callchain _and_ the custom code that formats commit log in-core,
    > found in cmd_log_wc().
    Ok, this was nastier than expected, just because the dependencies between
    the different log-printing stuff were absolutely _everywhere_, but here's
    a patch that does exactly that.
    The patch is not very easy to read, and the "--patch-with-stat" thing is
    still broken (it does not call the "show_log()" thing properly for
    merges). That's not a new bug. In the new world order it _should_ do
    something like
    	if (rev->logopt)
    		show_log(rev, rev->logopt, "---\n");
    but it doesn't. I haven't looked at the --with-stat logic, so I left it
    That said, this patch removes more lines than it adds, and in particular,
    the "cmd_log_wc()" loop is now a very clean:
    	while ((commit = get_revision(rev)) != NULL) {
    		log_tree_commit(rev, commit);
    		commit->buffer = NULL;
    so it doesn't get much prettier than this. All the complexity is entirely
    hidden in log-tree.c, and any code that needs to flush the log literally
    just needs to do the "if (rev->logopt) show_log(...)" incantation.
    I had to make the combined_diff() logic take a "struct rev_info" instead
    of just a "struct diff_options", but that part is pretty clean.
    This does change "git whatchanged" from using "diff-tree" as the commit
    descriptor to "commit", and I changed one of the tests to reflect that new
    reality. Otherwise everything still passes, and my other tests look fine
    Signed-off-by: Linus Torvalds <>
    Signed-off-by: Junio C Hamano <>
Commits on Apr 15, 2006
  1. Common option parsing for "git log --diff" and friends

    Linus Torvalds authored Junio C Hamano committed
    This basically does a few things that are sadly somewhat interdependent,
    and nontrivial to split out
     - get rid of "struct log_tree_opt"
       The fields in "log_tree_opt" are moved into "struct rev_info", and all
       users of log_tree_opt are changed to use the rev_info struct instead.
     - add the parsing for the log_tree_opt arguments to "setup_revision()"
     - make setup_revision set a flag (revs->diff) if the diff-related
       arguments were used. This allows "git log" to decide whether it wants
       to show diffs or not.
     - make setup_revision() also initialize the diffopt part of rev_info
       (which we had from before, but we just didn't initialize it)
     - make setup_revision() do all the "finishing touches" on it all (it will
       do the proper flag combination logic, and call "diff_setup_done()")
    Now, that was the easy and straightforward part.
    The slightly more involved part is that some of the programs that want to
    use the new-and-improved rev_info parsing don't actually want _commits_,
    they may want tree'ish arguments instead. That meant that I had to change
    setup_revision() to parse the arguments not into the "revs->commits" list,
    but into the "revs->pending_objects" list.
    Then, when we do "prepare_revision_walk()", we walk that list, and create
    the sorted commit list from there.
    This actually cleaned some stuff up, but it's the less obvious part of the
    patch, and re-organized the "revision.c" logic somewhat. It actually paves
    the way for splitting argument parsing _entirely_ out of "revision.c",
    since now the argument parsing really is totally independent of the commit
    walking: that didn't use to be true, since there was lots of overlap with
    get_commit_reference() handling etc, now the _only_ overlap is the shared
    (and trivial) "add_pending_object()" thing.
    However, I didn't do that file split, just because I wanted the diff
    itself to be smaller, and show the actual changes more clearly. If this
    gets accepted, I'll do further cleanups then - that includes the file
    split, but also using the new infrastructure to do a nicer "git diff" etc.
    Even in this form, it actually ends up removing more lines than it adds.
    It's nice to note how simple and straightforward this makes the built-in
    "git log" command, even though it continues to support all the diff flags
    too. It doesn't get much simpler that this.
    I think this is worth merging soonish, because it does allow for future
    cleanup and even more sharing of code. However, it obviously touches
    "revision.c", which is subtle. I've tested that it passes all the tests we
    have, and it passes my "looks sane" detector, but somebody else should
    also give it a good look-over.
    [jc: squashed the original and three "oops this too" updates, with
     another fix-up.]
    Signed-off-by: Linus Torvalds <>
    Signed-off-by: Junio C Hamano <>
Commits on Apr 9, 2006
  1. log-tree: separate major part of diff-tree.

    Junio C Hamano authored
    This separates out the part that deals with one-commit diff-tree
    (and --stdin form) into a separate log-tree module.
    There are two goals with this.  The more important one is to be
    able to make this part available to "git log --diff", so that we
    can have a native "git whatchanged" command.  Another is to
    simplify the commit log generation part simpler.
    Signed-off-by: Junio C Hamano <>
Something went wrong with that request. Please try again.