about summary refs log tree commit diff
path: root/third_party/git/git-gui/lib/choose_repository.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/git-gui/lib/choose_repository.tcl')
-rw-r--r--third_party/git/git-gui/lib/choose_repository.tcl120
1 files changed, 41 insertions, 79 deletions
diff --git a/third_party/git/git-gui/lib/choose_repository.tcl b/third_party/git/git-gui/lib/choose_repository.tcl
index e54f3e66d8f0..80f5a59bbbfc 100644
--- a/third_party/git/git-gui/lib/choose_repository.tcl
+++ b/third_party/git/git-gui/lib/choose_repository.tcl
@@ -9,18 +9,6 @@ field w_body      ; # Widget holding the center content
 field w_next      ; # Next button
 field w_quit      ; # Quit button
 field o_cons      ; # Console object (if active)
-
-# Status mega-widget instance during _do_clone2 (used by _copy_files and
-# _link_files). Widget is destroyed before _do_clone2 calls
-# _do_clone_checkout
-field o_status
-
-# Operation displayed by status mega-widget during _do_clone_checkout =>
-# _readtree_wait => _postcheckout_wait => _do_clone_submodules =>
-# _do_validate_submodule_cloning. The status mega-widget is a different
-# instance than that stored in $o_status in earlier operations.
-field o_status_op
-
 field w_types     ; # List of type buttons in clone
 field w_recentlist ; # Listbox containing recent repositories
 field w_localpath  ; # Entry widget bound to local_path
@@ -671,12 +659,12 @@ method _do_clone2 {} {
 
 	switch -exact -- $clone_type {
 	hardlink {
-		set o_status [status_bar::two_line $w_body]
+		set o_cons [status_bar::two_line $w_body]
 		pack $w_body -fill x -padx 10 -pady 10
 
-		set status_op [$o_status start \
+		$o_cons start \
 			[mc "Counting objects"] \
-			[mc "buckets"]]
+			[mc "buckets"]
 		update
 
 		if {[file exists [file join $objdir info alternates]]} {
@@ -701,7 +689,6 @@ method _do_clone2 {} {
 			} err]} {
 				catch {cd $pwd}
 				_clone_failed $this [mc "Unable to copy objects/info/alternates: %s" $err]
-				$status_op stop
 				return
 			}
 		}
@@ -713,7 +700,7 @@ method _do_clone2 {} {
 			-directory [file join $objdir] ??]
 		set bcnt [expr {[llength $buckets] + 2}]
 		set bcur 1
-		$status_op update $bcur $bcnt
+		$o_cons update $bcur $bcnt
 		update
 
 		file mkdir [file join .git objects pack]
@@ -721,7 +708,7 @@ method _do_clone2 {} {
 			-directory [file join $objdir pack] *] {
 			lappend tolink [file join pack $i]
 		}
-		$status_op update [incr bcur] $bcnt
+		$o_cons update [incr bcur] $bcnt
 		update
 
 		foreach i $buckets {
@@ -730,10 +717,10 @@ method _do_clone2 {} {
 				-directory [file join $objdir $i] *] {
 				lappend tolink [file join $i $j]
 			}
-			$status_op update [incr bcur] $bcnt
+			$o_cons update [incr bcur] $bcnt
 			update
 		}
-		$status_op stop
+		$o_cons stop
 
 		if {$tolink eq {}} {
 			info_popup [strcat \
@@ -760,8 +747,6 @@ method _do_clone2 {} {
 		if {!$i} return
 
 		destroy $w_body
-
-		set o_status {}
 	}
 	full {
 		set o_cons [console::embed \
@@ -796,9 +781,9 @@ method _do_clone2 {} {
 }
 
 method _copy_files {objdir tocopy} {
-	set status_op [$o_status start \
+	$o_cons start \
 		[mc "Copying objects"] \
-		[mc "KiB"]]
+		[mc "KiB"]
 	set tot 0
 	set cmp 0
 	foreach p $tocopy {
@@ -813,7 +798,7 @@ method _copy_files {objdir tocopy} {
 
 				while {![eof $f_in]} {
 					incr cmp [fcopy $f_in $f_cp -size 16384]
-					$status_op update \
+					$o_cons update \
 						[expr {$cmp / 1024}] \
 						[expr {$tot / 1024}]
 					update
@@ -823,19 +808,17 @@ method _copy_files {objdir tocopy} {
 				close $f_cp
 			} err]} {
 			_clone_failed $this [mc "Unable to copy object: %s" $err]
-			$status_op stop
 			return 0
 		}
 	}
-	$status_op stop
 	return 1
 }
 
 method _link_files {objdir tolink} {
 	set total [llength $tolink]
-	set status_op [$o_status start \
+	$o_cons start \
 		[mc "Linking objects"] \
-		[mc "objects"]]
+		[mc "objects"]
 	for {set i 0} {$i < $total} {} {
 		set p [lindex $tolink $i]
 		if {[catch {
@@ -844,17 +827,15 @@ method _link_files {objdir tolink} {
 					[file join $objdir $p]
 			} err]} {
 			_clone_failed $this [mc "Unable to hardlink object: %s" $err]
-			$status_op stop
 			return 0
 		}
 
 		incr i
 		if {$i % 5 == 0} {
-			$status_op update $i $total
+			$o_cons update $i $total
 			update
 		}
 	}
-	$status_op stop
 	return 1
 }
 
@@ -977,26 +958,11 @@ method _do_clone_checkout {HEAD} {
 		return
 	}
 
-	set status [status_bar::two_line $w_body]
+	set o_cons [status_bar::two_line $w_body]
 	pack $w_body -fill x -padx 10 -pady 10
-
-	# We start the status operation here.
-	#
-	# This function calls _readtree_wait as a callback.
-	#
-	# _readtree_wait in turn either calls _do_clone_submodules directly,
-	# or calls _postcheckout_wait as a callback which then calls
-	# _do_clone_submodules.
-	#
-	# _do_clone_submodules calls _do_validate_submodule_cloning.
-	#
-	# _do_validate_submodule_cloning stops the status operation.
-	#
-	# There are no other calls into this chain from other code.
-
-	set o_status_op [$status start \
+	$o_cons start \
 		[mc "Creating working directory"] \
-		[mc "files"]]
+		[mc "files"]
 
 	set readtree_err {}
 	set fd [git_read --stderr read-tree \
@@ -1010,9 +976,33 @@ method _do_clone_checkout {HEAD} {
 	fileevent $fd readable [cb _readtree_wait $fd]
 }
 
+method _do_validate_submodule_cloning {ok} {
+	if {$ok} {
+		$o_cons done $ok
+		set done 1
+	} else {
+		_clone_failed $this [mc "Cannot clone submodules."]
+	}
+}
+
+method _do_clone_submodules {} {
+	if {$recursive eq {true}} {
+		destroy $w_body
+		set o_cons [console::embed \
+			$w_body \
+			[mc "Cloning submodules"]]
+		pack $w_body -fill both -expand 1 -padx 10
+		$o_cons exec \
+			[list git submodule update --init --recursive] \
+			[cb _do_validate_submodule_cloning]
+	} else {
+		set done 1
+	}
+}
+
 method _readtree_wait {fd} {
 	set buf [read $fd]
-	$o_status_op update_meter $buf
+	$o_cons update_meter $buf
 	append readtree_err $buf
 
 	fconfigure $fd -blocking 1
@@ -1060,34 +1050,6 @@ method _postcheckout_wait {fd_ph} {
 	fconfigure $fd_ph -blocking 0
 }
 
-method _do_clone_submodules {} {
-	if {$recursive eq {true}} {
-		$o_status_op stop
-		set o_status_op {}
-
-		destroy $w_body
-
-		set o_cons [console::embed \
-			$w_body \
-			[mc "Cloning submodules"]]
-		pack $w_body -fill both -expand 1 -padx 10
-		$o_cons exec \
-			[list git submodule update --init --recursive] \
-			[cb _do_validate_submodule_cloning]
-	} else {
-		set done 1
-	}
-}
-
-method _do_validate_submodule_cloning {ok} {
-	if {$ok} {
-		$o_cons done $ok
-		set done 1
-	} else {
-		_clone_failed $this [mc "Cannot clone submodules."]
-	}
-}
-
 ######################################################################
 ##
 ## Open Existing Repository