X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=git-gui.sh;h=6d676097a6a3aeecfda3a752b7344dc88094956c;hb=4ed1a190d09c7d6a248038edb11addda77af7550;hp=d5517b921db27cc3f9b2b9619f651435e2eb1d48;hpb=ce015c213fbef39140b6192db28110bc666dc6c8;p=git.git diff --git a/git-gui.sh b/git-gui.sh index d5517b921..6d676097a 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -42,6 +42,8 @@ if {[catch {package require Tcl 8.4} err] exit 1 } +rename send {} ; # What an evil concept... + ###################################################################### ## ## enable verbose loading? @@ -60,54 +62,6 @@ 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 @@ -309,7 +263,7 @@ proc _git_cmd {name} { set s [gets $f] close $f - switch -glob -- $s { + switch -glob -- [lindex $s 0] { #!*sh { set i sh } #!*perl { set i perl } #!*python { set i python } @@ -323,7 +277,7 @@ proc _git_cmd {name} { if {$interp eq {}} { error "git-$name requires $i (not in PATH)" } - set v [list $interp $p] + set v [concat [list $interp] [lrange $s 1 end] [list $p]] } else { # Assume it is builtin to git somehow and we # aren't actually able to see a file for it. @@ -532,7 +486,11 @@ if {$_git eq {}} { if {[catch {set _git_version [git --version]} err]} { catch {wm withdraw .} - error_popup "Cannot determine Git version: + tk_messageBox \ + -icon error \ + -type ok \ + -title "git-gui: fatal error" \ + -message "Cannot determine Git version: $err @@ -541,7 +499,11 @@ $err } if {![regsub {^git version } $_git_version {} _git_version]} { catch {wm withdraw .} - error_popup "Cannot parse Git version string:\n\n$_git_version" + tk_messageBox \ + -icon error \ + -type ok \ + -title "git-gui: fatal error" \ + -message "Cannot parse Git version string:\n\n$_git_version" exit 1 } @@ -619,7 +581,11 @@ proc git-version {args} { if {[git-version < 1.5]} { catch {wm withdraw .} - error_popup "[appname] requires Git 1.5.0 or later. + tk_messageBox \ + -icon error \ + -type ok \ + -title "git-gui: fatal error" \ + -message "[appname] requires Git 1.5.0 or later. You are using [git-version]: @@ -627,6 +593,54 @@ You are using [git-version]: exit 1 } +###################################################################### +## +## 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 + ###################################################################### ## ## feature option selection @@ -691,7 +705,15 @@ if {![file isdirectory $_gitdir]} { error_popup "Git directory not found:\n\n$_gitdir" exit 1 } -if {![is_enabled bare]} { +if {$_prefix ne {}} { + regsub -all {[^/]+/} $_prefix ../ cdup + if {[catch {cd $cdup} err]} { + catch {wm withdraw .} + error_popup "Cannot move to top of working directory:\n\n$err" + exit 1 + } + unset cdup +} elseif {![is_enabled bare]} { if {[lindex [file split $_gitdir] end] ne {.git}} { catch {wm withdraw .} error_popup "Cannot use funny .git directory:\n\n$_gitdir" @@ -726,6 +748,7 @@ set empty_tree {} set current_branch {} set is_detached 0 set current_diff_path {} +set is_3way_diff 0 set selected_commit_type new ###################################################################### @@ -2420,20 +2443,19 @@ proc popup_diff_menu {ctxm x y X Y} { set ::cursorX $x set ::cursorY $y if {$::ui_index eq $::current_diff_side} { - $ctxm entryconf $::ui_diff_applyhunk \ - -state normal \ - -label {Unstage Hunk From Commit} - } elseif {$current_diff_path eq {} + set l "Unstage Hunk From Commit" + } else { + set l "Stage Hunk For Commit" + } + if {$::is_3way_diff + || $current_diff_path eq {} || ![info exists file_states($current_diff_path)] || {_O} eq [lindex $file_states($current_diff_path) 0]} { - $ctxm entryconf $::ui_diff_applyhunk \ - -state disabled \ - -label {Stage Hunk For Commit} + set s disabled } else { - $ctxm entryconf $::ui_diff_applyhunk \ - -state normal \ - -label {Stage Hunk For Commit} + set s normal } + $ctxm entryconf $::ui_diff_applyhunk -state $s -label $l tk_popup $ctxm $X $Y } bind_button3 $ui_diff [list popup_diff_menu $ctxm %x %y %X %Y]