From: Joergen Edelbo <jed@napatech.com>
To: git@vger.kernel.org
Cc: j.sixt@viscovery.net, gitster@pobox.com, hvoigt@hvoigt.net,
patthoyts@gmail.com, jed@napatech.com
Subject: [PATCH] git-gui: Modify push dialog to support Gerrit review
Date: Thu, 12 Sep 2013 11:21:40 +0200 [thread overview]
Message-ID: <20130912093535.421691218BA@jed-dev-01.labnet> (raw)
Problem: It is not possible to push for Gerrit review as you will
always try to push to "refs/heads/..." on the remote.
Changes done:
Add an option in the Push dialog to select "Gerrit review" and a
corresponding entry for a branch name. If this option is selected,
push the changes to "refs/for/<gerrit-branch>/<local branch>". In
this way the local branch names will be used as topic branches on
Gerrit.
If you are on a detached HEAD, then add a "HEAD" entry in the branch
selection list. If this is selected, push HEAD:HEAD in the normal
case and HEAD:refs/for/<gerrit_branch> in the Gerrit case.
The Gerrit branch to push to is controlled by gerrit.reviewbranch
configuration option.
---
Hi again,
Seems like this discussion has died out. Is there no perspective in
changing git-gui to support Gerrit better?
Anyway here is what I consider my final shot at a solution. Compared
to the last one, this commit can handle the case when you work on a
detached HEAD, and the Gerrit branch to push to is handled by a
configuration option.
BR Jørgen Edelbo
git-gui.sh | 1 +
lib/option.tcl | 1 +
lib/transport.tcl | 48 +++++++++++++++++++++++++++++++++++++++++++++---
3 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/git-gui.sh b/git-gui.sh
index b62ae4a..3228654 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -901,6 +901,7 @@ set default_config(gui.diffcontext) 5
set default_config(gui.diffopts) {}
set default_config(gui.commitmsgwidth) 75
set default_config(gui.newbranchtemplate) {}
+set default_config(gerrit.reviewbranch) {}
set default_config(gui.spellingdictionary) {}
set default_config(gui.fontui) [font configure font_ui]
set default_config(gui.fontdiff) [font configure font_diff]
diff --git a/lib/option.tcl b/lib/option.tcl
index 23c9ae7..ffa4226 100644
--- a/lib/option.tcl
+++ b/lib/option.tcl
@@ -157,6 +157,7 @@ proc do_options {} {
{t gui.diffopts {mc "Additional Diff Parameters"}}
{i-0..99 gui.commitmsgwidth {mc "Commit Message Text Width"}}
{t gui.newbranchtemplate {mc "New Branch Name Template"}}
+ {t gerrit.reviewbranch {mc "Gerrit Review Branch"}}
{c gui.encoding {mc "Default File Contents Encoding"}}
{b gui.warndetachedcommit {mc "Warn before committing to a detached head"}}
{s gui.stageuntracked {mc "Staging of untracked files"} {list "yes" "no" "ask"}}
diff --git a/lib/transport.tcl b/lib/transport.tcl
index e5d211e..9b1cfc5 100644
--- a/lib/transport.tcl
+++ b/lib/transport.tcl
@@ -61,6 +61,7 @@ proc push_to {remote} {
proc start_push_anywhere_action {w} {
global push_urltype push_remote push_url push_thin push_tags
+ global gerrit_review gerrit_branch
global push_force
global repo_config
@@ -95,7 +96,19 @@ proc start_push_anywhere_action {w} {
set cnt 0
foreach i [$w.source.l curselection] {
set b [$w.source.l get $i]
- lappend cmd "refs/heads/$b:refs/heads/$b"
+ if {$gerrit_review && $gerrit_branch ne {}} {
+ switch $b {
+ $gerrit_branch { lappend cmd "refs/heads/$b:refs/for/$gerrit_branch" }
+ HEAD { lappend cmd "HEAD:refs/for/$gerrit_branch" }
+ default { lappend cmd "refs/heads/$b:refs/for/$gerrit_branch/$b" }
+ }
+ } else {
+ if {$b eq HEAD} {
+ lappend cmd "HEAD:HEAD"
+ } else {
+ lappend cmd "refs/heads/$b:refs/heads/$b"
+ }
+ }
incr cnt
}
if {$cnt == 0} {
@@ -118,9 +131,10 @@ trace add variable push_remote write \
[list radio_selector push_urltype remote]
proc do_push_anywhere {} {
- global all_remotes current_branch
+ global all_remotes current_branch is_detached
global push_urltype push_remote push_url push_thin push_tags
- global push_force use_ttk NS
+ global gerrit_review gerrit_branch
+ global push_force use_ttk NS repo_config
set w .push_setup
toplevel $w
@@ -149,6 +163,11 @@ proc do_push_anywhere {} {
-height 10 \
-width 70 \
-selectmode extended
+ if {$is_detached} {
+ $w.source.l insert end HEAD
+ $w.source.l select set end
+ $w.source.l yview end
+ }
foreach h [load_all_heads] {
$w.source.l insert end $h
if {$h eq $current_branch} {
@@ -215,13 +234,36 @@ proc do_push_anywhere {} {
-text [mc "Include tags"] \
-variable push_tags
grid $w.options.tags -columnspan 2 -sticky w
+ ${NS}::checkbutton $w.options.gerrit \
+ -text [mc "Gerrit review. Branch: "] \
+ -variable gerrit_review
+ ${NS}::entry $w.options.gerrit_br \
+ -width 50 \
+ -textvariable gerrit_branch \
+ -validate key \
+ -validatecommand {
+ if {%d == 1 && [regexp {\s} %S]} {return 0}
+ if {%d == 1 && [string length %S] > 0} {
+ set gerrit_review 1
+ }
+ if {[string length %P] == 0} {
+ set gerrit_review 0
+ }
+ return 1
+ }
+ grid $w.options.gerrit $w.options.gerrit_br -sticky we -padx {0 5}
grid columnconfigure $w.options 1 -weight 1
pack $w.options -anchor nw -fill x -pady 5 -padx 5
+ if ![info exists gerrit_branch] {
+ set gerrit_branch {}
+ catch {set gerrit_branch $repo_config(gerrit.reviewbranch)}
+ }
set push_url {}
set push_force 0
set push_thin 0
set push_tags 0
+ set gerrit_review [expr {$gerrit_branch ne {}}]
bind $w <Visibility> "grab $w; focus $w.buttons.create"
bind $w <Key-Escape> "destroy $w"
--
1.7.9.5
next reply other threads:[~2013-09-12 9:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-12 9:21 Joergen Edelbo [this message]
-- strict thread matches above, loose matches on Subject: below --
2013-09-06 10:30 [PATCH] git-gui: Modify push dialog to support Gerrit review Joergen Edelbo
2013-09-06 21:49 ` Phil Hord
2013-09-07 17:03 ` Jørgen Edelbo
2013-09-02 8:54 Joergen Edelbo
2013-09-05 6:20 ` Heiko Voigt
2013-09-05 6:42 ` Johannes Sixt
2013-09-05 8:29 ` Jørgen Edelbo
2013-09-05 8:57 ` Johannes Sixt
2013-09-05 9:18 ` Jørgen Edelbo
2013-09-05 9:31 ` Johannes Sixt
2013-09-05 17:34 ` Junio C Hamano
2013-09-06 8:17 ` Jørgen Edelbo
2013-09-05 18:19 ` Junio C Hamano
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=20130912093535.421691218BA@jed-dev-01.labnet \
--to=jed@napatech.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hvoigt@hvoigt.net \
--cc=j.sixt@viscovery.net \
--cc=patthoyts@gmail.com \
/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).