Code

git-gui: Factor out common fast-forward merge case
authorShawn O. Pearce <spearce@spearce.org>
Fri, 20 Jul 2007 07:34:56 +0000 (03:34 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Sat, 21 Jul 2007 09:00:37 +0000 (05:00 -0400)
In both the ff and reset merge_types supported by checkout_op the
result is the same if the merge base of our target commit and the
existing commit is the existing commit: its a fast-forward as the
existing commit is fully contained in the target commit.

This minor cleanup in logic will make it easier to implement a
new kind of merge_type that actually merges the two trees with a
real merge strategy, such as git-merge-recursive.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
lib/checkout_op.tcl

index 262dc96895aa76a6930e98719533a61771775723..6d87830dd610c0c7cb8250671a79f8abae4501c1 100644 (file)
@@ -182,27 +182,23 @@ method _update_ref {} {
                #
        } else {
                catch {set merge_base [git merge-base $new $cur]}
-               switch -- $merge_type {
-               ff {
-                       if {$merge_base eq $new} {
-                               # The current branch is actually newer.
-                               #
-                               set new $cur
-                       } elseif {$merge_base eq $cur} {
-                               # The current branch is older.
-                               #
-                               set reflog_msg "merge $new_expr: Fast-forward"
-                       } else {
-                               _error $this "Branch '$newbranch' already exists.\n\nIt cannot fast-forward to $new_expr.\nA merge is required."
-                               return 0
+               if {$merge_base eq $cur} {
+                       # The current branch is older.
+                       #
+                       set reflog_msg "merge $new_expr: Fast-forward"
+               } else {
+                       switch -- $merge_type {
+                       ff {
+                               if {$merge_base eq $new} {
+                                       # The current branch is actually newer.
+                                       #
+                                       set new $cur
+                               } else {
+                                       _error $this "Branch '$newbranch' already exists.\n\nIt cannot fast-forward to $new_expr.\nA merge is required."
+                                       return 0
+                               }
                        }
-               }
-               reset {
-                       if {$merge_base eq $cur} {
-                               # The current branch is older.
-                               #
-                               set reflog_msg "merge $new_expr: Fast-forward"
-                       } else {
+                       reset {
                                # The current branch will lose things.
                                #
                                if {[_confirm_reset $this $cur]} {
@@ -211,11 +207,11 @@ method _update_ref {} {
                                        return 0
                                }
                        }
-               }
-               default {
-                       _error $this "Only 'ff' and 'reset' merge is currently supported."
-                       return 0
-               }
+                       default {
+                               _error $this "Only 'ff' and 'reset' merge is currently supported."
+                               return 0
+                       }
+                       }
                }
        }