summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgit-gui.sh34
-rw-r--r--lib/browser.tcl2
-rw-r--r--lib/commit.tcl36
-rw-r--r--lib/index.tcl6
4 files changed, 45 insertions, 33 deletions
diff --git a/git-gui.sh b/git-gui.sh
index f9b323abff..5bc21b878d 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -534,28 +534,10 @@ proc _lappend_nice {cmd_var} {
}
proc git {args} {
- set opt [list]
-
- while {1} {
- switch -- [lindex $args 0] {
- --nice {
- _lappend_nice opt
- }
-
- default {
- break
- }
-
- }
-
- set args [lrange $args 1 end]
- }
-
- set cmdp [_git_cmd [lindex $args 0]]
- set args [lrange $args 1 end]
-
- _trace_exec [concat $opt $cmdp $args]
- set result [eval exec $opt $cmdp $args]
+ set fd [eval [list git_read] $args]
+ fconfigure $fd -translation binary -encoding utf-8
+ set result [string trimright [read $fd] "\n"]
+ close $fd
if {$::_trace} {
puts stderr "< $result"
}
@@ -1111,7 +1093,7 @@ git-version proc _parse_config {arr_name args} {
[list git_read config] \
$args \
[list --null --list]]
- fconfigure $fd_rc -translation binary
+ fconfigure $fd_rc -translation binary -encoding utf-8
set buf [read $fd_rc]
close $fd_rc
}
@@ -1691,7 +1673,7 @@ proc read_diff_index {fd after} {
set i [split [string range $buf_rdi $c [expr {$z1 - 2}]] { }]
set p [string range $buf_rdi $z1 [expr {$z2 - 1}]]
merge_state \
- [encoding convertfrom $p] \
+ [encoding convertfrom utf-8 $p] \
[lindex $i 4]? \
[list [lindex $i 0] [lindex $i 2]] \
[list]
@@ -1724,7 +1706,7 @@ proc read_diff_files {fd after} {
set i [split [string range $buf_rdf $c [expr {$z1 - 2}]] { }]
set p [string range $buf_rdf $z1 [expr {$z2 - 1}]]
merge_state \
- [encoding convertfrom $p] \
+ [encoding convertfrom utf-8 $p] \
?[lindex $i 4] \
[list] \
[list [lindex $i 0] [lindex $i 2]]
@@ -1747,7 +1729,7 @@ proc read_ls_others {fd after} {
set pck [split $buf_rlo "\0"]
set buf_rlo [lindex $pck end]
foreach p [lrange $pck 0 end-1] {
- set p [encoding convertfrom $p]
+ set p [encoding convertfrom utf-8 $p]
if {[string index $p end] eq {/}} {
set p [string range $p 0 end-1]
}
diff --git a/lib/browser.tcl b/lib/browser.tcl
index 158049353f..a982983667 100644
--- a/lib/browser.tcl
+++ b/lib/browser.tcl
@@ -197,7 +197,7 @@ method _ls {tree_id {name {}}} {
$w conf -state disabled
set fd [git_read ls-tree -z $tree_id]
- fconfigure $fd -blocking 0 -translation binary -encoding binary
+ fconfigure $fd -blocking 0 -translation binary -encoding utf-8
fileevent $fd readable [cb _read $fd]
}
diff --git a/lib/commit.tcl b/lib/commit.tcl
index 01d2cc280b..83620b7cbc 100644
--- a/lib/commit.tcl
+++ b/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
+ }
+}
diff --git a/lib/index.tcl b/lib/index.tcl
index 3a3e534aef..b588db11d9 100644
--- a/lib/index.tcl
+++ b/lib/index.tcl
@@ -115,7 +115,7 @@ proc write_update_indexinfo {fd pathList totalCnt batch after} {
set info [lindex $s 2]
if {$info eq {}} continue
- puts -nonewline $fd "$info\t[encoding convertto $path]\0"
+ puts -nonewline $fd "$info\t[encoding convertto utf-8 $path]\0"
display_file $path $new
}
@@ -186,7 +186,7 @@ proc write_update_index {fd pathList totalCnt batch after} {
?M {set new M_}
?? {continue}
}
- puts -nonewline $fd "[encoding convertto $path]\0"
+ puts -nonewline $fd "[encoding convertto utf-8 $path]\0"
display_file $path $new
}
@@ -247,7 +247,7 @@ proc write_checkout_index {fd pathList totalCnt batch after} {
?M -
?T -
?D {
- puts -nonewline $fd "[encoding convertto $path]\0"
+ puts -nonewline $fd "[encoding convertto utf-8 $path]\0"
display_file $path ?_
}
}