chiark / gitweb /
e1eea170b36745cf7e3b7acdcdfe3fc704b8f0bc
[topgit.git] / tg-delete.sh
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz>  2008
4 # GPLv2
5
6 force= # Whether to delete non-empty branch, or branch where only the base is left.
7 name=
8
9
10 ## Parse options
11
12 while [ -n "$1" ]; do
13         arg="$1"; shift
14         case "$arg" in
15         -f)
16                 force=1;;
17         -*)
18                 echo "Usage: tg [...] delete [-f] NAME" >&2
19                 exit 1;;
20         *)
21                 [ -z "$name" ] || die "name already specified ($name)"
22                 name="$arg";;
23         esac
24 done
25
26
27 ## Sanity checks
28
29 [ -n "$name" ] || die "no branch name specified"
30 branchrev="$(git rev-parse --verify "$name" 2>/dev/null)" ||
31         if [ -n "$force" ]; then
32                 info "invalid branch name: $name; assuming it has been deleted already"
33         else
34                 die "invalid branch name: $name"
35         fi
36 baserev="$(git rev-parse --verify "refs/top-bases/$name" 2>/dev/null)" ||
37         die "not a TopGit topic branch: $name"
38 ! git symbolic-ref HEAD >/dev/null || [ "$(git symbolic-ref HEAD)" != "refs/heads/$name" ] ||
39         die "cannot delete your current branch"
40
41 [ -z "$force" ] && { branch_empty "$name" || die "branch is non-empty: $name"; }
42
43
44 ## Wipe out
45
46 git update-ref -d "refs/top-bases/$name" "$baserev"
47 [ -z "$branchrev" ] || git update-ref -d "refs/heads/$name" "$branchrev"
48
49 # vim:noet