author | Yuya Nishihara <yuya@tcha.org> |
Fri, 07 Aug 2015 21:39:38 +0900 | |
changeset 25927 | 44da63623fca |
parent 20831 | 864c56cb8945 |
child 26421 | 4b0fc75f9403 |
permissions | -rwxr-xr-x |
20831
864c56cb8945
contrib: don't hardcode path to bash interpreter
Olle Lundberg <geek@nerd.sh>
parents:
20010
diff
changeset
|
1 |
#!/usr/bin/env bash |
20010
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 |