git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] topgit tg push feature

From
MWMarc Weber <marco-oweber@gmx.de>
Date
Apr 25, 2009, 16:13 UTC
Message-ID
<20090425161300.GD19142@gmx.de>

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@gmx.de>
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@gmx.de>
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
Next: Marc Weber
Message 1 of 22 in “topgit tg push feature”
  1. topgit tg push featureMarc Weber, Apr 25, 2009
  2. Marc WeberApr 25, 2009
  3. Marc WeberMay 5, 2009
  4. Marc WeberMay 7, 2009
  5. Bert WesargMay 7, 2009
  6. Uwe Kleine-KönigMay 7, 2009
  7. Bert WesargMay 7, 2009
  8. martin f krafftMay 9, 2009
  9. Marc WeberMay 9, 2009
  10. Marc WeberMay 11, 2009
  11. martin f krafftMay 11, 2009
  12. martin f krafftMay 11, 2009
  13. Uwe Kleine-KönigMay 11, 2009
  14. Marc WeberMay 11, 2009
  15. martin f krafftMay 11, 2009
  16. Uwe Kleine-KönigMay 12, 2009
  17. Bert WesargMay 12, 2009
  18. Marc WeberMay 12, 2009
  19. Bert WesargMay 12, 2009
  20. Uwe Kleine-KönigMay 12, 2009
  21. tg-remote: don't add push specs but warn about existing ones.Uwe Kleine-König, May 13, 2009
  22. martin f krafftMay 13, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.