Skip to content

Commit 022db5a

Browse files
committed
Extract delete logic into its own function
1 parent b1bd258 commit 022db5a

File tree

1 file changed

+65
-29
lines changed

1 file changed

+65
-29
lines changed

git-delete-branch-interactive.sh

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -104,46 +104,47 @@ git_delete_interactive() {
104104
return 0
105105
fi
106106
fi
107-
echo "Selected branch: $selected_branch"
108107

109-
remote_branch_info="$(__gdi_get_info_remote_branch $selected_branch)"
110-
if [ -n "$remote_branch_info" ] && [ $only_local_branch = false ]
108+
if [ $only_remote_branch = false]
111109
then
112-
remote_branch_name="$(echo $remote_branch_info | cut -d' ' -f1)"
113-
up_to_date_with_remote="$(echo $remote_branch_info | cut -d' ' -f2)"
114-
115-
if [ $up_to_date_with_remote = true ]
110+
remote_branch_info="$(__gdi_get_info_remote_branch $selected_branch)"
111+
if [ -n "$remote_branch_info" ] && [ $only_local_branch = false ]
116112
then
117-
echo "Deleting remote branch $remote_branch_name"
118-
git push --delete $(echo $remote_branch_name | sed 's|/| |')
119-
else
120-
echo "Remote branch $remote_branch_name is not up-to-date with the local tracking branch $selected_branch"
121-
echo -n "Delete it anyway? [y/n] "
122-
read delete_anyway
123-
if [[ "$delete_anyway" =~ [yY] ]]
113+
remote_branch_name="$(echo $remote_branch_info | cut -d' ' -f1)"
114+
up_to_date_with_remote="$(echo $remote_branch_info | cut -d' ' -f2)"
115+
116+
if [ $up_to_date_with_remote = true ]
124117
then
125-
echo "Deleting remote branch $remote_branch_name"
126-
git push --delete $(echo $remote_branch_name | sed 's|/| |')
118+
__gdi_delete_branch --remote $remote_branch_name
127119
else
128-
echo "Not deleting remote branch $remote_branch_name"
120+
echo "Remote branch $remote_branch_name is not up-to-date with the local tracking branch $selected_branch"
121+
echo -n "Delete it anyway? [y/n] "
122+
read delete_anyway
123+
if [[ "$delete_anyway" =~ [yY] ]]
124+
then
125+
__gdi_delete_branch --remote $remote_branch_name
126+
else
127+
echo "Not deleting remote branch $remote_branch_name"
128+
fi
129129
fi
130130
fi
131-
fi
132131

133-
if [ "$selected_branch" = "$(git_current_branch)" ]
134-
then
135-
echo "Cannot delete current local branch. Please checkout another branch and retry."
136-
return 1
137-
else
138-
echo -n "Delete local branch $selected_branch (the last copy of the work)? [y/N] "
139-
read delete_local_branch
140-
if [[ "$delete_local_branch" =~ [yY] ]]
132+
if [ "$selected_branch" = "$(git_current_branch)" ]
141133
then
142-
echo "Deleting local branch $selected_branch"
143-
git branch -D $selected_branch
134+
echo "Cannot delete current local branch. Please checkout another branch and retry."
135+
return 1
144136
else
145-
echo "Not deleting local branch $selected_branch"
137+
echo -n "Delete local branch $selected_branch (the last copy of the work)? [y/N] "
138+
read delete_local_branch
139+
if [[ "$delete_local_branch" =~ [yY] ]]
140+
then
141+
__gdi_delete_branch --local $selected_branch
142+
else
143+
echo "Not deleting local branch $selected_branch"
144+
fi
146145
fi
146+
else
147+
echo "TODO: delete only remote $selected_branch"
147148
fi
148149
fi
149150
fi
@@ -170,3 +171,38 @@ __gdi_get_info_remote_branch() {
170171
fi
171172
fi
172173
}
174+
175+
__gdi_delete_branch() {
176+
local_branch=false
177+
remote_branch=false
178+
for arg in "$@"
179+
do
180+
shift
181+
if [ "$arg" = "--local" ]
182+
then
183+
local_branch=true
184+
continue
185+
elif [ "$arg" = "--remote" ]
186+
then
187+
remote_branch=true
188+
continue
189+
fi
190+
set -- "$@" "$arg"
191+
done
192+
193+
if [ "$#" -ne 1 ]
194+
then
195+
echo "Internal error: $0 received an incorrect number of parameters."
196+
return 1
197+
fi
198+
199+
if [ $local_branch = true ]
200+
then
201+
echo "Deleting local branch $1"
202+
git branch -D "$1"
203+
elif [ $remote_branch = true ]
204+
then
205+
echo "Deleting remote branch $1"
206+
git push --delete $(echo $1 | sed 's|/| |')
207+
fi
208+
}

0 commit comments

Comments
 (0)