##// END OF EJS Templates
contrib: add editmerge script for editor conflict prompts...
Durham Goode -
r20010:34d720b3 default
parent child Browse files
Show More
@@ -0,0 +1,58 b''
1 #!/bin/bash
2 # A simple script for opening merge conflicts in the editor.
3 # Use the following Mercurial settings to enable it.
4 #
5 # [ui]
6 # merge = editmerge
7 #
8 # [merge-tools]
9 # editmerge.args=$output
10 # editmerge.check=changed
11 # editmerge.premerge=keep
12
13 FILE=$1
14
15 getlines() {
16 grep -n "<<<<<<" $FILE | cut -f1 -d:
17 }
18
19 # editor preference loosely based on http://mercurial.selenic.com/wiki/editor
20 # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
21 ED=$HGEDITOR
22 if [ "$ED" = "" ] ; then
23 ED=$VISUAL
24 fi
25 if [ "$ED" = "" ] ; then
26 ED=$EDITOR
27 fi
28 if [ "$ED" = "" ] ; then
29 ED=$(hg showconfig ui.editor)
30 fi
31 if [ "$ED" = "" ] ; then
32 echo "merge failed - unable to find editor"
33 exit 1
34 fi
35
36 if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
37 FIRSTLINE=$(getlines | head -n 1)
38 PREVIOUSLINE=""
39
40 # open the editor to the first conflict until there are no more
41 # or the user stops editing the file
42 while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do
43 $ED +$FIRSTLINE $FILE
44 PREVIOUSLINE=$FIRSTLINE
45 FIRSTLINE=$(getlines | head -n 1)
46 done
47 else
48 $ED $FILE
49 fi
50
51 # get the line numbers of the remaining conflicts
52 CONFLICTS=$(getlines | sed ':a;N;$!ba;s/\n/, /g')
53 if [ ! "$CONFLICTS" = "" ] ; then
54 echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'"
55 exit 1
56 fi
57
58 exit 0
General Comments 0
You need to be logged in to leave comments. Login now