The option --reverse reverses the order of the commits. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@xxxxxx> --- On Sun, 21 Jan 2007, Simon 'corecode' Schubert wrote: > > [the --reverse patch] Please do not quote parts of the mail you don't really refer to. > I like this. However, rev_info.reverse needs some > documentation. Or the block in get_revision does: > > /* > * rev_info.reverse is used to note the fact that we want to output the list > * of revisions in reverse order. To accomplish this goal, reverse can have > * different values: > * 0 do nothing > * 1 reverse the list > * 2 internal use: we have already obtained and reversed the list, > * now we only need to yield its items. > */ I liked the comment in get_revision() better. But then an idea just hit me: it might make sense to introduce another flag instead, "no_walk", which says that revs->commits should be walked as is, not walking parents. And then I saw it already exists. D'oh. Documentation/git-rev-list.txt | 5 +++++ revision.c | 20 ++++++++++++++++++++ revision.h | 3 ++- 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index 86c94e7..6bb9f51 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -27,6 +27,7 @@ SYNOPSIS [ \--pretty | \--header ] [ \--bisect ] [ \--merge ] + [ \--reverse ] <commit>... [ \-- <paths>... ] DESCRIPTION @@ -249,6 +250,10 @@ By default, the commits are shown in reverse chronological order. parent comes before all of its children, but otherwise things are still ordered in the commit timestamp order. +--reverse:: + + Output the commits in reverse order. + Object Traversal ~~~~~~~~~~~~~~~~ diff --git a/revision.c b/revision.c index ebd0250..6d512ff 100644 --- a/revision.c +++ b/revision.c @@ -1057,6 +1057,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch git_log_output_encoding = ""; continue; } + if (!strcmp(arg, "--reverse")) { + revs->reverse ^= 1; + continue; + } opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i); if (opts > 0) { @@ -1285,6 +1289,22 @@ struct commit *get_revision(struct rev_info *revs) { struct commit *c = NULL; + if (revs->reverse) { + struct commit_list *list; + + revs->reverse = 0; + list = NULL; + while ((c = get_revision(revs))) + commit_list_insert(c, &list); + revs->commits = list; + revs->no_walk = 1; + /* reset flags */ + while (list) { + list->item->object.flags &= ~(ADDED | SEEN | SHOWN); + list = list->next; + } + } + if (0 < revs->skip_count) { while ((c = get_revision_1(revs)) != NULL) { if (revs->skip_count-- <= 0) diff --git a/revision.h b/revision.h index d93481f..3eb1ce4 100644 --- a/revision.h +++ b/revision.h @@ -42,7 +42,8 @@ struct rev_info { unpacked:1, /* see also ignore_packed below */ boundary:1, left_right:1, - parents:1; + parents:1, + reverse:1; /* Diff flags */ unsigned int diff:1, -- 1.5.0.rc1.g956c1-dirty - 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