So, I finally tried tg-push and got a lot of warnings and errors: warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master warning, no base found top-bases/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/master is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/master error: Ref refs/heads/bw/log is at a16df35cc7009b36f6f71717ae3d9a3dc29987da but expected 0000000000000000000000000000000000000000 error: failed to lock refs/heads/bw/log error: Ref refs/top-bases/bw/log is at b725fc951a37854fc65945ac5bcab3bc61ccbd94 but expected 0000000000000000000000000000000000000000 error: failed to lock refs/top-bases/bw/log ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] master -> master (failed to lock) ! [remote rejected] bw/log -> bw/log (failed to lock) ! [remote rejected] refs/top-bases/bw/log -> refs/top-bases/bw/log (failed to lock) Also the result was ok this output is defintive not ok. To prevent multiple occurences of the same branchname we maintain these in a file. In push_branch ref_exists was called, which is redundant because _dep_is_tgish tells us exactly this. Regards, Bert Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx> --- tg-push.sh | 48 +++++++++++++++++++++++++++++------------------- 1 files changed, 29 insertions(+), 19 deletions(-) diff --git a/tg-push.sh b/tg-push.sh index 8d09a02..c813927 100644 --- a/tg-push.sh +++ b/tg-push.sh @@ -45,31 +45,41 @@ for name in $branches; do ref_exists "$name" || die "detached HEAD? Can't push $name" done +_listfile="$(mktemp -t tg-push-listfile.XXXXXX)" +trap "rm -f \"$_listfile\"" 0 + +# prevent multiple occurrences of the same branch +add_to_list() +{ + fgrep -qx "$1" "$_listfile" || + echo "$1" >> "$_listfile" +} + push_branch() { # if so desired omit non tgish deps $tgish_deps_only && [ -z "$_dep_is_tgish" ] && return 0 - echo "$_dep" - local base="top-bases/$_dep" - if ref_exists "$base"; then - echo "top-bases/$_dep" - else - echo "warning, no base found $base" 1>&2 - fi + add_to_list "$_dep" + [ -z "$_dep_is_tgish" ] || + add_to_list "top-bases/$_dep" } for name in $branches; do - list="$( - # deps - if $recurse_deps; then - no_remotes=1 recurse_deps push_branch "$name" - fi - # current branch - _dep="$name" - _dep_is_tgish=1 - push_branch "$name" - )" - echo "pushing:"; echo $list - git push $dry_run "$remote" $list + # current branch + # re-use push_branch, which expects some pre-defined variables + _dep="$name" + _dep_is_tgish=1 + ref_exists "top-bases/$_dep" || + _dep_is_tgish= + push_branch "$name" + + # deps + $recurse_deps && + no_remotes=1 recurse_deps push_branch "$name" + + cat "$_listfile" | + sed '1{ s/^/Pushing: /; n; }; s/^/ /;' + + cat "$_listfile" | xargs git push $dry_run "$remote" done -- tg: (b725fc9..) bw/push-fixes (depends on: master) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html