annotate contrib/editmerge @ 30007:aca0954d3739

rebase: rebase changesets in topo order (issue5370) (BC) There are two reasons that rebase should be done this way: 1. This would make rebasing faster because it would minimize the total number of files to be checked out in the process, as it don't need to switch back and forth between branches. 2. It makes resolving conflicts easier as user has a better context. This commit changes the behavior in "Test multiple root handling" of test-rebase-obsolete.t. It is an expected change which reflects the new behavior that commits in a branch are grouped together when rebased.
author Xidorn Quan <me@upsuper.org>
date Sat, 17 Sep 2016 17:02:56 +1000
parents 612502900a2d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
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