From d320a5437f8304cf9ea3ee1898e49d643e005738 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 2 Mar 2006 17:14:00 -0800 Subject: [PATCH] show-branch --topics This adds a new flag, --topics, to help managing topic branches. When you have topic branches forked some time ago from your primary line of development, show-branch would show many "uninteresting" things that happend on the primary line of development when trying to see what are still not merged from the topic branches. With this flag, the first ref given to show-branch is taken as the primary branch, and the rest are taken as the topic branches. Output from the command is modified so that commits only on the primary branch are not shown. In other words, $ git show-branch --topics master topic1 topic2 ... shows an (almost) equivalent of $ git rev-list ^master topic1 topic2 ... The major differences are that (1) you can tell which commits are on which branch, and (2) the commit at the fork point is shown. Signed-off-by: Junio C Hamano --- show-branch.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/show-branch.c b/show-branch.c index 5a86ae2f9e..452e63f786 100644 --- a/show-branch.c +++ b/show-branch.c @@ -5,7 +5,7 @@ #include "refs.h" static const char show_branch_usage[] = -"git-show-branch [--current] [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [...]"; +"git-show-branch [--current] [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [...]"; static int default_num = 0; static int default_alloc = 0; @@ -547,6 +547,7 @@ int main(int ac, char **av) int shown_merge_point = 0; int with_current_branch = 0; int head_at = -1; + int topics = 0; setup_git_directory(); git_config(git_show_branch_config); @@ -587,6 +588,8 @@ int main(int ac, char **av) independent = 1; else if (!strcmp(arg, "--topo-order")) lifo = 1; + else if (!strcmp(arg, "--topics")) + topics = 1; else if (!strcmp(arg, "--date-order")) lifo = 0; else @@ -729,6 +732,20 @@ int main(int ac, char **av) if (1 < num_rev) { int is_merge = !!(commit->parents && commit->parents->next); + if (topics) { + int interesting = 0; + for (i = 1; i < num_rev; i++) { + if ((this_flag & + (1u << (i + REV_SHIFT)))) { + interesting = 1; + break; + } + } + if (!interesting) + continue; + } + + for (i = 0; i < num_rev; i++) { int mark; if (!(this_flag & (1u << (i + REV_SHIFT))))