* [PATCH] branch: add support for --dry-run option
@ 2015-01-17 7:35 Alexander Kuleshov
2015-01-17 12:18 ` Philip Oakley
2015-01-19 14:20 ` Michael J Gruber
0 siblings, 2 replies; 5+ messages in thread
From: Alexander Kuleshov @ 2015-01-17 7:35 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Alexander Kuleshov
This patch adds support -d/--dry-run option for branch(es) deletion.
If -d/--dry-run option passed to git branch -d branch..., branch(es)
will not be removed, instead just print list of branches that are
to be removed.
For example:
$ git branch
a
b
c
* master
$ git branch -d -n a b c
delete branch 'a' (261c0d1)
delete branch 'b' (261c0d1)
delete branch 'c' (261c0d1)
Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
---
Documentation/git-branch.txt | 11 +++++++++--
builtin/branch.c | 13 +++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 311b336..32ea581 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -16,7 +16,7 @@ SYNOPSIS
'git branch' (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
'git branch' --unset-upstream [<branchname>]
'git branch' (-m | -M) [<oldbranch>] <newbranch>
-'git branch' (-d | -D) [-r] <branchname>...
+'git branch' (-d | -D) [--dry-run | -n] [-r] <branchname>...
'git branch' --edit-description [<branchname>]
DESCRIPTION
@@ -63,7 +63,9 @@ to happen.
With a `-d` or `-D` option, `<branchname>` will be deleted. You may
specify more than one branch for deletion. If the branch currently
-has a reflog then the reflog will also be deleted.
+has a reflog then the reflog will also be deleted. If passed `-n` or
+`--dry-run` option, branch(es) will be not removed, but show a list of
+branches that are to be removed.
Use `-r` together with `-d` to delete remote-tracking branches. Note, that it
only makes sense to delete remote-tracking branches if they no longer exist
@@ -83,6 +85,11 @@ OPTIONS
-D::
Delete a branch irrespective of its merged status.
+-n::
+--dry-run::
+ Don't remove the branch(es), but show a list of branches that are
+ to be removed.
+
-l::
--create-reflog::
Create the branch's reflog. This activates recording of
diff --git a/builtin/branch.c b/builtin/branch.c
index d8949cb..4a35a2f 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -61,6 +61,7 @@ static unsigned char merge_filter_ref[20];
static struct string_list output = STRING_LIST_INIT_DUP;
static unsigned int colopts;
+static int branch_delete_show_only;
static int parse_branch_color_slot(const char *slot)
{
@@ -255,6 +256,17 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
continue;
}
+ if (branch_delete_show_only) {
+ printf(remote_branch
+ ? _("delete remote branch '%s' (%s)\n")
+ : _("delete branch '%s' (%s)\n"),
+ bname.buf,
+ (flags & REF_ISBROKEN) ? "broken"
+ : (flags & REF_ISSYMREF) ? target
+ : find_unique_abbrev(sha1, DEFAULT_ABBREV));
+ continue;
+ }
+
if (delete_ref(name, sha1, REF_NODEREF)) {
error(remote_branch
? _("Error deleting remote branch '%s'")
@@ -840,6 +852,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
REF_REMOTE_BRANCH | REF_LOCAL_BRANCH),
OPT_BIT('d', "delete", &delete, N_("delete fully merged branch"), 1),
OPT_BIT('D', NULL, &delete, N_("delete branch (even if not merged)"), 2),
+ OPT__DRY_RUN(&branch_delete_show_only, N_("dry run")),
OPT_BIT('m', "move", &rename, N_("move/rename a branch and its reflog"), 1),
OPT_BIT('M', NULL, &rename, N_("move/rename a branch, even if target exists"), 2),
OPT_BOOL(0, "list", &list, N_("list branch names")),
--
2.3.0.rc0.286.ga3dc223.dirty
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] branch: add support for --dry-run option
2015-01-17 7:35 [PATCH] branch: add support for --dry-run option Alexander Kuleshov
@ 2015-01-17 12:18 ` Philip Oakley
2015-01-19 14:20 ` Michael J Gruber
1 sibling, 0 replies; 5+ messages in thread
From: Philip Oakley @ 2015-01-17 12:18 UTC (permalink / raw)
To: Alexander Kuleshov, Junio C Hamano; +Cc: git, Alexander Kuleshov
From: "Alexander Kuleshov" <kuleshovmail@gmail.com>
> This patch adds support -d/--dry-run option for branch(es) deletion.
> If -d/--dry-run option passed to git branch -d branch..., branch(es)
surely s|-d/--dry-run|-n/--dry-run|
-n is the short version of --dryrun. -d is already in use.
> will not be removed, instead just print list of branches that are
> to be removed.
>
[...]
--
Philip
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] branch: add support for --dry-run option
2015-01-17 7:35 [PATCH] branch: add support for --dry-run option Alexander Kuleshov
2015-01-17 12:18 ` Philip Oakley
@ 2015-01-19 14:20 ` Michael J Gruber
2015-01-22 1:37 ` Scott Schmit
1 sibling, 1 reply; 5+ messages in thread
From: Michael J Gruber @ 2015-01-19 14:20 UTC (permalink / raw)
To: Alexander Kuleshov, Junio C Hamano; +Cc: git
Alexander Kuleshov schrieb am 17.01.2015 um 08:35:
> This patch adds support -d/--dry-run option for branch(es) deletion.
> If -d/--dry-run option passed to git branch -d branch..., branch(es)
> will not be removed, instead just print list of branches that are
> to be removed.
>
> For example:
>
> $ git branch
> a
> b
> c
> * master
>
> $ git branch -d -n a b c
> delete branch 'a' (261c0d1)
> delete branch 'b' (261c0d1)
> delete branch 'c' (261c0d1)
Is there a case where deleting "a b c" would not delete "a b c"?
In other words: What new information does a dry-run give the user, other
than what "branch --list -v" would give already? (We could need a
shortcut on the latter, but that is a different topic.)
Michael
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] branch: add support for --dry-run option
2015-01-19 14:20 ` Michael J Gruber
@ 2015-01-22 1:37 ` Scott Schmit
2015-01-22 10:17 ` Michael J Gruber
0 siblings, 1 reply; 5+ messages in thread
From: Scott Schmit @ 2015-01-22 1:37 UTC (permalink / raw)
To: Michael J Gruber; +Cc: Alexander Kuleshov, Junio C Hamano, git
[-- Attachment #1: Type: text/plain, Size: 1466 bytes --]
On Mon, Jan 19, 2015 at 03:20:51PM +0100, Michael J Gruber wrote:
> Alexander Kuleshov schrieb am 17.01.2015 um 08:35:
> > This patch adds support -d/--dry-run option for branch(es) deletion.
> > If -d/--dry-run option passed to git branch -d branch..., branch(es)
> > will not be removed, instead just print list of branches that are
> > to be removed.
> >
> > For example:
> >
> > $ git branch
> > a
> > b
> > c
> > * master
> >
> > $ git branch -d -n a b c
> > delete branch 'a' (261c0d1)
> > delete branch 'b' (261c0d1)
> > delete branch 'c' (261c0d1)
>
> Is there a case where deleting "a b c" would not delete "a b c"?
Sure:
$ cd /tmp/
$ git init foo
Initialized empty Git repository in /tmp/foo/.git/
$ cd foo/
$ touch .gitignore
$ git add .gitignore
$ git commit -m init
[master (root-commit) fde5138] init
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
$ git checkout -b a
Switched to a new branch 'a'
$ git branch -d a
error: Cannot delete the branch 'a' which you are currently on.
$ touch file
$ git add file
$ git commit -m 'add file'
[a e2c2ece] add file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file
$ git checkout -b b master
Switched to a new branch 'b'
$ git branch -d a
error: The branch 'a' is not fully merged.
If you are sure you want to delete it, run 'git branch -D a'.
--
Scott Schmit
[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 3891 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] branch: add support for --dry-run option
2015-01-22 1:37 ` Scott Schmit
@ 2015-01-22 10:17 ` Michael J Gruber
0 siblings, 0 replies; 5+ messages in thread
From: Michael J Gruber @ 2015-01-22 10:17 UTC (permalink / raw)
To: Scott Schmit; +Cc: Alexander Kuleshov, Junio C Hamano, git
Scott Schmit schrieb am 22.01.2015 um 02:37:
> On Mon, Jan 19, 2015 at 03:20:51PM +0100, Michael J Gruber wrote:
>> Alexander Kuleshov schrieb am 17.01.2015 um 08:35:
>>> This patch adds support -d/--dry-run option for branch(es) deletion.
>>> If -d/--dry-run option passed to git branch -d branch..., branch(es)
>>> will not be removed, instead just print list of branches that are
>>> to be removed.
>>>
>>> For example:
>>>
>>> $ git branch
>>> a
>>> b
>>> c
>>> * master
>>>
>>> $ git branch -d -n a b c
>>> delete branch 'a' (261c0d1)
>>> delete branch 'b' (261c0d1)
>>> delete branch 'c' (261c0d1)
>>
>> Is there a case where deleting "a b c" would not delete "a b c"?
>
> Sure:
> $ cd /tmp/
> $ git init foo
> Initialized empty Git repository in /tmp/foo/.git/
> $ cd foo/
> $ touch .gitignore
> $ git add .gitignore
> $ git commit -m init
> [master (root-commit) fde5138] init
> 1 file changed, 0 insertions(+), 0 deletions(-)
> create mode 100644 .gitignore
> $ git checkout -b a
> Switched to a new branch 'a'
> $ git branch -d a
> error: Cannot delete the branch 'a' which you are currently on.
> $ touch file
> $ git add file
> $ git commit -m 'add file'
> [a e2c2ece] add file
> 1 file changed, 0 insertions(+), 0 deletions(-)
> create mode 100644 file
> $ git checkout -b b master
> Switched to a new branch 'b'
> $ git branch -d a
> error: The branch 'a' is not fully merged.
> If you are sure you want to delete it, run 'git branch -D a'.
Yes, and that is something that should go into the commit message. "Why
do you want to add --dry-run? Because -d deletes only fully merged
branches."
It should have been there in the 1st place, rather than forcing us to
ask the question that always needs to answered for a patch: What is the
intention? What is it good for?
In this case, we have other means to accomplish the same (--list -v),
and they are more natural if you want get information about the state of
the branches ("list verbose") than doing "delete dry-run".
Michael
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-01-22 10:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-17 7:35 [PATCH] branch: add support for --dry-run option Alexander Kuleshov
2015-01-17 12:18 ` Philip Oakley
2015-01-19 14:20 ` Michael J Gruber
2015-01-22 1:37 ` Scott Schmit
2015-01-22 10:17 ` Michael J Gruber
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).