From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Marc Weber <marco-oweber@gmx.de>, git@vger.kernel.org
Subject: Re: [PATCH] topgit tg push feature
Date: Tue, 12 May 2009 07:13:34 +0200 [thread overview]
Message-ID: <20090512051334.GA22757@pengutronix.de> (raw)
In-Reply-To: <20090511210614.GA6118@gmx.de>
Hello Marc,
On Mon, May 11, 2009 at 11:06:14PM +0200, Marc Weber wrote:
> Thanks to Bert Wesarg, Uwe Kleine-König and Martin f Krafft the
> patch is finally ready to be comitted (?) I included ukleineks last
> nitpicks.
>
> ukleinek, usage line: remote2 = just another remote location.
hhm, so you suggest that you can add more than one remote per -r option?
I wouldn't document even if it works now.
> 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..495c70b 100644
> --- a/README
> +++ b/README
> @@ -480,6 +480,12 @@ tg update
>
> TODO: tg update -a for updating all topic branches
>
> +tg push
> +~~~~~~~
> + pushes a TopGit-controlled topic branch to a remote
> + repository. By default the remote gets all dependencies
> + (both tgish and non-tgish) and bases pushed to.
> +
> TODO: tg rename
>
>
> diff --git a/tg-push.sh b/tg-push.sh
> new file mode 100644
> index 0000000..5df5073
> --- /dev/null
> +++ b/tg-push.sh
> @@ -0,0 +1,78 @@
> +#!/bin/sh
> +# TopGit - A different patch queue manager
> +# GPLv2
> +
> +remotes="$base_remote" # honor -r flag of the tg command
> +
> +## Parse options see README
> +
> +recurse_deps=true
> +tgish_deps_only=false
> +dry_run=
> +
> +while [ -n "$1" ]; do
> + arg="$1"; shift
> + case "$arg" in
> + --no-deps)
> + recurse_deps=false;;
> + --dry-run)
> + dry_run=--dry-run;;
> + --tgish-only)
> + tgish_deps_only=true;;
> + -h|--help)
> + echo "Usage: tg [-r remote] push [--dry-run] [--no-deps] [--tgish-only] [-r "remote2 remote3"]* branch*"
> + exit 0;;
> + -r)
> + remotes="$remotes $1"
> + shift
> + ;;
> + *)
> + branches="$branches $arg";;
> + esac
> +done
> +
> +if [ -z "$remotes" ]; then
> + remotes="$(git config topgit.remote 2>/dev/null)"
> +fi
This is obsolete with remotes=$base_remote above, right?
> +if [ -z "$remotes" ]; then
> + die "no remote location given. Either use -r remote argument or set topgit.remote"
> +fi
> +
> +if [ -z "$branches" ]; then
> + branches="$(git symbolic-ref HEAD | sed 's#^refs/heads/##')"
> +fi
> +
> +for name in $branches; do
> + ref_exists "$name" || die "detached HEAD? Can't push $name"
> +done
> +
> +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
> +}
> +
> +for remote in $remotes; do
> + 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
> + done
> +done
> diff --git a/tg.sh b/tg.sh
> index 0804f73..7d98dbd 100644
> --- a/tg.sh
> +++ b/tg.sh
> @@ -136,6 +136,7 @@ branch_annihilated()
> # of the whole function.
> # If recurse_deps() hits missing dependencies, it will append
> # them to space-separated $missing_deps list and skip them.
> +# set no_remotes to any value to omit remote dependencies (-> tg push)
> recurse_deps()
> {
> _cmd="$1"; shift
> @@ -145,9 +146,8 @@ recurse_deps()
> _depsfile="$(mktemp -t tg-depsfile.XXXXXX)"
> # Check also our base against remote base. Checking our head
> # against remote head has to be done in the helper.
> - if has_remote "top-bases/$_name"; then
> + has_remote "top-bases/$_name" && [ -z "$no_remotes" ] &&
> echo "refs/remotes/$base_remote/top-bases/$_name" >>"$_depsfile"
> - fi
>
> # if the branch was annihilated, there exists no .topdeps file
> if ! branch_annihilated "$_name"; then
> @@ -366,6 +366,8 @@ help|--help|-h)
> --hooks-path)
> # Internal command
> echo "@hooksdir@";;
> +eval)
> + eval "$@";;
> *)
> [ -r "@cmddir@"/tg-$cmd ] || {
> echo "Unknown subcommand: $cmd" >&2
hhhm, this hunk is new and unused. Intended?
If it's OK for you I fix these up when commiting. I will break out the
change to tg.sh as shown yesterday in irc.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2009-05-12 5:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-25 16:13 [PATCH] topgit tg push feature Marc Weber
2009-04-25 16:34 ` Marc Weber
2009-05-05 9:34 ` Marc Weber
2009-05-07 4:59 ` Marc Weber
2009-05-07 5:45 ` Bert Wesarg
2009-05-07 8:43 ` Uwe Kleine-König
2009-05-07 9:50 ` Bert Wesarg
2009-05-09 10:36 ` martin f krafft
2009-05-09 19:09 ` Marc Weber
2009-05-11 3:28 ` Marc Weber
2009-05-11 7:25 ` martin f krafft
2009-05-11 7:47 ` martin f krafft
2009-05-11 19:55 ` Uwe Kleine-König
2009-05-11 21:06 ` Marc Weber
2009-05-11 21:39 ` martin f krafft
2009-05-12 5:13 ` Uwe Kleine-König [this message]
2009-05-12 6:22 ` Bert Wesarg
2009-05-12 7:54 ` Marc Weber
2009-05-12 8:55 ` Bert Wesarg
2009-05-12 9:02 ` Uwe Kleine-König
2009-05-13 10:04 ` [PATCH] tg-remote: don't add push specs but warn about existing ones Uwe Kleine-König
2009-05-13 11:42 ` martin f krafft
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090512051334.GA22757@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=git@vger.kernel.org \
--cc=marco-oweber@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).