diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-08-26 17:29:26 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-08-26 17:29:26 -0700 |
commit | e92ea62425fb89713bc47241af29a79f5f191cc6 (patch) | |
tree | a027f4d97331623b3a4d99eeea5e14557af990e3 /git-gui/git-gui.sh | |
parent | 09b0d9dde03df1432df06dcfcc20d8abecccb860 (diff) | |
parent | c80d25dbce759a8483ffc1f085fdf4cd63cf9f05 (diff) | |
download | git-e92ea62425fb89713bc47241af29a79f5f191cc6.tar.gz git-e92ea62425fb89713bc47241af29a79f5f191cc6.tar.xz |
Merge branch 'master' of git://repo.or.cz/git-gui
* 'master' of git://repo.or.cz/git-gui:
git-gui: Correct 'git gui blame' in a subdirectory
git-gui: Do not offer to stage three-way diff hunks into the index
git-gui: Refactor diff pane popup support for future improvements
git-gui: Fix "unoptimized loading" to not cause git-gui to crash
git-gui: Paper bag fix "Stage Hunk For Commit" in diff context menu
git-gui: Allow git-merge to use branch names in conflict markers
git-gui: Fix window manager problems on ion3
Diffstat (limited to 'git-gui/git-gui.sh')
-rwxr-xr-x | git-gui/git-gui.sh | 158 |
1 files changed, 94 insertions, 64 deletions
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index 29a790e48..fa30ccc5d 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -62,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 set _appname [lindex [file split $argv0] end] @@ -532,7 +484,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 +497,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 +579,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]: @@ -629,6 +593,54 @@ You are using [git-version]: ###################################################################### ## +## 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 if {[regexp {^git-(.+)$} [appname] _junk subcommand]} { @@ -691,7 +703,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 +746,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 ###################################################################### @@ -1936,6 +1957,12 @@ if {$browser ne {}} { } unset browser doc_path doc_url +set root_exists 0 +bind . <Visibility> { + bind . <Visibility> {} + set root_exists 1 +} + # -- Standard bindings # wm protocol . WM_DELETE_WINDOW do_quit @@ -2410,23 +2437,26 @@ $ctxm add separator $ctxm add command -label {Options...} \ -command do_options proc popup_diff_menu {ctxm x y X Y} { - global current_diff_path + global current_diff_path file_states 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 {![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 normal + set l "Unstage Hunk From Commit" } else { - $ctxm entryconf $::ui_diff_applyhunk \ - -state normal \ - -label {Stage Hunk For Commit} + if {$current_diff_path eq {} + || ![info exists file_states($current_diff_path)] + || {_O} eq [lindex $file_states($current_diff_path) 0]} { + set s disabled + } else { + set s normal + } + set l "Stage Hunk For Commit" + } + if {$::is_3way_diff} { + set s disabled } + $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] |