Mercurial > hg
view contrib/editmerge @ 26615:c9223a3979b7
merge.mergestate: add a wrapper around resolve
The resolve function will be broken up into separate pre-resolve and resolve
steps.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Sun, 11 Oct 2015 18:29:50 -0700 |
parents | 4b0fc75f9403 |
children | 58b04a538caa |
line wrap: on
line source
#!/usr/bin/env bash # A simple script for opening merge conflicts in the editor. # Use the following Mercurial settings to enable it. # # [ui] # merge = editmerge # # [merge-tools] # editmerge.args=$output # editmerge.check=changed # editmerge.premerge=keep FILE=$1 getlines() { grep -n "<<<<<<" $FILE | cut -f1 -d: } # editor preference loosely based on https://mercurial-scm.org/wiki/editor # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds) ED=$HGEDITOR if [ "$ED" = "" ] ; then ED=$VISUAL fi if [ "$ED" = "" ] ; then ED=$EDITOR fi if [ "$ED" = "" ] ; then ED=$(hg showconfig ui.editor) fi if [ "$ED" = "" ] ; then echo "merge failed - unable to find editor" exit 1 fi if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then FIRSTLINE=$(getlines | head -n 1) PREVIOUSLINE="" # open the editor to the first conflict until there are no more # or the user stops editing the file while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do $ED +$FIRSTLINE $FILE PREVIOUSLINE=$FIRSTLINE FIRSTLINE=$(getlines | head -n 1) done else $ED $FILE fi # get the line numbers of the remaining conflicts CONFLICTS=$(getlines | sed ':a;N;$!ba;s/\n/, /g') if [ ! "$CONFLICTS" = "" ] ; then echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'" exit 1 fi exit 0