The patch should apply cleanly on 9f685cd79. Or fetch it from branch t/tg-push at git://mawercer.de/topGit Until now you've had two choices: git push --all # pushing all top-bases and all other branches or run git push t/foo top-bases/foo # + all deps manually tg push allows you to a) push branch and its base, the branch you're on is used b) push branch its deps and their bases (adding -r) using tg push remoteA remoteB you can push to multiple remote locations. Marc Weber commit 2db369ff6dcfe9d5c4a9bab3eaf33c2a9b742f3d Author: Marc Weber <marco-oweber@xxxxxx> Date: Sat Apr 25 17:52:44 2009 +0200 add tg-push [-r] pushing the branch and its base -r: also push tgish dependencies Signed-off-by: Marc Weber <marco-oweber@xxxxxx> diff --git a/.gitignore b/.gitignore index eb56446..2f6d991 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ /tg-import.txt /tg-remote /tg-remote.txt +/tg-push +/tg-push.txt /tg .*.swp diff --git a/README b/README index d2f095d..f90a7b3 100644 --- a/README +++ b/README @@ -480,6 +480,13 @@ tg update TODO: tg update -a for updating all topic branches +tg push +~~~~~~~ + git push remote branch doesn't push the base. + git push remote pushes all branches (and bases) + You use tg push [-r] to push only the current branch [ and deps] with + its base to a remote location. + TODO: tg rename diff --git a/tg-push.sh b/tg-push.sh new file mode 100644 index 0000000..0f8c964 --- /dev/null +++ b/tg-push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# TopGit - A different patch queue manager +# GPLv2 + +recurse= +remotes= + + +## Parse options + +while [ -n "$1" ]; do + arg="$1"; shift + case "$arg" in + -r) + recurse=1;; + *) + remotes="$remotes $arg";; + esac +done + +if [ -z "$remotes" ]; then + remotes="$(git config topgit.remote 2>/dev/null)" +fi + +if [ -z "$remotes" ]; then + die "no remote location given. Either add a remote as additional argument or set topgit.remote" +fi + +name="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')" +ref_exists "$name" || die "detached HEAD? Can't push that" + +push_branch(){ + echo "$_dep" >> "$to_be_pushed" + base="top-bases/$_dep" + if ref_exists "$base"; then + echo "top-bases/$_dep" >> "$to_be_pushed" + else + echo "warning, no base found $base" + fi +} + +to_be_pushed="$(mktemp -t tg-depsfile.XXXXXX)" +trap 'rm -rf "$to_be_pushed"' EXIT + +for remote in $remotes; do + : > $to_be_pushed # empty file + + if [ -n "$recurse" ]; then + recurse_deps push_branch "$name" + fi + _dep="$name" + _dep_is_tgish=1 + push_branch + echo git push $remote `cat $to_be_pushed` + git push $remote `cat $to_be_pushed` +done diff --git a/tg-push.txt b/tg-push.txt new file mode 100644 index 0000000..de9b259 --- /dev/null +++ b/tg-push.txt @@ -0,0 +1,3 @@ + push branch and base. If you also use -r all tgish dependencies + will be pushed as well. + Use tg push remoteA remoteB to push to remoteA and remoteB locations -- 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