2020-01-31 05:40:49 +03:00
|
|
|
#require py2
|
2015-01-16 13:51:10 +03:00
|
|
|
|
2020-01-20 13:42:49 +03:00
|
|
|
$ newext buggylocking <<EOF
|
2015-12-06 10:06:03 +03:00
|
|
|
> """A small extension that tests our developer warnings
|
2015-01-16 13:51:10 +03:00
|
|
|
> """
|
|
|
|
>
|
2019-01-30 03:25:33 +03:00
|
|
|
> from edenscm.mercurial import error, registrar, repair, util
|
2015-01-16 13:51:10 +03:00
|
|
|
>
|
|
|
|
> cmdtable = {}
|
2016-01-09 17:07:20 +03:00
|
|
|
> command = registrar.command(cmdtable)
|
2015-01-16 13:51:10 +03:00
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('buggylocking', [], '')
|
2015-01-16 13:51:10 +03:00
|
|
|
> def buggylocking(ui, repo):
|
|
|
|
> lo = repo.lock()
|
|
|
|
> wl = repo.wlock()
|
2015-03-19 23:21:08 +03:00
|
|
|
> wl.release()
|
|
|
|
> lo.release()
|
2015-04-12 17:01:48 +03:00
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('buggytransaction', [], '')
|
2016-05-05 17:13:22 +03:00
|
|
|
> def buggylocking(ui, repo):
|
|
|
|
> tr = repo.transaction('buggy')
|
|
|
|
> # make sure we rollback the transaction as we don't want to rely on the__del__
|
|
|
|
> tr.release()
|
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('properlocking', [], '')
|
2015-04-12 17:01:48 +03:00
|
|
|
> def properlocking(ui, repo):
|
|
|
|
> """check that reentrance is fine"""
|
|
|
|
> wl = repo.wlock()
|
|
|
|
> lo = repo.lock()
|
|
|
|
> tr = repo.transaction('proper')
|
|
|
|
> tr2 = repo.transaction('proper')
|
|
|
|
> lo2 = repo.lock()
|
|
|
|
> wl2 = repo.wlock()
|
|
|
|
> wl2.release()
|
|
|
|
> lo2.release()
|
|
|
|
> tr2.close()
|
|
|
|
> tr.close()
|
|
|
|
> lo.release()
|
|
|
|
> wl.release()
|
2015-04-12 22:37:59 +03:00
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('nowaitlocking', [], '')
|
2015-04-12 22:37:59 +03:00
|
|
|
> def nowaitlocking(ui, repo):
|
|
|
|
> lo = repo.lock()
|
|
|
|
> wl = repo.wlock(wait=False)
|
|
|
|
> wl.release()
|
|
|
|
> lo.release()
|
2015-05-24 07:18:47 +03:00
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('no-wlock-write', [], '')
|
2017-07-11 13:38:17 +03:00
|
|
|
> def nowlockwrite(ui, repo):
|
|
|
|
> with repo.vfs(b'branch', 'a'):
|
|
|
|
> pass
|
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('no-lock-write', [], '')
|
2016-08-08 19:14:42 +03:00
|
|
|
> def nolockwrite(ui, repo):
|
|
|
|
> with repo.svfs(b'fncache', 'a'):
|
|
|
|
> pass
|
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('stripintr', [], '')
|
2015-05-24 07:18:47 +03:00
|
|
|
> def stripintr(ui, repo):
|
|
|
|
> lo = repo.lock()
|
|
|
|
> tr = repo.transaction('foobar')
|
|
|
|
> try:
|
|
|
|
> repair.strip(repo.ui, repo, [repo['.'].node()])
|
|
|
|
> finally:
|
|
|
|
> lo.release()
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('oldanddeprecated', [], '')
|
2015-12-06 10:05:49 +03:00
|
|
|
> def oldanddeprecated(ui, repo):
|
|
|
|
> """test deprecation warning API"""
|
|
|
|
> def foobar(ui):
|
|
|
|
> ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337')
|
|
|
|
> foobar(ui)
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('nouiwarning', [], '')
|
2017-04-04 12:03:29 +03:00
|
|
|
> def nouiwarning(ui, repo):
|
|
|
|
> util.nouideprecwarn('this is a test', '13.37')
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('programmingerror', [], '')
|
2017-05-14 09:41:27 +03:00
|
|
|
> def programmingerror(ui, repo):
|
|
|
|
> raise error.ProgrammingError('something went wrong', hint='try again')
|
2015-01-16 13:51:10 +03:00
|
|
|
> EOF
|
|
|
|
|
2020-01-20 13:42:49 +03:00
|
|
|
$ setconfig devel.all-warnings=1
|
2015-01-16 13:51:10 +03:00
|
|
|
|
|
|
|
$ hg init lock-checker
|
|
|
|
$ cd lock-checker
|
2018-07-18 02:03:54 +03:00
|
|
|
#if no-fsmonitor
|
2015-01-16 13:51:10 +03:00
|
|
|
$ hg buggylocking
|
2016-02-03 21:59:35 +03:00
|
|
|
devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
|
2015-01-16 13:51:10 +03:00
|
|
|
$ cat << EOF >> $HGRCPATH
|
|
|
|
> [devel]
|
|
|
|
> all=0
|
|
|
|
> check-locks=1
|
|
|
|
> EOF
|
|
|
|
$ hg buggylocking
|
2016-02-03 21:59:35 +03:00
|
|
|
devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
|
2018-02-02 23:17:48 +03:00
|
|
|
$ hg buggylocking --traceback 2>&1 | egrep '(devel-warn|buggylocking)'
|
2017-10-04 20:42:55 +03:00
|
|
|
devel-warn: "wlock" acquired after "lock" at:
|
|
|
|
$TESTTMP/buggylocking.py:* in buggylocking (glob)
|
2018-07-18 02:03:54 +03:00
|
|
|
#endif
|
2015-04-12 17:01:48 +03:00
|
|
|
$ hg properlocking
|
2015-04-12 22:37:59 +03:00
|
|
|
$ hg nowaitlocking
|
2015-05-24 07:18:47 +03:00
|
|
|
|
2018-09-28 17:09:11 +03:00
|
|
|
Writing without lock (also uses bare repo.vfs)
|
2017-07-11 13:38:17 +03:00
|
|
|
|
|
|
|
$ hg no-wlock-write
|
2018-09-28 17:09:11 +03:00
|
|
|
devel-warn: use of bare vfs instead of localvfs or sharedvfs at: $TESTTMP/buggylocking.py:* (nowlockwrite) (glob)
|
2017-07-11 13:38:17 +03:00
|
|
|
devel-warn: write with no wlock: "branch" at: $TESTTMP/buggylocking.py:* (nowlockwrite) (glob)
|
|
|
|
|
2016-08-08 19:14:42 +03:00
|
|
|
$ hg no-lock-write
|
|
|
|
devel-warn: write with no lock: "fncache" at: $TESTTMP/buggylocking.py:* (nolockwrite) (glob)
|
|
|
|
|
2017-07-02 02:37:03 +03:00
|
|
|
Stripping from a transaction
|
|
|
|
|
2015-05-24 07:18:47 +03:00
|
|
|
$ echo a > a
|
|
|
|
$ hg add a
|
|
|
|
$ hg commit -m a
|
2017-03-27 02:53:28 +03:00
|
|
|
$ hg stripintr 2>&1 | egrep -v '^(\*\*| )'
|
|
|
|
Traceback (most recent call last):
|
2017-07-27 11:52:56 +03:00
|
|
|
*ProgrammingError: cannot strip from inside a transaction (glob)
|
2015-05-24 07:18:47 +03:00
|
|
|
|
2015-12-06 10:05:49 +03:00
|
|
|
$ hg oldanddeprecated
|
|
|
|
devel-warn: foorbar is deprecated, go shopping
|
2016-02-03 21:59:35 +03:00
|
|
|
(compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
|
2015-06-19 21:17:11 +03:00
|
|
|
|
2018-02-02 23:17:48 +03:00
|
|
|
$ hg oldanddeprecated --traceback 2>&1 | egrep '(buggylocking|devel-warn)'
|
2015-12-06 10:05:49 +03:00
|
|
|
devel-warn: foorbar is deprecated, go shopping
|
2017-10-04 20:42:55 +03:00
|
|
|
$TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
|
|
|
|
|
2019-07-06 12:41:45 +03:00
|
|
|
#if no-chg normal-layout no-fsmonitor
|
2019-06-26 20:59:13 +03:00
|
|
|
$ hg blackbox --no-timestamp --no-sid --pattern '{"legacy_log":{"service":"develwarn"}}' | grep develwarn
|
|
|
|
[legacy][develwarn] devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:12 (buggylocking)
|
|
|
|
[legacy][develwarn] devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:12 (buggylocking)
|
|
|
|
[legacy][develwarn] devel-warn: "wlock" acquired after "lock" at:
|
|
|
|
[legacy][develwarn] devel-warn: use of bare vfs instead of localvfs or sharedvfs at: $TESTTMP/buggylocking.py:47 (nowlockwrite)
|
|
|
|
[legacy][develwarn] devel-warn: write with no wlock: "branch" at: $TESTTMP/buggylocking.py:47 (nowlockwrite)
|
|
|
|
[legacy][develwarn] devel-warn: write with no lock: "fncache" at: $TESTTMP/buggylocking.py:52 (nolockwrite)
|
|
|
|
[legacy][develwarn] devel-warn: foorbar is deprecated, go shopping
|
|
|
|
[legacy][develwarn] devel-warn: foorbar is deprecated, go shopping
|
2017-10-04 20:42:55 +03:00
|
|
|
#endif
|
2016-05-05 17:13:22 +03:00
|
|
|
|
|
|
|
Test programming error failure:
|
|
|
|
|
2016-05-05 17:20:53 +03:00
|
|
|
$ hg buggytransaction 2>&1 | egrep -v '^ '
|
2019-04-05 09:34:14 +03:00
|
|
|
** * has crashed: (glob)
|
2017-05-14 09:41:27 +03:00
|
|
|
** ProgrammingError: transaction requires locking
|
2016-05-05 17:20:53 +03:00
|
|
|
Traceback (most recent call last):
|
2017-07-27 11:52:56 +03:00
|
|
|
*ProgrammingError: transaction requires locking (glob)
|
2016-05-05 17:13:22 +03:00
|
|
|
|
2017-05-14 09:41:27 +03:00
|
|
|
$ hg programmingerror 2>&1 | egrep -v '^ '
|
2019-04-05 09:34:14 +03:00
|
|
|
** * has crashed: (glob)
|
2017-05-14 09:41:27 +03:00
|
|
|
** ProgrammingError: something went wrong
|
|
|
|
** (try again)
|
|
|
|
Traceback (most recent call last):
|
2017-07-27 11:52:56 +03:00
|
|
|
*ProgrammingError: something went wrong (glob)
|
2017-05-14 09:41:27 +03:00
|
|
|
|
2017-04-04 12:03:29 +03:00
|
|
|
Old style deprecation warning
|
|
|
|
|
|
|
|
$ hg nouiwarning
|
2017-07-02 02:38:08 +03:00
|
|
|
$TESTTMP/buggylocking.py:*: DeprecationWarning: this is a test (glob)
|
2017-04-04 12:03:29 +03:00
|
|
|
(compatibility will be dropped after Mercurial-13.37, update your code.)
|
|
|
|
util.nouideprecwarn('this is a test', '13.37')
|
|
|
|
|
|
|
|
(disabled outside of test run)
|
|
|
|
|
|
|
|
$ HGEMITWARNINGS= hg nouiwarning
|
|
|
|
|
2017-06-17 14:08:03 +03:00
|
|
|
Test warning on config option access and registration
|
|
|
|
|
|
|
|
$ cat << EOF > ${TESTTMP}/buggyconfig.py
|
|
|
|
> """A small extension that tests our developer warnings for config"""
|
|
|
|
>
|
2019-01-30 03:25:33 +03:00
|
|
|
> from edenscm.mercurial import registrar, configitems
|
2017-06-17 14:08:03 +03:00
|
|
|
>
|
|
|
|
> cmdtable = {}
|
|
|
|
> command = registrar.command(cmdtable)
|
|
|
|
>
|
2017-06-18 20:52:54 +03:00
|
|
|
> configtable = {}
|
|
|
|
> configitem = registrar.configitem(configtable)
|
|
|
|
>
|
|
|
|
> configitem('test', 'some', default='foo')
|
2017-07-13 00:36:10 +03:00
|
|
|
> configitem('test', 'dynamic', default=configitems.dynamicdefault)
|
2017-10-31 16:37:30 +03:00
|
|
|
> configitem('test', 'callable', default=list)
|
2017-06-18 20:52:54 +03:00
|
|
|
> # overwrite a core config
|
|
|
|
> configitem('ui', 'quiet', default=False)
|
|
|
|
> configitem('ui', 'interactive', default=None)
|
|
|
|
>
|
2020-01-31 01:53:42 +03:00
|
|
|
> @command('buggyconfig')
|
2017-06-17 14:08:03 +03:00
|
|
|
> def cmdbuggyconfig(ui, repo):
|
2017-10-31 16:37:30 +03:00
|
|
|
> repo.ui.config('ui', 'quiet', True)
|
|
|
|
> repo.ui.config('ui', 'interactive', False)
|
|
|
|
> repo.ui.config('test', 'some', 'bar')
|
2017-06-18 20:52:54 +03:00
|
|
|
> repo.ui.config('test', 'some', 'foo')
|
2017-07-13 00:36:10 +03:00
|
|
|
> repo.ui.config('test', 'dynamic', 'some-required-default')
|
|
|
|
> repo.ui.config('test', 'dynamic')
|
2017-10-31 16:37:30 +03:00
|
|
|
> repo.ui.config('test', 'callable', [])
|
|
|
|
> repo.ui.config('test', 'callable', 'foo')
|
2017-10-16 18:41:27 +03:00
|
|
|
> repo.ui.config('test', 'unregistered')
|
|
|
|
> repo.ui.config('unregistered', 'unregistered')
|
2017-06-17 14:08:03 +03:00
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
|
2018-02-10 00:08:38 +03:00
|
|
|
devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at:*mercurial/extensions.py:* (_loadextra) (glob)
|
|
|
|
devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at:*mercurial/extensions.py:* (_loadextra) (glob)
|
2017-06-17 14:08:03 +03:00
|
|
|
|
2015-01-16 13:51:10 +03:00
|
|
|
$ cd ..
|