2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz> 2008
6 force
= # Whether to delete non-empty branch, or branch where only the base is left.
16 force
=$
(( $force +1 ));;
18 echo "Usage: ${tgname:-tg} [...] delete [-f] <name>" >&2
21 [ -z "$name" ] || die
"name already specified ($name)"
29 [ -n "$name" ] || die
"no branch name specified"
30 branchrev
="$(git rev-parse --verify "refs
/heads
/$name" -- 2>/dev/null)" ||
31 if [ -n "$force" ]; then
32 info
"invalid branch name: $name; assuming it has been deleted already"
34 die
"invalid branch name: $name"
36 baserev
="$(git rev-parse --verify "refs
/$topbases/$name" -- 2>/dev/null)" ||
37 die
"not a TopGit topic branch: $name"
38 ! headsym
="$(git symbolic-ref -q HEAD)" ||
[ "$headsym" != "refs/heads/$name" ] ||
{
39 [ -n "$force" ] && [ "$force" -ge 2 ] || die
"cannot delete your current branch"
40 warn
"detaching HEAD to delete current branch"
41 git update-ref
-m "tgdelete: detach HEAD to delete $name" --no-deref HEAD
"$branchrev"
42 git log
-n 1 --format=format
:'HEAD is now at %h... %s' HEAD
45 [ -z "$force" ] && { branch_empty
"$name" || die
"branch is non-empty: $name"; }
47 # Quick'n'dirty check whether branch is required
48 [ -z "$force" ] && { $tg summary
--deps | cut
-d' ' -f2- |
tr ' ' '\n' | LC_ALL
=C
grep -Fxq -- "$name" && die
"some branch depends on $name"; }
52 git update-ref
-d "refs/$topbases/$name" "$baserev"
53 [ -z "$branchrev" ] || git update-ref
-d "refs/heads/$name" "$branchrev"