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 -- 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