README: Fix obsolete references to git push
[topgit.git] / tg-push.sh
blobf4652f57a0bd7ee1254370333b950b4c0278ec79
1 #!/bin/sh
2 # TopGit - A different patch queue manager
3 # GPLv2
5 ## Parse options
7 recurse_deps=true
8 tgish_deps_only=false
9 dry_run=
11 while [ -n "$1" ]; do
12 arg="$1"; shift
13 case "$arg" in
14 --no-deps)
15 recurse_deps=false;;
16 --dry-run)
17 dry_run=--dry-run;;
18 --tgish-only)
19 tgish_deps_only=true;;
20 -h|--help)
21 echo "Usage: tg push [--dry-run] [--no-deps] [--tgish-only] [-r remote] branch*"
22 exit 0;;
23 -r)
24 remote="$1"
25 shift
28 branches="$branches $arg";;
29 esac
30 done
32 if [ -z "$remote" ]; then
33 remote="$base_remote"
36 if [ -z "$remote" ]; then
37 die "no remote location given. Either use -r remote argument or set topgit.remote"
40 if [ -z "$branches" ]; then
41 branches="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
44 for name in $branches; do
45 ref_exists "$name" || die "detached HEAD? Can't push $name"
46 done
48 _listfile="$(get_temp tg-push-listfile)"
50 push_branch()
52 # FIXME should we abort on missing dependency?
53 [ -z "$_dep_missing" ] || return 0
55 # if so desired omit non tgish deps
56 $tgish_deps_only && [ -z "$_dep_is_tgish" ] && return 0
58 # filter out plain SHA1s. These don't need to be pushed explicitly as
59 # the patches that depend on the sha1 have it already in their ancestry.
60 is_sha1 "$_dep" && return 0
62 echo "$_dep" >> "$_listfile"
63 [ -z "$_dep_is_tgish" ] ||
64 echo "top-bases/$_dep" >> "$_listfile"
67 for name in $branches; do
68 # current branch
69 # re-use push_branch, which expects some pre-defined variables
70 _dep="$name"
71 _dep_is_tgish=1
72 _dep_missing=
73 ref_exists "top-bases/$_dep" ||
74 _dep_is_tgish=
75 push_branch "$name"
77 # deps but only if branch is tgish
78 $recurse_deps && [ -n "$_dep_is_tgish" ] &&
79 no_remotes=1 recurse_deps push_branch "$name"
81 # remove multiple occurrences of the same branch
82 sort -u "$_listfile" | xargs git push $dry_run "$remote"
83 done