Mercurial > hg
annotate contrib/editmerge @ 26345:2aa0dde846b4
mq: remove a mutable default argument
Mutable default arguments are know to the state of California to cause bugs. The
underlying function already handle "None" as an option value, so we do not need
to do anything else.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 24 Sep 2015 00:50:06 -0700 |
parents | 864c56cb8945 |
children | 4b0fc75f9403 |
rev | line source |
---|---|
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 |