All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Schubert <mschub@elegosoft.com>
To: git@vger.kernel.org
Subject: [RFC] branch: list branches by single remote
Date: Tue, 02 Aug 2011 19:17:38 +0200	[thread overview]
Message-ID: <4E383132.3040907@elegosoft.com> (raw)

I've always missed some option for "git branch" to limit the output to a single
remote. What's the right place to filter the output? The code below doesn't
look very smart..

---
 builtin/branch.c |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/builtin/branch.c b/builtin/branch.c
index 3142daa..22e6be2 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -17,7 +17,7 @@
 #include "revision.h"
 
 static const char * const builtin_branch_usage[] = {
-	"git branch [options] [-r | -a] [--merged | --no-merged]",
+	"git branch [options] [-r | -a] [-R <remote>] [--merged | --no-merged]",
 	"git branch [options] [-l] [-f] <branchname> [<start-point>]",
 	"git branch [options] [-r] (-d | -D) <branchname>...",
 	"git branch [options] (-m | -M) [<oldbranch>] <newbranch>",
@@ -260,6 +260,7 @@ static char *resolve_symref(const char *src, const char *prefix)
 
 struct append_ref_cb {
 	struct ref_list *ref_list;
+	const char *remote;
 	int ret;
 };
 
@@ -297,6 +298,9 @@ static int append_ref(const char *refname, const unsigned char *sha1, int flags,
 	if ((kind & ref_list->kinds) == 0)
 		return 0;
 
+	if (cb->remote && strncmp(cb->remote, refname, strlen(cb->remote)))
+		return 0;
+
 	commit = NULL;
 	if (ref_list->verbose || ref_list->with_commit || merge_filter != NO_FILTER) {
 		commit = lookup_commit_reference_gently(sha1, 1);
@@ -492,7 +496,7 @@ static void show_detached(struct ref_list *ref_list)
 	}
 }
 
-static int print_ref_list(int kinds, int detached, int verbose, int abbrev, struct commit_list *with_commit)
+static int print_ref_list(int kinds, int detached, int verbose, int abbrev, struct commit_list *with_commit, const char *only)
 {
 	int i;
 	struct append_ref_cb cb;
@@ -506,6 +510,7 @@ static int print_ref_list(int kinds, int detached, int verbose, int abbrev, stru
 	if (merge_filter != NO_FILTER)
 		init_revisions(&ref_list.revs, NULL);
 	cb.ref_list = &ref_list;
+	cb.remote = only;
 	cb.ret = 0;
 	for_each_rawref(append_ref, &cb);
 	if (merge_filter != NO_FILTER) {
@@ -618,6 +623,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	enum branch_track track;
 	int kinds = REF_LOCAL_BRANCH;
 	struct commit_list *with_commit = NULL;
+	char *single_remote = NULL;
 
 	struct option options[] = {
 		OPT_GROUP("Generic options"),
@@ -647,6 +653,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 		OPT_GROUP("Specific git-branch actions:"),
 		OPT_SET_INT('a', NULL, &kinds, "list both remote-tracking and local branches",
 			REF_REMOTE_BRANCH | REF_LOCAL_BRANCH),
+		OPT_STRING('R', NULL, &single_remote, "remote", "list only branches by remote"),
 		OPT_BIT('d', NULL, &delete, "delete fully merged branch", 1),
 		OPT_BIT('D', NULL, &delete, "delete branch (even if not merged)", 2),
 		OPT_BIT('m', NULL, &rename, "move/rename a branch and its reflog", 1),
@@ -696,10 +703,13 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
 	if (!!delete + !!rename + !!force_create > 1)
 		usage_with_options(builtin_branch_usage, options);
 
+	if (single_remote)
+		kinds = REF_REMOTE_BRANCH;
+
 	if (delete)
 		return delete_branches(argc, argv, delete > 1, kinds);
 	else if (argc == 0)
-		return print_ref_list(kinds, detached, verbose, abbrev, with_commit);
+		return print_ref_list(kinds, detached, verbose, abbrev, with_commit, single_remote);
 	else if (rename && (argc == 1))
 		rename_branch(head, argv[0], rename > 1);
 	else if (rename && (argc == 2))
-- 
1.7.6.396.ge0613.dirty

             reply	other threads:[~2011-08-02 17:18 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-02 17:17 Michael Schubert [this message]
2011-08-04  4:06 ` [RFC] branch: list branches by single remote Jeff King
2011-08-16 13:37   ` Michael J Gruber
2011-08-16 14:19     ` Michael Schubert
2011-08-16 15:14     ` Jeff King
2011-08-24 15:14       ` Michael Schubert
2011-08-24 15:37         ` Michael J Gruber
2011-08-24 16:02           ` Michael Schubert
2011-08-24 18:34           ` Junio C Hamano
2011-08-25  2:31             ` Thiago Farina
2011-08-25 18:02               ` Junio C Hamano
2011-08-25  8:29             ` Michael J Gruber
2011-08-25  8:30               ` [PATCH 0/5] RFC: patterns for branch list Michael J Gruber
2011-08-25  8:30                 ` [PATCH 1/5] branch: allow pattern arguments Michael J Gruber
2011-08-25 17:54                   ` Jeff King
2011-08-25 18:32                     ` Junio C Hamano
2011-08-25 19:29                       ` Junio C Hamano
2011-08-25  8:30                 ` [PATCH 2/5] branch: introduce --list argument Michael J Gruber
2011-08-25 18:34                   ` Junio C Hamano
2011-08-25 19:52                   ` Junio C Hamano
2011-08-25  8:30                 ` [PATCH 3/5] t6040; test branch -vv Michael J Gruber
2011-08-25  8:30                 ` [PATCH 4/5] branch: restructure -v vs. -vv Michael J Gruber
2011-08-25 19:02                   ` Junio C Hamano
2011-08-25  8:30                 ` [PATCH 5/5] branch: give patchsame count with -vvv Michael J Gruber
2011-08-25 17:53                 ` [PATCH 0/5] RFC: patterns for branch list Jeff King
2011-08-26  8:30                   ` Michael J Gruber
2011-08-26 16:55                     ` Junio C Hamano
2011-09-07 19:53                       ` Jeff King
2011-09-08  9:20                         ` Michael J Gruber
2011-08-26 14:05                   ` [PATCHv2 0/5] " Michael J Gruber
2011-08-26 14:05                     ` [PATCHv2 1/5] t6040: test branch -vv Michael J Gruber
2011-08-26 14:05                     ` [PATCHv2 2/5] git-tag: introduce long forms for the options Michael J Gruber
2011-08-26 17:11                       ` Junio C Hamano
2011-08-28 14:03                         ` Michael J Gruber
2011-08-26 14:05                     ` [PATCHv2 3/5] git-branch: introduce missing " Michael J Gruber
2011-08-26 17:13                       ` Junio C Hamano
2011-08-28 14:05                         ` Michael J Gruber
2011-08-26 14:05                     ` [PATCHv2 4/5] branch: introduce --list option Michael J Gruber
2011-08-26 17:43                       ` Junio C Hamano
2011-08-28 14:37                         ` Michael J Gruber
2011-09-07 19:56                           ` Jeff King
2011-09-08  9:24                             ` Michael J Gruber
2011-09-08 14:25                               ` [PATCHv4 0/5] mg/branch-list amendment Michael J Gruber
2011-09-08 14:25                                 ` [PATCHv4 4/5] branch: introduce --list option Michael J Gruber
2011-09-08 14:25                                 ` [PATCHv4 5/5] branch: allow pattern arguments Michael J Gruber
2011-09-08 21:03                               ` [PATCHv2 4/5] branch: introduce --list option Junio C Hamano
2011-09-08 21:11                                 ` Jeff King
2011-09-08 21:17                                 ` Junio C Hamano
2011-09-09  1:08                                   ` Jeff King
2011-09-09  6:54                                   ` Michael J Gruber
2011-09-09 16:02                                     ` Junio C Hamano
2011-09-09 19:29                                       ` Michael J Gruber
2011-09-09 19:30                                         ` Jeff King
2011-09-09 19:40                                           ` [PATCH] t3200: test branch creation with -v Michael J Gruber
2011-09-09 19:43                                             ` Jeff King
2011-09-09 19:45                                               ` Jeff King
2011-09-10 13:29                                               ` Michael J Gruber
2011-09-13  3:57                                                 ` Jeff King
2011-09-13 12:12                                                   ` Michael J Gruber
2011-09-13 16:13                                                     ` [PATCH] t3200: clean up checks for file existence Jeff King
2011-09-13 17:13                                                       ` Junio C Hamano
2011-09-13 17:16                                                         ` Jeff King
2011-08-26 14:05                     ` [PATCHv2 5/5] branch: allow pattern arguments Michael J Gruber
2011-08-26 18:45                       ` Junio C Hamano
2011-08-28 14:54                     ` [PATCHv3 0/5] patterns for branch list Michael J Gruber
2011-08-28 14:54                       ` [PATCHv3 1/5] t6040: test branch -vv Michael J Gruber
2011-08-28 14:54                       ` [PATCHv3 2/5] git-tag: introduce long forms for the options Michael J Gruber
2011-08-28 14:54                       ` [PATCHv3 3/5] git-branch: introduce missing " Michael J Gruber
2011-08-28 14:54                       ` [PATCHv3 4/5] branch: introduce --list option Michael J Gruber
2011-08-29  5:55                         ` Junio C Hamano
2011-08-29  6:35                           ` Michael J Gruber
2011-08-29  6:51                             ` Junio C Hamano
2011-08-28 14:54                       ` [PATCHv3 5/5] branch: allow pattern arguments Michael J Gruber
2011-09-06 13:10                         ` Michael Schubert
2011-09-06 14:21                           ` Michael J Gruber
2011-09-06 14:26                             ` Sverre Rabbelier
2011-09-06 16:11                               ` Michael J Gruber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E383132.3040907@elegosoft.com \
    --to=mschub@elegosoft.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.