diff options
Diffstat (limited to 'git-gui/lib/commit.tcl')
| -rw-r--r-- | git-gui/lib/commit.tcl | 36 | 
1 files changed, 33 insertions, 3 deletions
| diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl index 01d2cc280b..83620b7cbc 100644 --- a/git-gui/lib/commit.tcl +++ b/git-gui/lib/commit.tcl @@ -2,7 +2,7 @@  # Copyright (C) 2006, 2007 Shawn Pearce  proc load_last_commit {} { -	global HEAD PARENT MERGE_HEAD commit_type ui_comm +	global HEAD PARENT MERGE_HEAD commit_type ui_comm commit_author  	global repo_config  	if {[llength $PARENT] == 0} { @@ -34,6 +34,8 @@ You are currently in the middle of a merge that has not been fully completed.  Y  					lappend parents [string range $line 7 end]  				} elseif {[string match {encoding *} $line]} {  					set enc [string tolower [string range $line 9 end]] +				} elseif {[regexp "author (.*)\\s<(.*)>\\s(\\d.*$)" $line all name email time]} { +					set commit_author [list name $name email $email date $time]  				}  			}  			set msg [read $fd] @@ -106,9 +108,10 @@ proc do_signoff {} {  }  proc create_new_commit {} { -	global commit_type ui_comm +	global commit_type ui_comm commit_author  	set commit_type normal +	unset -nocomplain commit_author  	$ui_comm delete 0.0 end  	$ui_comm edit reset  	$ui_comm edit modified false @@ -322,11 +325,12 @@ proc commit_writetree {curHEAD msg_p} {  }  proc commit_committree {fd_wt curHEAD msg_p} { -	global HEAD PARENT MERGE_HEAD commit_type +	global HEAD PARENT MERGE_HEAD commit_type commit_author  	global current_branch  	global ui_comm selected_commit_type  	global file_states selected_paths rescan_active  	global repo_config +	global env  	gets $fd_wt tree_id  	if {[catch {close $fd_wt} err]} { @@ -366,6 +370,9 @@ A rescan will be automatically started now.  		}  	} +	if {[info exists commit_author]} { +		set old_author [commit_author_ident $commit_author] +	}  	# -- Create the commit.  	#  	set cmd [list commit-tree $tree_id] @@ -381,8 +388,14 @@ A rescan will be automatically started now.  		error_popup [strcat [mc "commit-tree failed:"] "\n\n$err"]  		ui_status [mc "Commit failed."]  		unlock_index +		unset -nocomplain commit_author +		commit_author_reset $old_author  		return  	} +	if {[info exists commit_author]} { +		unset -nocomplain commit_author +		commit_author_reset $old_author +	}  	# -- Update the HEAD ref.  	# @@ -509,3 +522,20 @@ proc commit_postcommit_wait {fd_ph cmt_id} {  	}  	fconfigure $fd_ph -blocking 0  } + +proc commit_author_ident {details} { +	global env +	array set author $details +	set old [array get env GIT_AUTHOR_*] +	set env(GIT_AUTHOR_NAME) $author(name) +	set env(GIT_AUTHOR_EMAIL) $author(email) +	set env(GIT_AUTHOR_DATE) $author(date) +	return $old +} +proc commit_author_reset {details} { +	global env +	unset env(GIT_AUTHOR_NAME) env(GIT_AUTHOR_EMAIL) env(GIT_AUTHOR_DATE) +	if {$details ne {}} { +		array set env $details +	} +} | 
