README: mention export --collapse + git format-patch
[topgit/pro.git] / tg-depend.sh
blob66ffc4da4d77c0279495dd925679fd3a47ce142f
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # (c) Petr Baudis <pasky@suse.cz> 2008
4 # GPLv2
6 name=
8 usage()
10 echo "Usage: ${tgname:-tg} [...] depend add <name>" >&2
11 exit 1
14 ## Parse options
16 subcmd="$1"; shift || :
17 case "$subcmd" in
18 -h|"")
19 usage;;
20 add)
23 die "unknown subcommand ($subcmd)";;
24 esac
26 while [ -n "$1" ]; do
27 arg="$1"; shift
28 case "$arg" in
29 -*)
30 usage;;
32 [ -z "$name" ] || die "name already specified ($name)"
33 name="$arg";;
34 esac
35 done
38 ## Sanity checks
40 [ -n "$name" ] || die "no branch name specified"
41 branchrev="$(git rev-parse --verify "$name" 2>/dev/null)" ||
42 die "invalid branch name: $name"
44 # Check that we are on a TopGit branch.
45 current_name="$(strip_ref "$(git symbolic-ref HEAD 2>/dev/null)")"
46 current_base_rev="$(git rev-parse --short --verify "refs/top-bases/$current_name" 2>/dev/null)" ||
47 die "not a TopGit-controlled branch"
49 ## Record new dependency
50 depend_add()
52 [ "$name" = "$current_name" ] &&
53 die "$name cannot depend on itself."
55 { $tg summary --deps; echo "$current_name" "$name"; } |
56 tsort >/dev/null ||
57 die "$tgname: that dependency would introduce a dependency loop"
59 grep -F -x -e "$name" "$root_dir/.topdeps" >/dev/null &&
60 die "$tgname: $current_name already depends on $name"
62 echo "$name" >>"$root_dir/.topdeps"
63 git add -f "$root_dir/.topdeps"
64 git commit -m"New TopGit dependency: $name"
65 $tg update
68 depend_$subcmd
70 # vim:noet