contrib/editmerge
author Gregory Szorc <gregory.szorc@gmail.com>
Mon, 13 Nov 2017 19:20:34 -0800
changeset 35109 e96613048bdd
parent 26804 612502900a2d
permissions -rwxr-xr-x
perf: add command to benchmark bundle reading Upcoming commits will be refactoring bundle2 I/O code. This commit establishes a `hg perfbundleread` command that measures how long it takes to read a bundle using various mechanisms. As a baseline, here's output from an uncompressed bundle1 bundle of my Firefox repo (7,098,622,890 bytes): ! read(8k) ! wall 0.763481 comb 0.760000 user 0.160000 sys 0.600000 (best of 6) ! read(16k) ! wall 0.644512 comb 0.640000 user 0.110000 sys 0.530000 (best of 16) ! read(32k) ! wall 0.581172 comb 0.590000 user 0.060000 sys 0.530000 (best of 18) ! read(128k) ! wall 0.535183 comb 0.530000 user 0.010000 sys 0.520000 (best of 19) ! cg1 deltaiter() ! wall 0.873500 comb 0.880000 user 0.840000 sys 0.040000 (best of 12) ! cg1 getchunks() ! wall 6.283797 comb 6.270000 user 5.570000 sys 0.700000 (best of 3) ! cg1 read(8k) ! wall 1.097173 comb 1.100000 user 0.400000 sys 0.700000 (best of 10) ! cg1 read(16k) ! wall 0.810750 comb 0.800000 user 0.200000 sys 0.600000 (best of 13) ! cg1 read(32k) ! wall 0.671215 comb 0.670000 user 0.110000 sys 0.560000 (best of 15) ! cg1 read(128k) ! wall 0.597857 comb 0.600000 user 0.020000 sys 0.580000 (best of 15) And from an uncompressed bundle2 bundle (6,070,036,163 bytes): ! read(8k) ! wall 0.676997 comb 0.680000 user 0.160000 sys 0.520000 (best of 15) ! read(16k) ! wall 0.592706 comb 0.590000 user 0.080000 sys 0.510000 (best of 17) ! read(32k) ! wall 0.529395 comb 0.530000 user 0.050000 sys 0.480000 (best of 16) ! read(128k) ! wall 0.491270 comb 0.490000 user 0.010000 sys 0.480000 (best of 19) ! bundle2 forwardchunks() ! wall 2.997131 comb 2.990000 user 2.270000 sys 0.720000 (best of 4) ! bundle2 iterparts() ! wall 12.247197 comb 10.670000 user 8.170000 sys 2.500000 (best of 3) ! bundle2 part seek() ! wall 11.761675 comb 10.500000 user 8.240000 sys 2.260000 (best of 3) ! bundle2 part read(8k) ! wall 9.116163 comb 9.110000 user 8.240000 sys 0.870000 (best of 3) ! bundle2 part read(16k) ! wall 8.984362 comb 8.970000 user 8.110000 sys 0.860000 (best of 3) ! bundle2 part read(32k) ! wall 8.758364 comb 8.740000 user 7.860000 sys 0.880000 (best of 3) ! bundle2 part read(128k) ! wall 8.749040 comb 8.730000 user 7.830000 sys 0.900000 (best of 3) We already see some interesting data. Notably that bundle2 has significant overhead compared to bundle1. This matters for e.g. stream clone bundles, which can be applied at >1Gbps. Differential Revision: https://phab.mercurial-scm.org/D1385
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