From 84e0bf1de4fcdada4698e2bd53bafaeaea6b5cbd Mon Sep 17 00:00:00 2001
From: "Shawn O. Pearce" <spearce@spearce.org>
Date: Sat, 25 Nov 2006 04:04:24 -0500
Subject: [PATCH] git-gui: Started implementation of switch_branch.

This implementation of switch_branch is not yet finished, and thus
it throws a "NOT FINISHED" error rather than completing the switch.
But its a rough sketch of the procedure required.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 git-gui | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/git-gui b/git-gui
index f52dd522c1..3845cf7168 100755
--- a/git-gui
+++ b/git-gui
@@ -1643,10 +1643,59 @@ proc populate_branch_menu {m} {
 	}
 }
 
-proc switch_branch {b} {
+proc do_create_branch {} {
 	error "NOT IMPLEMENTED"
 }
 
+proc do_delete_branch {} {
+	error "NOT IMPLEMENTED"
+}
+
+proc switch_branch {b} {
+	global HEAD commit_type file_states current_branch
+	global selected_commit_type ui_comm
+
+	if {![lock_index switch]} return
+
+	# -- Backup the selected branch (repository_state resets it)
+	#
+	set new_branch $current_branch
+
+	# -- Our in memory state should match the repository.
+	#
+	repository_state curType curHEAD curMERGE_HEAD
+	if {[string match amend* $commit_type]
+		&& $curType eq {normal}
+		&& $curHEAD eq $HEAD} {
+	} elseif {$commit_type ne $curType || $HEAD ne $curHEAD} {
+		info_popup {Last scanned state does not match repository state.
+
+Another Git program has modified this repository
+since the last scan.  A rescan must be performed
+before the current branch can be changed.
+
+The rescan will be automatically started now.
+}
+		unlock_index
+		rescan {set ui_status_value {Ready.}}
+		return
+	}
+
+	# -- Toss the message buffer if we are in amend mode.
+	#
+	if {[string match amend* $curType]} {
+		$ui_comm delete 0.0 end
+		$ui_comm edit reset
+		$ui_comm edit modified false
+	}
+
+	set selected_commit_type new
+	set current_branch $new_branch
+
+	unlock_index
+	error "NOT FINISHED"
+}
+
 ######################################################################
 ##
 ## remote management
-- 
GitLab