topic: use ui.configoverride() instead of ui.backupconfig()
ui.configoverride() was added in hg 4.1. util.nullcontextmanager() was
added in hg 4.4.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: Mercurial graph Pages: 1 -->
<svg width="427pt" height="188pt"
viewBox="0.00 0.00 427.00 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
<title>Mercurial graph</title>
<!-- 0 -->
<g id="node1" class="node">
<title>0</title>
<polygon fill="none" stroke="#000000" stroke-width="4" points="72,-180 0,-180 0,-144 72,-144 72,-180"/>
<text text-anchor="middle" x="36" y="-158.3" font-family="mono" font-size="14.00" fill="#000000">0:0dc9</text>
</g>
<!-- 1 -->
<g id="node2" class="node">
<title>1</title>
<polygon fill="none" stroke="#000000" stroke-width="2" points="216,-180 144,-180 144,-144 216,-144 216,-180"/>
<text text-anchor="middle" x="180" y="-158.3" font-family="mono" font-size="14.00" fill="#000000">1:f649</text>
</g>
<!-- 0->1 -->
<g id="edge1" class="edge">
<title>0->1</title>
<path fill="none" stroke="#000000" stroke-width="2" d="M72.3373,-162C90.9973,-162 113.9327,-162 133.8329,-162"/>
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="133.9241,-165.5001 143.924,-162 133.924,-158.5001 133.9241,-165.5001"/>
</g>
<!-- 2 -->
<g id="node3" class="node">
<title>2</title>
<polygon fill="none" stroke="#000000" stroke-width="2" points="216,-36 144,-36 144,0 216,0 216,-36"/>
<text text-anchor="middle" x="180" y="-14.3" font-family="mono" font-size="14.00" fill="#000000">2:522d</text>
</g>
<!-- 0->2 -->
<g id="edge2" class="edge">
<title>0->2</title>
<path fill="none" stroke="#000000" stroke-width="2" d="M54.2377,-143.7623C79.6646,-118.3354 125.8747,-72.1253 154.6431,-43.3569"/>
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="157.3142,-45.6356 161.9104,-36.0896 152.3644,-40.6858 157.3142,-45.6356"/>
</g>
<!-- 1->2 -->
<g id="edge3" class="edge">
<title>1->2</title>
<path fill="none" stroke="#000000" stroke-width="2" stroke-dasharray="5,2" d="M180,-135.7351C180,-106.8541 180,-61.2198 180,-36.0896"/>
<ellipse fill="#000000" stroke="#000000" stroke-width="2" cx="180" cy="-139.7623" rx="4" ry="4"/>
</g>
<!-- T1 -->
<g id="node4" class="node">
<title>T1</title>
<text text-anchor="start" x="237" y="-93.8" font-family="mono" font-style="italic" font-size="14.00" fill="#000000">obsolete (and hidden)</text>
<text text-anchor="start" x="266" y="-79.8" font-family="mono" font-style="italic" font-size="14.00" fill="#000000">after the push</text>
</g>
<!-- T1->1 -->
<g id="edge4" class="edge">
<title>T1->1</title>
<path fill="none" stroke="#c0c0c0" stroke-width="2" d="M287.6627,-108.1686C268.6604,-117.6698 245.2242,-129.3879 225.0748,-139.4626"/>
<polygon fill="#c0c0c0" stroke="#c0c0c0" stroke-width="2" points="223.455,-136.3593 216.076,-143.962 226.5855,-142.6203 223.455,-136.3593"/>
</g>
</g>
</svg>