Skip to content

Commit

Permalink
topo-order: make --date-order optional.
Browse files Browse the repository at this point in the history
This adds --date-order to rev-list; it is similar to topo order
in the sense that no parent comes before all of its children,
but otherwise things are still ordered in the commit timestamp
order.

The same flag is also added to show-branch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Feb 16, 2006
1 parent be97bd1 commit 4c8725f
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 9 deletions.
13 changes: 10 additions & 3 deletions commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ int count_parents(struct commit * commit)
/*
* Performs an in-place topological sort on the list supplied.
*/
void sort_in_topological_order(struct commit_list ** list)
void sort_in_topological_order(struct commit_list ** list, int lifo)
{
struct commit_list * next = *list;
struct commit_list * work = NULL, **insert;
Expand Down Expand Up @@ -630,7 +630,10 @@ void sort_in_topological_order(struct commit_list ** list)
}
next=next->next;
}

/* process the list in topological order */
if (!lifo)
sort_by_date(&work);
while (work) {
struct commit * work_item = pop_commit(&work);
struct sort_node * work_node = (struct sort_node *)work_item->object.util;
Expand All @@ -647,8 +650,12 @@ void sort_in_topological_order(struct commit_list ** list)
* guaranteeing topological order.
*/
pn->indegree--;
if (!pn->indegree)
commit_list_insert(parent, &work);
if (!pn->indegree) {
if (!lifo)
insert_by_date(parent, &work);
else
commit_list_insert(parent, &work);
}
}
parents=parents->next;
}
Expand Down
4 changes: 3 additions & 1 deletion commit.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ int count_parents(struct commit * commit);
* Post-conditions:
* invariant of resulting list is:
* a reachable from b => ord(b) < ord(a)
* in addition, when lifo == 0, commits on parallel tracks are
* sorted in the dates order.
*/
void sort_in_topological_order(struct commit_list ** list);
void sort_in_topological_order(struct commit_list ** list, int lifo);
#endif /* COMMIT_H */
11 changes: 10 additions & 1 deletion rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ static const char rev_list_usage[] =
" ordering output:\n"
" --merge-order [ --show-breaks ]\n"
" --topo-order\n"
" --date-order\n"
" formatting output:\n"
" --parents\n"
" --objects\n"
Expand Down Expand Up @@ -56,6 +57,7 @@ static int merge_order = 0;
static int show_breaks = 0;
static int stop_traversal = 0;
static int topo_order = 0;
static int lifo = 1;
static int no_merges = 0;
static const char **paths = NULL;
static int remove_empty_trees = 0;
Expand Down Expand Up @@ -856,6 +858,13 @@ int main(int argc, const char **argv)
}
if (!strcmp(arg, "--topo-order")) {
topo_order = 1;
lifo = 1;
limited = 1;
continue;
}
if (!strcmp(arg, "--date-order")) {
topo_order = 1;
lifo = 0;
limited = 1;
continue;
}
Expand Down Expand Up @@ -940,7 +949,7 @@ int main(int argc, const char **argv)
if (limited)
list = limit_list(list);
if (topo_order)
sort_in_topological_order(&list);
sort_in_topological_order(&list, lifo);
show_commit_list(list);
} else {
#ifndef NO_OPENSSL
Expand Down
1 change: 1 addition & 0 deletions rev-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ static int is_rev_argument(const char *arg)
"--show-breaks",
"--sparse",
"--topo-order",
"--date-order",
"--unpacked",
NULL
};
Expand Down
9 changes: 5 additions & 4 deletions show-branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,7 @@ int main(int ac, char **av)
int num_rev, i, extra = 0;
int all_heads = 0, all_tags = 0;
int all_mask, all_revs;
int lifo = 1;
char head_path[128];
const char *head_path_p;
int head_path_len;
Expand All @@ -544,7 +545,6 @@ int main(int ac, char **av)
int no_name = 0;
int sha1_name = 0;
int shown_merge_point = 0;
int topo_order = 0;
int with_current_branch = 0;
int head_at = -1;

Expand Down Expand Up @@ -586,7 +586,9 @@ int main(int ac, char **av)
else if (!strcmp(arg, "--independent"))
independent = 1;
else if (!strcmp(arg, "--topo-order"))
topo_order = 1;
lifo = 1;
else if (!strcmp(arg, "--date-order"))
lifo = 0;
else
usage(show_branch_usage);
ac--; av++;
Expand Down Expand Up @@ -710,8 +712,7 @@ int main(int ac, char **av)
exit(0);

/* Sort topologically */
if (topo_order)
sort_in_topological_order(&seen);
sort_in_topological_order(&seen, lifo);

/* Give names to commits */
if (!sha1_name && !no_name)
Expand Down

0 comments on commit 4c8725f

Please sign in to comment.