diff options
-rw-r--r-- | lib/commit.tcl | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/lib/commit.tcl b/lib/commit.tcl index 60edf99752..1623897e0d 100644 --- a/lib/commit.tcl +++ b/lib/commit.tcl @@ -1,13 +1,8 @@ # git-gui misc. commit reading/writing support # Copyright (C) 2006, 2007 Shawn Pearce -set author_name "" -set author_email "" -set author_date "" - proc load_last_commit {} { - global HEAD PARENT MERGE_HEAD commit_type ui_comm - global author_name author_email author_date + global HEAD PARENT MERGE_HEAD commit_type ui_comm commit_author global repo_config if {[llength $PARENT] == 0} { @@ -40,9 +35,7 @@ You are currently in the middle of a merge that has not been fully completed. Y } 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 author_name $name - set author_email $email - set author_date $time + set commit_author [list name $name email $email date $time] } } set msg [read $fd] @@ -115,13 +108,10 @@ proc do_signoff {} { } proc create_new_commit {} { - global commit_type ui_comm - global author_name author_email author_date + global commit_type ui_comm commit_author set commit_type normal - set author_name "" - set author_email "" - set author_date "" + unset -nocomplain commit_author $ui_comm delete 0.0 end $ui_comm edit reset $ui_comm edit modified false @@ -335,12 +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 author_name author_email author_date + global env gets $fd_wt tree_id if {[catch {close $fd_wt} err]} { @@ -380,10 +370,8 @@ A rescan will be automatically started now. } } - if {$author_name ne ""} { - set env(GIT_AUTHOR_NAME) $author_name - set env(GIT_AUTHOR_EMAIL) $author_email - set env(GIT_AUTHOR_DATE) $author_date + if {[info exists commit_author]} { + set old_author [commit_author_ident $commit_author] } # -- Create the commit. # @@ -397,8 +385,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. # @@ -525,3 +519,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 + } +} |