diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rwxr-xr-x | git-branch-list | 39 | ||||
| -rw-r--r-- | t/100-clear-clears-all-branches-from-list.t | 4 | ||||
| -rw-r--r-- | t/101-drop-accepts-multiple-branch-arguments.t | 42 | ||||
| -rw-r--r-- | t/102-drop-drops-current-branch.t | 29 | ||||
| -rw-r--r-- | t/bin.pm | 13 | 
6 files changed, 118 insertions, 11 deletions
| @@ -1,4 +1,4 @@  .PHONY: test  test: -	prove -v +	prove -v -I./t diff --git a/git-branch-list b/git-branch-list index 1468bfe..4d75092 100755 --- a/git-branch-list +++ b/git-branch-list @@ -53,14 +53,34 @@ function save_branch () {  }  function drop_branch () { -	local branch=$(branch_or_current_branch "$1") +	local branches="$@" +	local branch_names=() -	# Assume `$branch` is an ID if it's not a branch name -	if ! is_a_branch "$branch"; then -		branch=$(branch_by_id "$branch") +	# If no branch arguments were given, default to the current branch. +	if [ $# -eq 0 ]; then +		branches="$(current_branch)"  	fi -	sed -i '.bak' "/$branch/d" "$DATABASE" +	for branch in $branches; do +		local input="$branch" + +		# Assume `$branch` is an ID if it's not a branch name +		if ! is_a_branch "$branch"; then +			branch=$(branch_by_id "$branch") +		fi + +		if [ -z "$branch" ]; then +			echo "branch-list: Unrecognised branch '$input'" 1>&2 +			exit 1 +		fi + +		branch_names+=("$branch") +	done + +	for branch in "${branch_names[@]}"; do +		sed -i '.bak' "/$branch/d" "$DATABASE" +	done +  	rm "${DATABASE}.bak"  } @@ -88,12 +108,16 @@ function branch_or_current_branch () {  	local branch="$1"  	if [ "$branch" = '' ]; then -		git rev-parse --abbrev-ref HEAD +		current_branch  	else  		echo "$branch"  	fi  } +function current_branch () { +	git rev-parse --abbrev-ref HEAD +} +  function is_a_branch () {  	local branch="$1" @@ -131,7 +155,8 @@ case "$command" in  		save_branch "$2"  		;;  	drop) -		drop_branch "$2" +		shift +		drop_branch "$@"  		;;  	clear)  		clear_branches diff --git a/t/100-clear-clears-all-branches-from-list.t b/t/100-clear-clears-all-branches-from-list.t index 952d68a..2e53350 100644 --- a/t/100-clear-clears-all-branches-from-list.t +++ b/t/100-clear-clears-all-branches-from-list.t @@ -4,9 +4,7 @@ use strict;  use Test::More; -use File::Spec; - -my $BIN = File::Spec->rel2abs('git-branch-list'); +use Bin qw($BIN);  chdir 't-git-repo' or die $!; diff --git a/t/101-drop-accepts-multiple-branch-arguments.t b/t/101-drop-accepts-multiple-branch-arguments.t new file mode 100644 index 0000000..16767bf --- /dev/null +++ b/t/101-drop-accepts-multiple-branch-arguments.t @@ -0,0 +1,42 @@ +#!/usr/bin/env perl -w + +use strict; + +use Test::More; + +use Bin qw($BIN); + +chdir 't-git-repo' or die $!; + +system('git branch first'); +ok !$?; + +system("$BIN save first"); +ok !$?; + +system('git branch second'); +ok !$?; + +system("$BIN save second"); +ok !$?; + +system('git branch third'); +ok !$?; + +system("$BIN save third"); +ok !$?; + +system("$BIN drop 1 3"); +ok !$?; + +my $branch_list = qx($BIN); +is $branch_list, '     1	second +'; + + +# Teardown +system('git branch -d first second third'); +system("$BIN clear"); + + +done_testing; diff --git a/t/102-drop-drops-current-branch.t b/t/102-drop-drops-current-branch.t new file mode 100644 index 0000000..5534b6e --- /dev/null +++ b/t/102-drop-drops-current-branch.t @@ -0,0 +1,29 @@ +#!/usr/bin/env perl -w + +use strict; + +use Test::More; + +use Bin qw($BIN); + +chdir 't-git-repo' or die $!; + +system('git checkout -b first'); +ok !$?; + +system("$BIN save"); +ok !$?; + +system("$BIN drop"); +ok !$?; + +my $branch_list = qx($BIN); +is $branch_list, ''; + + +# Teardown +system('git checkout master'); +system('git branch -d first'); + + +done_testing; diff --git a/t/bin.pm b/t/bin.pm new file mode 100644 index 0000000..ad5b7f1 --- /dev/null +++ b/t/bin.pm @@ -0,0 +1,13 @@ +package Bin; + +use strict; +use warnings; + +use Exporter qw(import); +our @EXPORT = qw($BIN); + +use File::Spec; + +our $BIN = File::Spec->rel2abs('git-branch-list'); + +1; | 
