diff options
Diffstat (limited to 'git-gui/lib/commit.tcl')
| -rw-r--r-- | git-gui/lib/commit.tcl | 65 | 
1 files changed, 35 insertions, 30 deletions
| diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl index f9791f64db..46a78c158f 100644 --- a/git-gui/lib/commit.tcl +++ b/git-gui/lib/commit.tcl @@ -25,7 +25,7 @@ You are currently in the middle of a merge that has not been fully completed.  Y  	set msg {}  	set parents [list]  	if {[catch { -			set fd [open "| git cat-file commit $curHEAD" r] +			set fd [git_read cat-file commit $curHEAD]  			fconfigure $fd -encoding binary -translation lf  			if {[catch {set enc $repo_config(i18n.commitencoding)}]} {  				set enc utf-8 @@ -58,7 +58,7 @@ You are currently in the middle of a merge that has not been fully completed.  Y  	$ui_comm insert end $msg  	$ui_comm edit reset  	$ui_comm edit modified false -	rescan {set ui_status_value {Ready.}} +	rescan ui_ready  }  set GIT_COMMITTER_IDENT {} @@ -108,12 +108,12 @@ proc create_new_commit {} {  	$ui_comm delete 0.0 end  	$ui_comm edit reset  	$ui_comm edit modified false -	rescan {set ui_status_value {Ready.}} +	rescan ui_ready  }  proc commit_tree {} {  	global HEAD commit_type file_states ui_comm repo_config -	global ui_status_value pch_error +	global pch_error  	if {[committer_ident] eq {}} return  	if {![lock_index update]} return @@ -132,7 +132,7 @@ Another Git program has modified this repository since the last scan.  A rescan  The rescan will be automatically started now.  }  		unlock_index -		rescan {set ui_status_value {Ready.}} +		rescan ui_ready  		return  	} @@ -206,7 +206,7 @@ A good commit message has the following format:  		return  	} -	set ui_status_value {Calling pre-commit hook...} +	ui_status {Calling pre-commit hook...}  	set pch_error {}  	set fd_ph [open "| $pchook" r]  	fconfigure $fd_ph -blocking 0 -translation binary @@ -215,13 +215,13 @@ A good commit message has the following format:  }  proc commit_prehook_wait {fd_ph curHEAD msg} { -	global pch_error ui_status_value +	global pch_error  	append pch_error [read $fd_ph]  	fconfigure $fd_ph -blocking 1  	if {[eof $fd_ph]} {  		if {[catch {close $fd_ph}]} { -			set ui_status_value {Commit declined by pre-commit hook.} +			ui_status {Commit declined by pre-commit hook.}  			hook_failed_popup pre-commit $pch_error  			unlock_index  		} else { @@ -234,25 +234,23 @@ proc commit_prehook_wait {fd_ph curHEAD msg} {  }  proc commit_writetree {curHEAD msg} { -	global ui_status_value - -	set ui_status_value {Committing changes...} -	set fd_wt [open "| git write-tree" r] +	ui_status {Committing changes...} +	set fd_wt [git_read write-tree]  	fileevent $fd_wt readable \  		[list commit_committree $fd_wt $curHEAD $msg]  }  proc commit_committree {fd_wt curHEAD msg} {  	global HEAD PARENT MERGE_HEAD commit_type -	global all_heads current_branch -	global ui_status_value ui_comm selected_commit_type +	global current_branch +	global ui_comm selected_commit_type  	global file_states selected_paths rescan_active  	global repo_config  	gets $fd_wt tree_id  	if {$tree_id eq {} || [catch {close $fd_wt} err]} {  		error_popup "write-tree failed:\n\n$err" -		set ui_status_value {Commit failed.} +		ui_status {Commit failed.}  		unlock_index  		return  	} @@ -260,7 +258,18 @@ proc commit_committree {fd_wt curHEAD msg} {  	# -- Verify this wasn't an empty change.  	#  	if {$commit_type eq {normal}} { -		set old_tree [git rev-parse "$PARENT^{tree}"] +		set fd_ot [git_read cat-file commit $PARENT] +		fconfigure $fd_ot -encoding binary -translation lf +		set old_tree [gets $fd_ot] +		close $fd_ot + +		if {[string equal -length 5 {tree } $old_tree] +			&& [string length $old_tree] == 45} { +			set old_tree [string range $old_tree 5 end] +		} else { +			error "Commit $PARENT appears to be corrupt" +		} +  		if {$tree_id eq $old_tree} {  			info_popup {No changes to commit. @@ -269,7 +278,7 @@ No files were modified by this commit and it was not a merge commit.  A rescan will be automatically started now.  }  			unlock_index -			rescan {set ui_status_value {No changes to commit.}} +			rescan {ui_status {No changes to commit.}}  			return  		}  	} @@ -294,7 +303,7 @@ A rescan will be automatically started now.  	lappend cmd <$msg_p  	if {[catch {set cmt_id [eval git $cmd]} err]} {  		error_popup "commit-tree failed:\n\n$err" -		set ui_status_value {Commit failed.} +		ui_status {Commit failed.}  		unlock_index  		return  	} @@ -316,7 +325,7 @@ A rescan will be automatically started now.  			git update-ref -m $reflogm HEAD $cmt_id $curHEAD  		} err]} {  		error_popup "update-ref failed:\n\n$err" -		set ui_status_value {Commit failed.} +		ui_status {Commit failed.}  		unlock_index  		return  	} @@ -331,7 +340,12 @@ A rescan will be automatically started now.  	# -- Let rerere do its thing.  	# -	if {[file isdirectory [gitdir rr-cache]]} { +	if {[get_config rerere.enabled] eq {}} { +		set rerere [file isdirectory [gitdir rr-cache]] +	} else { +		set rerere [is_config_true rerere.enabled] +	} +	if {$rerere} {  		catch {git rerere}  	} @@ -356,14 +370,6 @@ A rescan will be automatically started now.  	if {[is_enabled singlecommit]} do_quit -	# -- Make sure our current branch exists. -	# -	if {$commit_type eq {initial}} { -		lappend all_heads $current_branch -		set all_heads [lsort -unique $all_heads] -		populate_branch_menu -	} -  	# -- Update in memory status  	#  	set selected_commit_type new @@ -405,6 +411,5 @@ A rescan will be automatically started now.  	display_all_files  	unlock_index  	reshow_diff -	set ui_status_value \ -		"Created commit [string range $cmt_id 0 7]: $subject" +	ui_status "Created commit [string range $cmt_id 0 7]: $subject"  } | 
