git-gui: Add support for calling out to the prepare-commit-msg hook
Signed-off-by: Joshua Williams <joshua.williams@qlogic.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
1e02b32e72
commit
2cd1fd1f6d
65
git-gui.sh
65
git-gui.sh
@ -1170,6 +1170,7 @@ proc rescan {after {honor_trustmtime 1}} {
|
|||||||
|| [string trim [$ui_comm get 0.0 end]] eq {})} {
|
|| [string trim [$ui_comm get 0.0 end]] eq {})} {
|
||||||
if {[string match amend* $commit_type]} {
|
if {[string match amend* $commit_type]} {
|
||||||
} elseif {[load_message GITGUI_MSG]} {
|
} elseif {[load_message GITGUI_MSG]} {
|
||||||
|
} elseif {[run_prepare_commit_msg_hook]} {
|
||||||
} elseif {[load_message MERGE_MSG]} {
|
} elseif {[load_message MERGE_MSG]} {
|
||||||
} elseif {[load_message SQUASH_MSG]} {
|
} elseif {[load_message SQUASH_MSG]} {
|
||||||
}
|
}
|
||||||
@ -1269,6 +1270,70 @@ proc load_message {file} {
|
|||||||
return 0
|
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} {
|
proc read_diff_index {fd after} {
|
||||||
global buf_rdi
|
global buf_rdi
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user