gitk: Make cherry-pick call git-citool on conflicts
Now that git-gui has facilities to help users resolve conflicts, it makes sense to launch it from other GUI tools when they happen. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
84a76f18f0
commit
15e350552d
40
gitk
40
gitk
@ -8088,6 +8088,32 @@ proc mkbrgo {top} {
|
||||
}
|
||||
}
|
||||
|
||||
proc exec_citool {tool_args {baseid {}}} {
|
||||
global commitinfo env
|
||||
|
||||
set save_env [array get env GIT_AUTHOR_*]
|
||||
|
||||
if {$baseid ne {}} {
|
||||
if {![info exists commitinfo($baseid)]} {
|
||||
getcommit $baseid
|
||||
}
|
||||
set author [lindex $commitinfo($baseid) 1]
|
||||
set date [lindex $commitinfo($baseid) 2]
|
||||
if {[regexp {^\s*(\S.*\S|\S)\s*<(.*)>\s*$} \
|
||||
$author author name email]
|
||||
&& $date ne {}} {
|
||||
set env(GIT_AUTHOR_NAME) $name
|
||||
set env(GIT_AUTHOR_EMAIL) $email
|
||||
set env(GIT_AUTHOR_DATE) $date
|
||||
}
|
||||
}
|
||||
|
||||
eval exec git citool $tool_args &
|
||||
|
||||
array unset env GIT_AUTHOR_*
|
||||
array set env $save_env
|
||||
}
|
||||
|
||||
proc cherrypick {} {
|
||||
global rowmenuid curview
|
||||
global mainhead mainheadid
|
||||
@ -8106,7 +8132,19 @@ proc cherrypick {} {
|
||||
# no error occurs, and exec takes that as an indication of error...
|
||||
if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} {
|
||||
notbusy cherrypick
|
||||
error_popup $err
|
||||
if {[regexp -line \
|
||||
{Entry '(.*)' would be overwritten by merge} $err msg fname]} {
|
||||
error_popup [mc "Cherry-pick failed:
|
||||
file '%s' had local modifications.
|
||||
|
||||
Please commit, reset or stash your changes." $fname]
|
||||
} elseif {[regexp -line {^CONFLICT \(.*\):} $err msg]} {
|
||||
# Force citool to read MERGE_MSG
|
||||
file delete [file join [gitdir] "GITGUI_MSG"]
|
||||
exec_citool {} $rowmenuid
|
||||
} else {
|
||||
error_popup $err
|
||||
}
|
||||
return
|
||||
}
|
||||
set newhead [exec git rev-parse HEAD]
|
||||
|
Loading…
Reference in New Issue
Block a user