git-gui: By default don't allow partially included files.

The concept of the Git index is confusing for many users, especially
those who are newer to Git.

Since git-gui is (at least partially) intended to be used by newer
users who don't need the complexity of the index to be put in front
of them early on, we should hide it by making any partially included
file fully included as soon as we identify it.  To do this we just
run a quick update_index pass on any file which differs both in the
index and the working directory, as these files have already been
at least partially included by the user.

A new option has been added in the options dialog (gui.partialinclude)
which lets the user enable accessing the index from git-gui.  This
just disables the automatic update_index pass on partially included
files.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce 2006-11-13 04:22:42 -05:00
parent fce89e466a
commit f7f8d32226

36
git-gui
View File

@ -406,19 +406,33 @@ proc read_ls_others {fd final} {
proc status_eof {fd buf final} { proc status_eof {fd buf final} {
global status_active ui_status_value global status_active ui_status_value
global file_states repo_config
upvar $buf to_clear upvar $buf to_clear
if {[eof $fd]} { if {![eof $fd]} return
set to_clear {} set to_clear {}
close $fd close $fd
if {[incr status_active -1] > 0} return
if {[incr status_active -1] == 0} { unlock_index
display_all_files display_all_files
unlock_index
reshow_diff if {$repo_config(gui.partialinclude) ne {true}} {
set ui_status_value $final set pathList [list]
foreach path [array names file_states] {
switch -- [lindex $file_states($path) 0] {
AM -
MM {lappend pathList $path}
}
}
if {$pathList ne {}} {
update_index $pathList
return
} }
} }
reshow_diff
set ui_status_value $final
} }
###################################################################### ######################################################################
@ -1164,7 +1178,6 @@ proc update_index {pathList} {
set batch [expr {int($totalCnt * .01) + 1}] set batch [expr {int($totalCnt * .01) + 1}]
if {$batch > 25} {set batch 25} if {$batch > 25} {set batch 25}
set ui_status_value "Including files ... 0/$totalCnt 0%"
set ui_status_value [format \ set ui_status_value [format \
"Including files ... %i/%i files (%.2f%%)" \ "Including files ... %i/%i files (%.2f%%)" \
$update_index_cp \ $update_index_cp \
@ -1192,10 +1205,9 @@ proc write_update_index {fd pathList totalCnt batch} {
if {$update_index_cp >= $totalCnt} { if {$update_index_cp >= $totalCnt} {
close $fd close $fd
unlock_index unlock_index
set ui_status_value {Ready.}
if {$update_index_rsd} { if {$update_index_rsd} {
reshow_diff reshow_diff
} else {
set ui_status_value {Ready.}
} }
return return
} }
@ -1823,6 +1835,7 @@ proc do_options {} {
pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5 pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5
foreach option { foreach option {
{b partialinclude {Allow Partially Included Files}}
{b pullsummary {Show Pull Summary}} {b pullsummary {Show Pull Summary}}
{b trustmtime {Trust File Modification Timestamps}} {b trustmtime {Trust File Modification Timestamps}}
{i diffcontext {Number of Diff Context Lines}} {i diffcontext {Number of Diff Context Lines}}
@ -2000,6 +2013,7 @@ proc apply_config {} {
set default_config(gui.trustmtime) false set default_config(gui.trustmtime) false
set default_config(gui.pullsummary) true set default_config(gui.pullsummary) true
set default_config(gui.partialinclude) false
set default_config(gui.diffcontext) 5 set default_config(gui.diffcontext) 5
set default_config(gui.fontui) [font configure font_ui] set default_config(gui.fontui) [font configure font_ui]
set default_config(gui.fontdiff) [font configure font_diff] set default_config(gui.fontdiff) [font configure font_diff]