From: Alexander Gavrilov Date: Sun, 2 Nov 2008 18:59:47 +0000 (+0300) Subject: gitk: Make cherry-pick call git-citool on conflicts X-Git-Tag: v1.6.1-rc1~2^2~11 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=15e350552db1c0e8ede0af4f1f07dbbc9090e420;p=git.git 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 Signed-off-by: Paul Mackerras --- diff --git a/gitk b/gitk index 41d3d2d98..4168648b5 100755 --- a/gitk +++ b/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]