Skip to content

Commit

Permalink
Merge branch 'jc/topo'
Browse files Browse the repository at this point in the history
* jc/topo:
  topo-order: make --date-order optional.
  • Loading branch information
Junio C Hamano committed Feb 18, 2006
2 parents 8fa40aa + 4c8725f commit 62a4417
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 62a4417

Please sign in to comment.