Code

git-gui: Created Branch menu.
authorShawn O. Pearce <spearce@spearce.org>
Fri, 24 Nov 2006 22:30:12 +0000 (17:30 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 24 Nov 2006 22:30:12 +0000 (17:30 -0500)
This is an early start at branch management from within git-gui.  The
branch menu has create/delete command entries to create and delete
branches as well as a list of radiobutton entries for each branch
found in the repository through for-each-ref.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui

diff --git a/git-gui b/git-gui
index e9d4600a252b054fefd09d7838d54fdc363526f3..69ebd90958acaa488e3c06a560e4454ecd8d8c27 100755 (executable)
--- a/git-gui
+++ b/git-gui
@@ -1605,6 +1605,44 @@ proc write_checkout_index {fd pathList totalCnt batch msg after} {
                [expr {100.0 * $update_index_cp / $totalCnt}]]
 }
 
+######################################################################
+##
+## branch management
+
+proc load_all_branches {} {
+       global all_branches
+
+       set all_branches [list]
+       set cmd [list git for-each-ref]
+       lappend cmd --format=%(refname)
+       lappend cmd refs/heads
+       set fd [open "| $cmd" r]
+       while {[gets $fd line] > 0} {
+               if {[regsub ^refs/heads/ $line {} line]} {
+                       lappend all_branches $line
+               }
+       }
+       close $fd
+
+       set all_branches [lsort $all_branches]
+}
+
+proc populate_branch_menu {m} {
+       global all_branches disable_on_lock
+
+       $m add separator
+       foreach b $all_branches {
+               $m add radiobutton \
+                       -label $b \
+                       -command [list do_switch_branch $b] \
+                       -variable current_branch \
+                       -value $b \
+                       -font font_ui
+               lappend disable_on_lock \
+                       [list $m entryconf [$m index last] -state]
+       }
+}
+
 ######################################################################
 ##
 ## remote management
@@ -2878,6 +2916,9 @@ apply_config
 menu .mbar -tearoff 0
 .mbar add cascade -label Repository -menu .mbar.repository
 .mbar add cascade -label Edit -menu .mbar.edit
+if {!$single_commit} {
+       .mbar add cascade -label Branch -menu .mbar.branch
+}
 .mbar add cascade -label Commit -menu .mbar.commit
 if {!$single_commit} {
        .mbar add cascade -label Fetch -menu .mbar.fetch
@@ -2963,6 +3004,24 @@ menu .mbar.edit
        -accelerator $M1T-A \
        -font font_ui
 
+if {!$single_commit} {
+       # -- Branch Menu
+       #
+       menu .mbar.branch
+
+       .mbar.branch add command -label {Create...} \
+               -command do_create_branch \
+               -font font_ui
+       lappend disable_on_lock [list .mbar.branch entryconf \
+               [.mbar.branch index last] -state]
+
+       .mbar.branch add command -label {Delete...} \
+               -command do_delete_branch \
+               -font font_ui
+       lappend disable_on_lock [list .mbar.branch entryconf \
+               [.mbar.branch index last] -state]
+}
+
 # -- Commit Menu
 #
 menu .mbar.commit
@@ -3583,6 +3642,8 @@ user.email settings into your personal
 
 if {!$single_commit} {
        load_all_remotes
+       load_all_branches
+       populate_branch_menu .mbar.branch
        populate_fetch_menu .mbar.fetch
        populate_pull_menu .mbar.pull
        populate_push_menu .mbar.push