2014-08-06 20:53:08 +04:00
|
|
|
#require test-repo
|
2014-05-05 22:42:58 +04:00
|
|
|
|
2016-05-11 07:49:27 +03:00
|
|
|
$ . "$TESTDIR/helpers-testrepo.sh"
|
2011-11-23 05:50:58 +04:00
|
|
|
$ check_code="$TESTDIR"/../contrib/check-code.py
|
|
|
|
$ cd "$TESTDIR"/..
|
|
|
|
|
2013-07-06 23:47:56 +04:00
|
|
|
New errors are not allowed. Warnings are strongly discouraged.
|
2014-01-08 01:29:15 +04:00
|
|
|
(The writing "no-che?k-code" is for not skipping this file when checking.)
|
2013-07-06 23:47:56 +04:00
|
|
|
|
2019-01-29 05:29:48 +03:00
|
|
|
$ testrepohg files . | egrep -v "^(edenscm/hgext/extlib/pywatchman|edenscm/hgext/p4fastimport|lib/cdatapack|lib/third-party|edenscm/mercurial/thirdparty|fb|newdoc)" \
|
2018-07-03 21:20:37 +03:00
|
|
|
> | sed 's-\\-/-g' > $TESTTMP/files.txt
|
|
|
|
|
|
|
|
$ NPROC=`python -c 'import multiprocessing; print(multiprocessing.cpu_count())'`
|
|
|
|
$ cat $TESTTMP/files.txt | xargs -n64 -P $NPROC contrib/check-code.py --warnings --per-file=0 | sort
|
2019-01-29 05:29:48 +03:00
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/bsearch.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/bsearch.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/bsearch_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/checksum.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/checksum.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/checksum_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/internal_result.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/node.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/node.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/node_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/path_buffer.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/result.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tests.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tests.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_arena.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_arena.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_convert.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_convert_rt.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_convert_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_copy.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_copy_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_diff.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_diff_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_disk.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_disk_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_dump.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_iterate_rt.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_iterator.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_iterator.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_iterator_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_path.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_path.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cfastmanifest/tree_test.c it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/datapackstore.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/datapackstore.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/datastore.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/deltachain.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/deltachain.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/key.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/match.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/py-cdatapack.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/py-cstore.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/py-datapackstore.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/py-structs.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/py-treemanifest.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/pythondatastore.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/pythondatastore.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/pythonkeyiterator.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/pythonutil.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/pythonutil.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/store.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/uniondatapackstore.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/cstore/uniondatapackstore.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_entry.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_entry.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_fetcher.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_fetcher.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_ptr.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/manifest_ptr.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/treemanifest.cpp it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/extlib/ctreemanifest/treemanifest.h it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/globalrevs.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsql.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/__init__.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/compathacks.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/editor.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/hooks/updatemeta.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/layouts/base.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/layouts/custom.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/layouts/standard.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/maps.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/pushmod.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/stupid.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svncommands.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnexternals.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnmeta.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnrepo.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnwrap/__init__.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnwrap/common.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnwrap/subvertpy_wrapper.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/svnwrap/svn_swig_wrapper.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/util.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/verify.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/hgext/hgsubversion/wrappers.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/mercurial/httpclient/__init__.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/mercurial/httpclient/_readers.py it has no-che?k-code (glob)
|
|
|
|
Skipping edenscm/mercurial/statprof.py it has no-che?k-code (glob)
|
2014-01-08 01:29:15 +04:00
|
|
|
Skipping i18n/polib.py it has no-che?k-code (glob)
|
2018-01-09 02:08:18 +03:00
|
|
|
Skipping lib/clib/buffer.c it has no-che?k-code (glob)
|
|
|
|
Skipping lib/clib/buffer.h it has no-che?k-code (glob)
|
|
|
|
Skipping lib/clib/convert.h it has no-che?k-code (glob)
|
|
|
|
Skipping lib/clib/null_test.c it has no-che?k-code (glob)
|
2018-04-10 11:06:47 +03:00
|
|
|
Skipping lib/clib/portability/dirent.h it has no-che?k-code (glob)
|
2018-01-09 02:08:18 +03:00
|
|
|
Skipping lib/clib/portability/inet.h it has no-che?k-code (glob)
|
2018-02-13 18:47:38 +03:00
|
|
|
Skipping lib/clib/portability/mman.h it has no-che?k-code (glob)
|
2018-01-09 02:08:18 +03:00
|
|
|
Skipping lib/clib/portability/portability.h it has no-che?k-code (glob)
|
|
|
|
Skipping lib/clib/portability/unistd.h it has no-che?k-code (glob)
|
|
|
|
Skipping lib/clib/sha1.h it has no-che?k-code (glob)
|
2017-04-14 08:19:28 +03:00
|
|
|
Skipping tests/badserverext.py it has no-che?k-code (glob)
|
2018-01-17 14:23:44 +03:00
|
|
|
Skipping tests/comprehensive/test-hgsubversion-custom-layout.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-obsstore-on.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-rebuildmeta.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-sqlite-revmap.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-stupid-pull.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-updatemeta.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/comprehensive/test-hgsubversion-verify-and-startrev.py it has no-che?k-code (glob)
|
2018-01-09 15:45:57 +03:00
|
|
|
Skipping tests/conduithttp.py it has no-che?k-code (glob)
|
2018-01-17 14:23:44 +03:00
|
|
|
Skipping tests/fixtures/rsvn.py it has no-che?k-code (glob)
|
2018-01-09 05:58:08 +03:00
|
|
|
Skipping tests/test-fb-hgext-remotefilelog-bad-configs.t it has no-che?k-code (glob)
|
2018-01-04 21:54:02 +03:00
|
|
|
Skipping tests/test-hgsql-encoding.t it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsql-race-conditions.t it has no-che?k-code (glob)
|
2018-01-17 14:23:44 +03:00
|
|
|
Skipping tests/test-hgsubversion-externals.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-fetch-command-regexes.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-fetch-command.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-fetch-exec.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-fetch-mappings.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-fetch-symlinks.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-push-command.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-push-dirs.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-push-renames.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-single-dir-clone.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-single-dir-push.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-svn-pre-commit-hooks.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-svnwrap.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-tags.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-template-keywords.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-urls.py it has no-che?k-code (glob)
|
|
|
|
Skipping tests/test-hgsubversion-utility-commands.py it has no-che?k-code (glob)
|
rust: reinvent Python's threading.Condition
Summary:
Python 2's `threading.Condition` and `threading.RLock` implementation are in
pure Python. Part of `RLock.acquire` looks like (simplified):
def acquire(self, blocking=1):
me = _get_ident()
if self.__owner == me:
self.__count = self.__count + 1
return 1
rc = self.__block.acquire(blocking)
########## Here #########
if rc:
self.__owner = me
self.__count = 1
return rc
If an interruption (ex. SIGTERM) happens at "HERE". The lock would be in an
inconsistent state. And if some `finally` block, or `__exit__` in a context
manager tries to release the lock, it could deadlock.
Similar problems also apply to `release`, `_acquire_restore`, and
`_release_save`. Basically, `self.__owner`, `self.__count` and `self.__block`
(i.e. the real lock) cannot be guaranteed in a consistent state in pure Python
world, because interruption can happen before any Python bytecode instruction
(but not inside a single Python bytecode instruction).
Therefore the interruption-safe implementation cannot be done in pure Python.
Use Rust to rescue.
The added test `streetest-condint.py` has a high chance to reproduce the
deadlock issue with Python 2.
Python 3 has a native RLock implementation, which makes things better. The
"Condition" implementation is not native and I haven't checked whether it
is sound or not.
Unfortunately, as part of testing, I hit https://bugs.python.org/issue29988 and
confirmed from the Rust world. That is, `__exit__` is not guarnateed called (!!)
That means native implementations still have a chance to be wrong, and there is
no easy way to fix it. `streetest-condint.py` was then updated to expose the
issue more easily.
The implementation is better than Python 2 stdlib, though.
Reviewed By: markbt
Differential Revision: D10517920
fbshipit-source-id: 394c9050c512ce2a0f9743c28ccfafe0f560141a
2018-10-25 23:07:11 +03:00
|
|
|
Skipping tests/test-rustthreading.py it has no-che?k-code (glob)
|
2018-01-17 14:23:44 +03:00
|
|
|
Skipping tests/test_hgsubversion_util.py it has no-che?k-code (glob)
|
2018-10-20 01:39:13 +03:00
|
|
|
tests/test-revset.t:*: warning: ^ must be quoted --> > . + (glob)
|
2016-11-25 20:55:05 +03:00
|
|
|
|
|
|
|
@commands in debugcommands.py should be in alphabetical order.
|
|
|
|
|
|
|
|
>>> import re
|
|
|
|
>>> commands = []
|
2019-01-29 05:29:48 +03:00
|
|
|
>>> with open('edenscm/mercurial/commands/debug.py', 'rb') as fh:
|
2016-11-25 20:55:05 +03:00
|
|
|
... for line in fh:
|
|
|
|
... m = re.match("^@command\('([a-z]+)", line)
|
|
|
|
... if m:
|
|
|
|
... commands.append(m.group(1))
|
|
|
|
>>> scommands = list(sorted(commands))
|
|
|
|
>>> for i, command in enumerate(scommands):
|
|
|
|
... if command != commands[i]:
|
|
|
|
... print('commands in debugcommands.py not sorted; first differing '
|
|
|
|
... 'command is %s; expected %s' % (commands[i], command))
|
|
|
|
... break
|
2017-03-29 22:14:20 +03:00
|
|
|
|