|
|
|
@ -1170,6 +1170,7 @@ proc rescan {after {honor_trustmtime 1}} {
@@ -1170,6 +1170,7 @@ proc rescan {after {honor_trustmtime 1}} {
|
|
|
|
|
|| [string trim [$ui_comm get 0.0 end]] eq {})} { |
|
|
|
|
if {[string match amend* $commit_type]} { |
|
|
|
|
} elseif {[load_message GITGUI_MSG]} { |
|
|
|
|
} elseif {[run_prepare_commit_msg_hook]} { |
|
|
|
|
} elseif {[load_message MERGE_MSG]} { |
|
|
|
|
} elseif {[load_message SQUASH_MSG]} { |
|
|
|
|
} |
|
|
|
@ -1269,6 +1270,70 @@ proc load_message {file} {
@@ -1269,6 +1270,70 @@ proc load_message {file} {
|
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
proc run_prepare_commit_msg_hook {} { |
|
|
|
|
global pch_error |
|
|
|
|
|
|
|
|
|
# prepare-commit-msg requires PREPARE_COMMIT_MSG exist. From git-gui |
|
|
|
|
# it will be .git/MERGE_MSG (merge), .git/SQUASH_MSG (squash), or an |
|
|
|
|
# empty file but existant file. |
|
|
|
|
|
|
|
|
|
set fd_pcm [open [gitdir PREPARE_COMMIT_MSG] a] |
|
|
|
|
|
|
|
|
|
if {[file isfile [gitdir MERGE_MSG]]} { |
|
|
|
|
set pcm_source "merge" |
|
|
|
|
set fd_mm [open [gitdir MERGE_MSG] r] |
|
|
|
|
puts -nonewline $fd_pcm [read $fd_mm] |
|
|
|
|
close $fd_mm |
|
|
|
|
} elseif {[file isfile [gitdir SQUASH_MSG]]} { |
|
|
|
|
set pcm_source "squash" |
|
|
|
|
set fd_sm [open [gitdir SQUASH_MSG] r] |
|
|
|
|
puts -nonewline $fd_pcm [read $fd_sm] |
|
|
|
|
close $fd_sm |
|
|
|
|
} else { |
|
|
|
|
set pcm_source "" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
close $fd_pcm |
|
|
|
|
|
|
|
|
|
set fd_ph [githook_read prepare-commit-msg \ |
|
|
|
|
[gitdir PREPARE_COMMIT_MSG] $pcm_source] |
|
|
|
|
if {$fd_ph eq {}} { |
|
|
|
|
catch {file delete [gitdir PREPARE_COMMIT_MSG]} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ui_status [mc "Calling prepare-commit-msg hook..."] |
|
|
|
|
set pch_error {} |
|
|
|
|
|
|
|
|
|
fconfigure $fd_ph -blocking 0 -translation binary -eofchar {} |
|
|
|
|
fileevent $fd_ph readable \ |
|
|
|
|
[list prepare_commit_msg_hook_wait $fd_ph] |
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
proc prepare_commit_msg_hook_wait {fd_ph} { |
|
|
|
|
global pch_error |
|
|
|
|
|
|
|
|
|
append pch_error [read $fd_ph] |
|
|
|
|
fconfigure $fd_ph -blocking 1 |
|
|
|
|
if {[eof $fd_ph]} { |
|
|
|
|
if {[catch {close $fd_ph}]} { |
|
|
|
|
ui_status [mc "Commit declined by prepare-commit-msg hook."] |
|
|
|
|
hook_failed_popup prepare-commit-msg $pch_error |
|
|
|
|
catch {file delete [gitdir PREPARE_COMMIT_MSG]} |
|
|
|
|
exit 1 |
|
|
|
|
} else { |
|
|
|
|
load_message PREPARE_COMMIT_MSG |
|
|
|
|
} |
|
|
|
|
set pch_error {} |
|
|
|
|
catch {file delete [gitdir PREPARE_COMMIT_MSG]} |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
fconfigure $fd_ph -blocking 0 |
|
|
|
|
catch {file delete [gitdir PREPARE_COMMIT_MSG]} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
proc read_diff_index {fd after} { |
|
|
|
|
global buf_rdi |
|
|
|
|
|
|
|
|
|