From: Shawn O. Pearce Date: Fri, 20 Jul 2007 07:34:56 +0000 (-0400) Subject: git-gui: Factor out common fast-forward merge case X-Git-Tag: gitgui-0.8.0~25 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f66b8a68f21d7dba6b80ba213315974476001b93;p=git.git git-gui: Factor out common fast-forward merge case 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 --- diff --git a/lib/checkout_op.tcl b/lib/checkout_op.tcl index 262dc9689..6d87830dd 100644 --- a/lib/checkout_op.tcl +++ b/lib/checkout_op.tcl @@ -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 + } + } } }