Code

git-gui: Refactor the revert (aka checkout-index) implementation.
authorShawn O. Pearce <spearce@spearce.org>
Sun, 21 Jan 2007 04:20:17 +0000 (23:20 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Sun, 21 Jan 2007 07:54:23 +0000 (02:54 -0500)
We can revert any file which has a valid stage 0 (is not unmerged)
and which is has a working directory status of M or D.  This vastly
simplifies our pattern matching on file status when building up the
list of files to perform a checkout-index against.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh

index c1ee48bf07ede83bdf730688ed839300a2fa8245..7bd2b87fe3e636d293308d2a861da0dd4da77c17 100755 (executable)
@@ -1597,20 +1597,14 @@ proc write_checkout_index {fd pathList totalCnt batch msg after} {
                {incr i -1} {
                set path [lindex $pathList $update_index_cp]
                incr update_index_cp
-
                switch -glob -- [lindex $file_states($path) 0] {
-               AM -
-               AD {set new A_}
-               MM -
-               MD {set new M_}
-               _M -
-               _D {set new __}
-               ?? {continue}
+               U? {continue}
+               ?M -
+               ?D {
+                       puts -nonewline $fd "$path\0"
+                       display_file $path ?_
+               }
                }
-
-               puts -nonewline $fd $path
-               puts -nonewline $fd "\0"
-               display_file $path $new
        }
 
        set ui_status_value [format \
@@ -2406,12 +2400,9 @@ proc revert_helper {txt paths} {
        set after {}
        foreach path $paths {
                switch -glob -- [lindex $file_states($path) 0] {
-               AM -
-               AD -
-               MM -
-               MD -
-               _M -
-               _D {
+               U? {continue}
+               ?M -
+               ?D {
                        lappend pathList $path
                        if {$path eq $current_diff} {
                                set after {reshow_diff;}