contrib/editmerge
author Augie Fackler <augie@google.com>
Wed, 12 Apr 2017 11:23:55 -0700
branchstable
changeset 32050 77eaf9539499
parent 26804 612502900a2d
permissions -rwxr-xr-x
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.
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
26804
612502900a2d editmerge: dequote other use of $ED
Ryan McElroy <rmcelroy@fb.com>
parents: 26771
diff changeset
    43
    $ED "+$FIRSTLINE" "$FILE"
26771
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