Merge branch 'os/preserve-author' into pu
authorPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 20 Oct 2016 10:07:24 +0000 (11:07 +0100)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 20 Oct 2016 10:07:24 +0000 (11:07 +0100)
1  2 
lib/commit.tcl
diff --combined lib/commit.tcl
index 01d2cc280ba7832840cb8ef64844daa88ebd9670,1623897e0d4da4ed4ec84036b55d69202faf3a11..83620b7cbc3a194fb17d395c17c10c9dd7f1683f
@@@ -2,7 -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 +34,8 @@@ You are currently in the middle of a me
                                        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 +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 +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,12 -370,12 +370,15 @@@ A rescan will be automatically started 
                }
        }
  
+       if {[info exists commit_author]} {
+               set old_author [commit_author_ident $commit_author]
+       }
        # -- Create the commit.
        #
        set cmd [list commit-tree $tree_id]
 +      if {[is_config_true commit.gpgsign]} {
 +              lappend cmd -S
 +      }
        foreach p [concat $PARENT $MERGE_HEAD] {
                lappend cmd -p $p
        }
                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 -519,20 +522,20 @@@ proc commit_postcommit_wait {fd_ph cmt_
        }
        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
+       }
+ }