Mercurial > hg
view tests/test-bad-extension.t @ 45448:85b03b1e4715
graphlog: use '%' only if there are *unresolved* conflicts
In 14d0e89520a2, I made graphlog use '%' for the "other" context when
there's an existing merge state. However, that has confused many
people because it shows up even if all conflicts are already resolved,
which makes it show up even after e.g. `hg update -m` with
automatically resolved conflicts. This patch makes it so we show the
'%' only if there still unresolved conflicts.
This patch replaces my earlier attempt in D8930, where I decided to
automatically clear the mergestate if there are no remaining
conflicts. That had the problem that it wouldn't let the user
re-resolve the conflicts using `hg resolve`.
Note that an in-progress "proper" merge (one that will result in a
commit with two parents, such as after `hg merge`) will already have
two dirstate parents before the commit happens. That means that both
sides of the merge will get drawn as '@' in the graph, since "is
dirstate parent" takes precedence over "is involved in merge
conflict".
Differential Revision: https://phab.mercurial-scm.org/D9007
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 10 Sep 2020 13:12:34 -0700 |
parents | 8cab8db59b6c |
children | fcd464e6a482 |
line wrap: on
line source
#require no-chg $ filterlog () { > sed -e 's!^[0-9/]* [0-9:]* ([0-9]*)>!YYYY/MM/DD HH:MM:SS (PID)>!' > } ensure that failing ui.atexit handlers report sensibly $ cat > $TESTTMP/bailatexit.py <<EOF > from mercurial import util > def bail(): > raise RuntimeError('ui.atexit handler exception') > > def extsetup(ui): > ui.atexit(bail) > EOF $ hg -q --config extensions.bailatexit=$TESTTMP/bailatexit.py \ > help help hg help [-eck] [-s PLATFORM] [TOPIC] show help for a given topic or a help overview error in exit handlers: Traceback (most recent call last): File "*/mercurial/dispatch.py", line *, in _runexithandlers (glob) func(*args, **kwargs) File "$TESTTMP/bailatexit.py", line *, in bail (glob) raise RuntimeError('ui.atexit handler exception') RuntimeError: ui.atexit handler exception [255] $ rm $TESTTMP/bailatexit.py another bad extension $ echo 'raise Exception("bit bucket overflow")' > badext.py $ abspathexc=`pwd`/badext.py $ cat >baddocext.py <<EOF > """ > baddocext is bad > """ > EOF $ abspathdoc=`pwd`/baddocext.py $ cat <<EOF >> $HGRCPATH > [extensions] > gpg = > hgext.gpg = > badext = $abspathexc > baddocext = $abspathdoc > badext2 = > EOF $ hg -q help help 2>&1 |grep extension *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow *** failed to import extension badext2: No module named *badext2* (glob) show traceback $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError|ModuleNotFound' *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow Traceback (most recent call last): Exception: bit bucket overflow *** failed to import extension badext2: No module named *badext2* (glob) Traceback (most recent call last): ImportError: No module named badext2 (no-py3 !) ImportError: No module named 'hgext.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext.badext2' (py36 !) Traceback (most recent call last): (py3 !) ImportError: No module named 'hgext3rd.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext3rd.badext2' (py36 !) Traceback (most recent call last): (py3 !) ImportError: No module named 'badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'badext2' (py36 !) names of extensions failed to load can be accessed via extensions.notloaded() $ cat <<EOF > showbadexts.py > from mercurial import commands, extensions, registrar > cmdtable = {} > command = registrar.command(cmdtable) > @command(b'showbadexts', norepo=True) > def showbadexts(ui, *pats, **opts): > ui.write(b'BADEXTS: %s\n' % b' '.join(sorted(extensions.notloaded()))) > EOF $ hg --config extensions.badexts=showbadexts.py showbadexts 2>&1 | grep '^BADEXTS' BADEXTS: badext badext2 #if no-extraextensions show traceback for ImportError of hgext.name if devel.debug.extensions is set $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \ > | grep -v '^ ' \ > | filterlog \ > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound' YYYY/MM/DD HH:MM:SS (PID)> loading extensions YYYY/MM/DD HH:MM:SS (PID)> - processing 5 entries YYYY/MM/DD HH:MM:SS (PID)> - loading extension: gpg YYYY/MM/DD HH:MM:SS (PID)> > gpg extension loaded in * (glob) YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: gpg YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: gpg YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob) YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow Traceback (most recent call last): Exception: bit bucket overflow YYYY/MM/DD HH:MM:SS (PID)> - loading extension: baddocext YYYY/MM/DD HH:MM:SS (PID)> > baddocext extension loaded in * (glob) YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: baddocext YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: baddocext YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob) YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext2 YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext.badext2 (No module named *badext2*): trying hgext3rd.badext2 (glob) Traceback (most recent call last): ImportError: No module named badext2 (no-py3 !) ImportError: No module named 'hgext.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext.badext2' (py36 !) YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext3rd.badext2 (No module named *badext2*): trying badext2 (glob) Traceback (most recent call last): ImportError: No module named badext2 (no-py3 !) ImportError: No module named 'hgext.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext.badext2' (py36 !) Traceback (most recent call last): (py3 !) ImportError: No module named 'hgext3rd.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext3rd.badext2' (py36 !) *** failed to import extension badext2: No module named *badext2* (glob) Traceback (most recent call last): ImportError: No module named 'hgext.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext.badext2' (py36 !) Traceback (most recent call last): (py3 !) ImportError: No module named 'hgext3rd.badext2' (py3 no-py36 !) ModuleNotFoundError: No module named 'hgext3rd.badext2' (py36 !) Traceback (most recent call last): (py3 !) ModuleNotFoundError: No module named 'badext2' (py36 !) ImportError: No module named 'badext2' (py3 no-py36 !) ImportError: No module named badext2 (no-py3 !) YYYY/MM/DD HH:MM:SS (PID)> > loaded 2 extensions, total time * (glob) YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for gpg YYYY/MM/DD HH:MM:SS (PID)> > uisetup for gpg took * (glob) YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for baddocext YYYY/MM/DD HH:MM:SS (PID)> > uisetup for baddocext took * (glob) YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob) YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for gpg YYYY/MM/DD HH:MM:SS (PID)> > extsetup for gpg took * (glob) YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for baddocext YYYY/MM/DD HH:MM:SS (PID)> > extsetup for baddocext took * (glob) YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob) YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob) YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob) YYYY/MM/DD HH:MM:SS (PID)> > extension baddocext take a total of * to load (glob) YYYY/MM/DD HH:MM:SS (PID)> > extension gpg take a total of * to load (glob) YYYY/MM/DD HH:MM:SS (PID)> extension loading complete #endif confirm that there's no crash when an extension's documentation is bad $ hg help --keyword baddocext *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow *** failed to import extension badext2: No module named *badext2* (glob) Topics: extensions Using Additional Features