2 # TopGit - A different patch queue manager
20 tgish_deps_only
=true
;;
24 echo "Usage: tg push [--dry-run] [--no-deps] [--tgish-only] [-r <remote>] [-a | --all | <branch>...]"
31 branches
="$branches $arg";;
35 if [ -z "$remote" ]; then
39 if [ -z "$remote" ]; then
40 die
"no remote location given. Either use -r remote argument or set topgit.remote"
43 if [ -z "$branches" ]; then
45 branches
="$(non_annihilated_branches)"
47 branches
="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
51 for name
in $branches; do
52 ref_exists
"$name" || die
"detached HEAD? Can't push $name"
55 _listfile
="$(get_temp tg-push-listfile)"
59 # FIXME should we abort on missing dependency?
60 [ -z "$_dep_missing" ] ||
return 0
62 # if so desired omit non tgish deps
63 $tgish_deps_only && [ -z "$_dep_is_tgish" ] && return 0
65 # filter out plain SHA1s. These don't need to be pushed explicitly as
66 # the patches that depend on the sha1 have it already in their ancestry.
67 is_sha1
"$_dep" && return 0
69 echo "$_dep" >> "$_listfile"
70 [ -z "$_dep_is_tgish" ] ||
71 echo "top-bases/$_dep" >> "$_listfile"
74 for name
in $branches; do
76 # re-use push_branch, which expects some pre-defined variables
80 ref_exists
"top-bases/$_dep" ||
84 # deps but only if branch is tgish
85 $recurse_deps && [ -n "$_dep_is_tgish" ] &&
86 no_remotes
=1 recurse_deps push_branch
"$name"
89 # remove multiple occurrences of the same branch
90 sort -u "$_listfile" |
xargs git push
$dry_run "$remote"