annotate contrib/editmerge @ 20010:34d720b3b33e

contrib: add editmerge script for editor conflict prompts Adds a script that opens the editor to the conflict as part of the merge process. This way you can fix the merge during the rebase instead of having to pause the rebase, resolve --mark, rebase --continue. Only works on unix.
author Durham Goode <durham@fb.com>
date Fri, 15 Nov 2013 13:20:49 -0800
parents
children 864c56cb8945
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20010
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
1 #!/bin/bash
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
2 # A simple script for opening merge conflicts in the editor.
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
3 # Use the following Mercurial settings to enable it.
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
4 #
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
5 # [ui]
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
6 # merge = editmerge
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
7 #
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
8 # [merge-tools]
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
9 # editmerge.args=$output
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
10 # editmerge.check=changed
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
11 # editmerge.premerge=keep
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
12
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
13 FILE=$1
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
14
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
15 getlines() {
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
16 grep -n "<<<<<<" $FILE | cut -f1 -d:
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
17 }
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
18
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
19 # editor preference loosely based on http://mercurial.selenic.com/wiki/editor
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
20 # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
21 ED=$HGEDITOR
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
22 if [ "$ED" = "" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
23 ED=$VISUAL
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
24 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
25 if [ "$ED" = "" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
26 ED=$EDITOR
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
27 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
28 if [ "$ED" = "" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
29 ED=$(hg showconfig ui.editor)
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
30 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
31 if [ "$ED" = "" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
32 echo "merge failed - unable to find editor"
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
33 exit 1
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
34 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
35
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
36 if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
37 FIRSTLINE=$(getlines | head -n 1)
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
38 PREVIOUSLINE=""
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
39
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
40 # open the editor to the first conflict until there are no more
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
41 # or the user stops editing the file
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
42 while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
43 $ED +$FIRSTLINE $FILE
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
44 PREVIOUSLINE=$FIRSTLINE
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
45 FIRSTLINE=$(getlines | head -n 1)
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
46 done
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
47 else
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
48 $ED $FILE
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
49 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
50
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
51 # get the line numbers of the remaining conflicts
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
52 CONFLICTS=$(getlines | sed ':a;N;$!ba;s/\n/, /g')
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
53 if [ ! "$CONFLICTS" = "" ] ; then
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
54 echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'"
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
55 exit 1
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
56 fi
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
57
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
58 exit 0