summaryrefslogtreecommitdiff
path: root/git-gui/git-gui.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-11-16 23:51:11 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-11-16 23:51:11 (GMT)
commit6e13921b4f7adcc7316a76c0c4955b85b1589a65 (patch)
treed741279335c8a6b9e1565d1a999bc0018545a754 /git-gui/git-gui.sh
parentbf31115312aefd36f1571379842eebebf34dcb55 (diff)
parent941930732fc0bbffbd19e9fa09fe00bc1512a3a7 (diff)
downloadgit-6e13921b4f7adcc7316a76c0c4955b85b1589a65.zip
git-6e13921b4f7adcc7316a76c0c4955b85b1589a65.tar.gz
git-6e13921b4f7adcc7316a76c0c4955b85b1589a65.tar.bz2
Merge git://repo.or.cz/git-gui
* git://repo.or.cz/git-gui: git-gui: Fix the search bar destruction handler. Update the po template git-gui: Implement automatic rescan after Tool execution. git-gui: Allow Tools request arguments from the user. git-gui: Add a Tools menu for arbitrary commands. git-gui: Fix the after callback execution in rescan. git-gui: Implement system-wide configuration handling. git-gui: try to provide a window icon under X
Diffstat (limited to 'git-gui/git-gui.sh')
-rwxr-xr-xgit-gui/git-gui.sh92
1 files changed, 76 insertions, 16 deletions
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index cf9ef6e..8a4b42d 100755
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
@@ -597,6 +597,28 @@ if {[is_Windows]} {
if {![info exists env(DISPLAY)]} {
set env(DISPLAY) :9999
}
+} else {
+ catch {
+ image create photo gitlogo -width 16 -height 16
+
+ gitlogo put #33CC33 -to 7 0 9 2
+ gitlogo put #33CC33 -to 4 2 12 4
+ gitlogo put #33CC33 -to 7 4 9 6
+ gitlogo put #CC3333 -to 4 6 12 8
+ gitlogo put gray26 -to 4 9 6 10
+ gitlogo put gray26 -to 3 10 6 12
+ gitlogo put gray26 -to 8 9 13 11
+ gitlogo put gray26 -to 8 11 10 12
+ gitlogo put gray26 -to 11 11 13 14
+ gitlogo put gray26 -to 3 12 5 14
+ gitlogo put gray26 -to 5 13
+ gitlogo put gray26 -to 10 13
+ gitlogo put gray26 -to 4 14 12 15
+ gitlogo put gray26 -to 5 15 11 16
+ gitlogo redither
+
+ wm iconphoto . -default gitlogo
+ }
}
######################################################################
@@ -918,19 +940,25 @@ git-version proc _parse_config {arr_name args} {
}
proc load_config {include_global} {
- global repo_config global_config default_config
+ global repo_config global_config system_config default_config
if {$include_global} {
+ _parse_config system_config --system
_parse_config global_config --global
}
_parse_config repo_config
foreach name [array names default_config] {
+ if {[catch {set v $system_config($name)}]} {
+ set system_config($name) $default_config($name)
+ }
+ }
+ foreach name [array names system_config] {
if {[catch {set v $global_config($name)}]} {
- set global_config($name) $default_config($name)
+ set global_config($name) $system_config($name)
}
if {[catch {set v $repo_config($name)}]} {
- set repo_config($name) $default_config($name)
+ set repo_config($name) $system_config($name)
}
}
}
@@ -1463,10 +1491,8 @@ proc rescan_done {fd buf after} {
prune_selection
unlock_index
display_all_files
- if {$current_diff_path ne {}} reshow_diff
- if {$current_diff_path eq {}} select_first_diff
-
- uplevel #0 $after
+ if {$current_diff_path ne {}} { reshow_diff $after }
+ if {$current_diff_path eq {}} { select_first_diff $after }
}
proc prune_selection {} {
@@ -1978,16 +2004,16 @@ proc do_rescan {} {
}
proc ui_do_rescan {} {
- rescan {force_first_diff; ui_ready}
+ rescan {force_first_diff ui_ready}
}
proc do_commit {} {
commit_tree
}
-proc next_diff {} {
+proc next_diff {{after {}}} {
global next_diff_p next_diff_w next_diff_i
- show_diff $next_diff_p $next_diff_w {}
+ show_diff $next_diff_p $next_diff_w {} {} $after
}
proc find_anchor_pos {lst name} {
@@ -2072,25 +2098,42 @@ proc next_diff_after_action {w path {lno {}} {mmask {}}} {
}
}
-proc select_first_diff {} {
+proc select_first_diff {after} {
global ui_workdir
if {[find_next_diff $ui_workdir {} 1 {^_?U}] ||
[find_next_diff $ui_workdir {} 1 {[^O]$}]} {
- next_diff
+ next_diff $after
+ } else {
+ uplevel #0 $after
}
}
-proc force_first_diff {} {
- global current_diff_path
+proc force_first_diff {after} {
+ global ui_workdir current_diff_path file_states
if {[info exists file_states($current_diff_path)]} {
set state [lindex $file_states($current_diff_path) 0]
+ } else {
+ set state {OO}
+ }
- if {[string index $state 1] ne {O}} return
+ set reselect 0
+ if {[string first {U} $state] >= 0} {
+ # Already a conflict, do nothing
+ } elseif {[find_next_diff $ui_workdir $current_diff_path {} {^_?U}]} {
+ set reselect 1
+ } elseif {[string index $state 1] ne {O}} {
+ # Already a diff & no conflicts, do nothing
+ } elseif {[find_next_diff $ui_workdir $current_diff_path {} {[^O]$}]} {
+ set reselect 1
}
- select_first_diff
+ if {$reselect} {
+ next_diff $after
+ } else {
+ uplevel #0 $after
+ }
}
proc toggle_or_diff {w x y} {
@@ -2246,6 +2289,9 @@ if {[is_enabled transport]} {
.mbar add cascade -label [mc Merge] -menu .mbar.merge
.mbar add cascade -label [mc Remote] -menu .mbar.remote
}
+if {[is_enabled multicommit] || [is_enabled singlecommit]} {
+ .mbar add cascade -label [mc Tools] -menu .mbar.tools
+}
. configure -menu .mbar
# -- Repository Menu
@@ -2520,6 +2566,20 @@ if {[is_MacOSX]} {
-command do_options
}
+# -- Tools Menu
+#
+if {[is_enabled multicommit] || [is_enabled singlecommit]} {
+ set tools_menubar .mbar.tools
+ menu $tools_menubar
+ $tools_menubar add separator
+ $tools_menubar add command -label [mc "Add..."] -command tools_add::dialog
+ $tools_menubar add command -label [mc "Remove..."] -command tools_remove::dialog
+ set tools_tailcnt 3
+ if {[array names repo_config guitool.*.cmd] ne {}} {
+ tools_populate_all
+ }
+}
+
# -- Help Menu
#
.mbar add cascade -label [mc Help] -menu .mbar.help