Merge branch 'os/preserve-author' into pu

maint
Pat Thoyts 2016-10-20 11:07:24 +01:00
commit bfe43447fb
1 changed files with 33 additions and 3 deletions

View File

@ -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
}
}