From: Junio C Hamano <junkio@cox.net>
To: Quy Tonthat <qtonthat@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] git-branch: deleting remote branches in new layout
Date: Sun, 17 Dec 2006 23:49:58 -0800 [thread overview]
Message-ID: <7vodq11w49.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <7vbqm13cm0.fsf@assigned-by-dhcp.cox.net> (Junio C. Hamano's message of "Sun, 17 Dec 2006 23:08:23 -0800")
How about this instead?
Because -r already means "remote" when listing, you can say:
$ git branch -d -r origin/todo origin/html origin/man
I just twisted it not to do fast-forward check with the current
branch, because remote tracking branches are more like tags than
branches, and when you are removing them, most likely that is
not because you are "done with" them (for a local branch, it
usually means "you merged it up") but because you are not even
interested in them.
--
Junio C Hamano <junkio@cox.net> writes:
> Quy Tonthat <qtonthat@gmail.com> writes:
>
>> Now that remote branches are in refs/remotes/, branch -D needs to know
>> where to find them.
>>
>> Signed-off-by: Quy Tonthat <qtonthat@gmail.com>
>
> I recognize that giving end users a way to remove a "remote
> tracking branch" might be a worthy goal ("update-ref -d" _could_
> be used, but "branch -D" feels more natural).
builtin-branch.c | 41 ++++++++++++++++++++++++++++-------------
1 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/builtin-branch.c b/builtin-branch.c
index 560309c..7fb93e7 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -12,8 +12,12 @@
#include "builtin.h"
static const char builtin_branch_usage[] =
- "git-branch (-d | -D) <branchname> | [-l] [-f] <branchname> [<start-point>] | (-m | -M) [<oldbranch>] <newbranch> | [-r | -a] [-v [--abbrev=<length>]]";
+ "git-branch [-r] (-d | -D) <branchname> | [-l] [-f] <branchname> [<start-point>] | (-m | -M) [<oldbranch>] <newbranch> | [-r | -a] [-v [--abbrev=<length>]]";
+#define REF_UNKNOWN_TYPE 0x00
+#define REF_LOCAL_BRANCH 0x01
+#define REF_REMOTE_BRANCH 0x02
+#define REF_TAG 0x04
static const char *head;
static unsigned char head_sha1[20];
@@ -89,25 +93,40 @@ static int in_merge_bases(const unsigned char *sha1,
return ret;
}
-static void delete_branches(int argc, const char **argv, int force)
+static void delete_branches(int argc, const char **argv, int force, int kinds)
{
struct commit *rev, *head_rev = head_rev;
unsigned char sha1[20];
char *name;
+ const char *fmt, *remote;
int i;
+ switch (kinds) {
+ case REF_REMOTE_BRANCH:
+ fmt = "refs/remotes/%s";
+ remote = "remote ";
+ force = 1;
+ break;
+ case REF_LOCAL_BRANCH:
+ fmt = "refs/heads/%s";
+ remote = "";
+ break;
+ default:
+ die("cannot use -a with -d");
+ }
+
if (!force) {
head_rev = lookup_commit_reference(head_sha1);
if (!head_rev)
die("Couldn't look up commit object for HEAD");
}
for (i = 0; i < argc; i++) {
- if (!strcmp(head, argv[i]))
+ if (kinds == REF_LOCAL_BRANCH && !strcmp(head, argv[i]))
die("Cannot delete the branch you are currently on.");
- name = xstrdup(mkpath("refs/heads/%s", argv[i]));
+ name = xstrdup(mkpath(fmt, argv[i]));
if (!resolve_ref(name, sha1, 1, NULL))
- die("Branch '%s' not found.", argv[i]);
+ die("%sbranch '%s' not found.", remote, argv[i]);
rev = lookup_commit_reference(sha1);
if (!rev)
@@ -128,19 +147,15 @@ static void delete_branches(int argc, const char **argv, int force)
}
if (delete_ref(name, sha1))
- printf("Error deleting branch '%s'\n", argv[i]);
+ printf("Error deleting %sbranch '%s'\n", remote,
+ argv[i]);
else
- printf("Deleted branch %s.\n", argv[i]);
+ printf("Deleted %sbranch %s.\n", remote, argv[i]);
free(name);
}
}
-#define REF_UNKNOWN_TYPE 0x00
-#define REF_LOCAL_BRANCH 0x01
-#define REF_REMOTE_BRANCH 0x02
-#define REF_TAG 0x04
-
struct ref_item {
char *name;
unsigned int kind;
@@ -435,7 +450,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
head += 11;
if (delete)
- delete_branches(argc - i, argv + i, force_delete);
+ delete_branches(argc - i, argv + i, force_delete, kinds);
else if (i == argc)
print_ref_list(kinds, verbose, abbrev);
else if (rename && (i == argc - 1))
next prev parent reply other threads:[~2006-12-18 7:50 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-18 6:08 [PATCH] git-branch: deleting remote branches in new layout Quy Tonthat
2006-12-18 7:08 ` Junio C Hamano
2006-12-18 7:49 ` Junio C Hamano [this message]
2006-12-18 10:02 ` Quy Tonthat
2006-12-18 13:39 ` [PATCH] (Take 2) " Quy Tonthat
2006-12-18 22:42 ` [PATCH] (Take 3) " Quy Tonthat
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=7vodq11w49.fsf@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
--cc=qtonthat@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox