2 # TopGit - A different patch queue manager
23 tgish_deps_only
=true
;;
27 echo "Usage: ${tgname:-tg} [...] push [--dry-run] [--force] [--no-deps] [--tgish-only] [-r <remote>] [-a | --all | <branch>...]"
34 branches
="$branches $arg";;
38 if [ -z "$remote" ]; then
42 if [ -z "$remote" ]; then
43 die
"no remote location given. Either use -r remote argument or set topgit.remote"
46 if [ -z "$branches" ]; then
48 branches
="$(non_annihilated_branches)"
50 branches
="$(verify_topgit_branch HEAD)"
53 oldbranches
="$branches"
55 for name
in $oldbranches; do
56 if [ "$name" = "HEAD" ]; then
57 sr
="$(git symbolic-ref --quiet HEAD || :)"
58 [ -n "$sr" ] || die
"cannot push a detached HEAD"
59 case "$sr" in refs
/heads
/*) :;; *)
60 die
"HEAD is a symref to other than refs/heads/..."
62 branches
="${branches:+$branches }${sr#refs/heads/}"
64 ref_exists
"refs/heads/$name" || die
"no such ref: refs/heads/$name"
65 branches
="${branches:+$branches }$name"
71 _listfile
="$(get_temp tg-push-listfile)"
75 # FIXME should we abort on missing dependency?
76 [ -z "$_dep_missing" ] ||
return 0
78 # if so desired omit non tgish deps
79 $tgish_deps_only && [ -z "$_dep_is_tgish" ] && return 0
81 # filter out plain SHA1s. These don't need to be pushed explicitly as
82 # the patches that depend on the sha1 have it already in their ancestry.
83 is_sha1
"$_dep" && return 0
85 echo "$_dep" >> "$_listfile"
86 [ -z "$_dep_is_tgish" ] ||
87 echo "top-bases/$_dep" >> "$_listfile"
91 for name
in $branches; do
93 # re-use push_branch, which expects some pre-defined variables
97 ref_exists
"refs/top-bases/$_dep" ||
101 # deps but only if branch is tgish
102 $recurse_deps && [ -n "$_dep_is_tgish" ] &&
103 recurse_deps push_branch
"$name"
106 # remove multiple occurrences of the same branch
107 sort -u "$_listfile" |
xargs git push
$dry_run $force "$remote"