]> asedeno.scripts.mit.edu Git - git.git/blobdiff - git-gui.sh
git-gui: Allow users to delete remote branches
[git.git] / git-gui.sh
index e90cdde96c46af611aba61299303ebee650c4fcb..c5f132993295d7f915255071b4005e44003d8c3a 100755 (executable)
@@ -22,13 +22,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA}
 
 ######################################################################
 ##
-## configure our library
-
-set oguilib {@@GITGUI_LIBDIR@@}
-if {[string match @@* $oguilib]} {
-       set oguilib [file join [file dirname [file normalize $argv0]] lib]
-}
-set auto_path [concat [list $oguilib] $auto_path]
+## enable verbose loading?
 
 if {![catch {set _verbose $env(GITGUI_VERBOSE)}]} {
        unset _verbose
@@ -44,6 +38,54 @@ if {![catch {set _verbose $env(GITGUI_VERBOSE)}]} {
        }
 }
 
+######################################################################
+##
+## configure our library
+
+set oguilib {@@GITGUI_LIBDIR@@}
+set oguirel {@@GITGUI_RELATIVE@@}
+if {$oguirel eq {1}} {
+       set oguilib [file dirname [file dirname [file normalize $argv0]]]
+       set oguilib [file join $oguilib share git-gui lib]
+} elseif {[string match @@* $oguirel]} {
+       set oguilib [file join [file dirname [file normalize $argv0]] lib]
+}
+
+set idx [file join $oguilib tclIndex]
+if {[catch {set fd [open $idx r]} err]} {
+       catch {wm withdraw .}
+       tk_messageBox \
+               -icon error \
+               -type ok \
+               -title "git-gui: fatal error" \
+               -message $err
+       exit 1
+}
+if {[gets $fd] eq {# Autogenerated by git-gui Makefile}} {
+       set idx [list]
+       while {[gets $fd n] >= 0} {
+               if {$n ne {} && ![string match #* $n]} {
+                       lappend idx $n
+               }
+       }
+} else {
+       set idx {}
+}
+close $fd
+
+if {$idx ne {}} {
+       set loaded [list]
+       foreach p $idx {
+               if {[lsearch -exact $loaded $p] >= 0} continue
+               source [file join $oguilib $p]
+               lappend loaded $p
+       }
+       unset loaded p
+} else {
+       set auto_path [concat [list $oguilib] $auto_path]
+}
+unset -nocomplain oguirel idx fd
+
 ######################################################################
 ##
 ## read only globals
@@ -158,6 +200,15 @@ proc is_config_true {name} {
        }
 }
 
+proc get_config {name} {
+       global repo_config
+       if {[catch {set v $repo_config($name)}]} {
+               return {}
+       } else {
+               return $v
+       }
+}
+
 proc load_config {include_global} {
        global repo_config global_config default_config
 
@@ -1179,15 +1230,16 @@ foreach class {Button Checkbutton Entry Label
 }
 unset class
 
-if {[is_Windows]} {
-       set M1B Control
-       set M1T Ctrl
-} elseif {[is_MacOSX]} {
+if {[is_Windows] || [is_MacOSX]} {
+       option add *Menu.tearOff 0
+}
+
+if {[is_MacOSX]} {
        set M1B M1
        set M1T Cmd
 } else {
-       set M1B M1
-       set M1T M1
+       set M1B Control
+       set M1T Ctrl
 }
 
 proc apply_config {} {
@@ -1215,6 +1267,7 @@ set default_config(merge.verbosity) 2
 set default_config(user.name) {}
 set default_config(user.email) {}
 
+set default_config(gui.pruneduringfetch) false
 set default_config(gui.trustmtime) false
 set default_config(gui.diffcontext) 5
 set default_config(gui.newbranchtemplate) {}
@@ -1376,6 +1429,11 @@ if {[is_enabled branch]} {
        lappend disable_on_lock [list .mbar.branch entryconf \
                [.mbar.branch index last] -state]
 
+       .mbar.branch add command -label {Rename...} \
+               -command branch_rename::dialog
+       lappend disable_on_lock [list .mbar.branch entryconf \
+               [.mbar.branch index last] -state]
+
        .mbar.branch add command -label {Delete...} \
                -command do_delete_branch
        lappend disable_on_lock [list .mbar.branch entryconf \
@@ -1473,6 +1531,8 @@ if {[is_enabled transport]} {
        menu .mbar.push
        .mbar.push add command -label {Push...} \
                -command do_push_anywhere
+       .mbar.push add command -label {Delete...} \
+               -command remote_branch_delete::dialog
 }
 
 if {[is_MacOSX]} {
@@ -1605,36 +1665,40 @@ browser {
 }
 blame {
        set subcommand_args {rev? path?}
+       set head {}
        set path {}
        set is_path 0
        foreach a $argv {
                if {$is_path || [file exists $_prefix$a]} {
                        if {$path ne {}} usage
-                       set path $a
+                       set path $_prefix$a
                        break
                } elseif {$a eq {--}} {
                        if {$path ne {}} {
-                               if {$current_branch ne {}} usage
-                               set current_branch $path
+                               if {$head ne {}} usage
+                               set head $path
                                set path {}
                        }
                        set is_path 1
-               } elseif {$current_branch eq {}} {
-                       if {$current_branch ne {}} usage
-                       set current_branch $a
+               } elseif {$head eq {}} {
+                       if {$head ne {}} usage
+                       set head $a
                } else {
                        usage
                }
        }
        unset is_path
 
-       if {$current_branch eq {} && $path ne {}} {
+       if {$head eq {}} {
                set current_branch [git symbolic-ref HEAD]
                regsub ^refs/((heads|tags|remotes)/)? \
                        $current_branch {} current_branch
+       } else {
+               set current_branch $head
        }
-       if {$current_branch eq {} || $path eq {}} usage
-       blame::new $current_branch $path
+
+       if {$path eq {}} usage
+       blame::new $head $path
        return
 }
 citool -