contrib/editmerge
author Ryan McElroy <rmcelroy@fb.com>
Sat, 17 Oct 2015 15:48:14 -0700
changeset 26771 a723f900d212
parent 26743 58b04a538caa
child 26804 612502900a2d
permissions -rwxr-xr-x
editmerge: properly quote variables Previously, files with spaces would break editmerge.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    13
FILE="$1"
20010
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() {
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    16
  grep -n "^<<<<<<" "$FILE" | cut -f1 -d:
20010
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
26421
4b0fc75f9403 urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents: 20831
diff changeset
    19
# editor preference loosely based on https://mercurial-scm.org/wiki/editor
20010
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)
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    21
ED="$HGEDITOR"
20010
34d720b3b33e contrib: add editmerge script for editor conflict prompts
Durham Goode <durham@fb.com>
parents:
diff changeset
    22
if [ "$ED" = "" ] ; then
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    23
  ED="$VISUAL"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    26
  ED="$EDITOR"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    29
  ED="$(hg showconfig ui.editor)"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    37
  FIRSTLINE="$(getlines | head -n 1)"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    43
    "$ED" "+$FIRSTLINE" "$FILE"
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    44
    PREVIOUSLINE="$FIRSTLINE"
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    45
    FIRSTLINE="$(getlines | head -n 1)"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    48
  $ED "$FILE"
20010
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
26771
a723f900d212 editmerge: properly quote variables
Ryan McElroy <rmcelroy@fb.com>
parents: 26743
diff changeset
    52
CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')"
20010
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