######################################################################
##
-## 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
}
}
+######################################################################
+##
+## 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
}
}
+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
}
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 {} {
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) {}
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 \
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]} {
bind all <$M1B-Key-w> {destroy [winfo toplevel %W]}
bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
+set subcommand_args {}
+proc usage {} {
+ puts stderr "usage: $::argv0 $::subcommand $::subcommand_args"
+ exit 1
+}
+
# -- Not a normal commit type invocation? Do that instead!
#
switch -- $subcommand {
browser {
- if {[llength $argv] != 1} {
- puts stderr "usage: $argv0 browser commit"
- exit 1
+ set subcommand_args {rev?}
+ switch [llength $argv] {
+ 0 {
+ set current_branch [git symbolic-ref HEAD]
+ regsub ^refs/((heads|tags|remotes)/)? \
+ $current_branch {} current_branch
+ }
+ 1 {
+ set current_branch [lindex $argv 0]
+ }
+ default usage
}
- set current_branch [lindex $argv 0]
browser::new $current_branch
return
}
blame {
- if {[llength $argv] != 2} {
- puts stderr "usage: $argv0 blame commit path"
- exit 1
+ 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 $_prefix$a
+ break
+ } elseif {$a eq {--}} {
+ if {$path ne {}} {
+ if {$head ne {}} usage
+ set head $path
+ set path {}
+ }
+ set is_path 1
+ } elseif {$head eq {}} {
+ if {$head ne {}} usage
+ set head $a
+ } else {
+ usage
+ }
}
- set current_branch [lindex $argv 0]
- blame::new $current_branch $_prefix[lindex $argv 1]
+ unset is_path
+
+ 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 {$path eq {}} usage
+ blame::new $head $path
return
}
citool -