Skip to content

Commit

Permalink
Merge branch 'master' of git://repo.or.cz/git-gui
Browse files Browse the repository at this point in the history
* '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
  • Loading branch information
Junio C Hamano committed Aug 27, 2007
2 parents 09b0d9d + c80d25d commit e92ea62
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 66 deletions.
158 changes: 94 additions & 64 deletions git-gui/git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -60,54 +60,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
Expand Down Expand Up @@ -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
Expand All @@ -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
}

Expand Down Expand Up @@ -619,14 +579,66 @@ 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]:
[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
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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

######################################################################
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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]
Expand Down
3 changes: 2 additions & 1 deletion git-gui/lib/class.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -148,11 +148,12 @@ proc make_toplevel {t w args} {
}
}

if {[winfo ismapped .]} {
if {$::root_exists || [winfo ismapped .]} {
regsub -all {::} $this {__} w
set top .$w
set pfx $top
toplevel $top
set ::root_exists 1
} else {
set top .
set pfx {}
Expand Down
2 changes: 1 addition & 1 deletion git-gui/lib/merge.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ method _start {} {
lappend cmd --strategy=recursive
lappend cmd [git fmt-merge-msg <[gitdir FETCH_HEAD]]
lappend cmd HEAD
lappend cmd $cmit
lappend cmd $name

set msg "Merging $current_branch and $stitle"
ui_status "$msg..."
Expand Down

0 comments on commit e92ea62

Please sign in to comment.