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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.