gitk: Improve cherry-pick error handling

This adds to the regexps that are used to work out what sort of error
we encountered in trying to do a cherry-pick so that it recognizes
some additional common error messages.  It adds a confirmation dialog
when the error is a merge conflict so the user can choose whether or
not to run git citool.  Finally, it arranges to update the display
after a cherry-pick failed so that any local changes made by the
cherry-pick become visible.

Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Paul Mackerras 2008-11-08 21:37:09 +11:00
parent 15e350552d
commit 887a791f11

19
gitk
View File

@ -8133,18 +8133,25 @@ proc cherrypick {} {
if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} { if {[catch {exec sh -c "git cherry-pick -r $rowmenuid 2>&1"} err]} {
notbusy cherrypick notbusy cherrypick
if {[regexp -line \ if {[regexp -line \
{Entry '(.*)' would be overwritten by merge} $err msg fname]} { {Entry '(.*)' (would be overwritten by merge|not uptodate)} \
error_popup [mc "Cherry-pick failed: $err msg fname]} {
file '%s' had local modifications. error_popup [mc "Cherry-pick failed because of local changes\
to file '%s'.\nPlease commit, reset or stash\
Please commit, reset or stash your changes." $fname] your changes and try again." $fname]
} elseif {[regexp -line {^CONFLICT \(.*\):} $err msg]} { } elseif {[regexp -line \
{^(CONFLICT \(.*\):|Automatic cherry-pick failed)} \
$err]} {
if {[confirm_popup [mc "Cherry-pick failed because of merge\
conflict.\nDo you wish to run git citool to\
resolve it?"]]} {
# Force citool to read MERGE_MSG # Force citool to read MERGE_MSG
file delete [file join [gitdir] "GITGUI_MSG"] file delete [file join [gitdir] "GITGUI_MSG"]
exec_citool {} $rowmenuid exec_citool {} $rowmenuid
}
} else { } else {
error_popup $err error_popup $err
} }
run updatecommits
return return
} }
set newhead [exec git rev-parse HEAD] set newhead [exec git rev-parse HEAD]