##// END OF EJS Templates
help: scripting help topic...
help: scripting help topic There are a lot of non-human consumers of Mercurial. And the challenges and considerations for machines consuming Mercurial is significantly different from what humans face. I think there are enough special considerations around how machines consume Mercurial that a dedicated help topic is warranted. I concede the audience for this topic is probably small compared to the general audience. However, lots of normal Mercurial users do things like create one-off shell scripts for common workflows that I think this is useful enough to be in the install (as opposed to, say, a wiki page - which most users will likely never find). This text is by no means perfect. But you have to start somewhere. I think I did cover the important parts, though.

File last commit:

r25731:cd1daab5 default
r25881:9de44351 stable
Show More
test-module-imports.t
133 lines | 4.4 KiB | text/troff | Tads3Lexer
/ tests / test-module-imports.t
Matt Mackall
test-module-imports: use test-repo requirement
r23894 #require test-repo
Augie Fackler
test-module-imports.t: new test to use the import cycle detector
r20039 $ import_checker="$TESTDIR"/../contrib/import-checker.py
Matt Mackall
test-module-imports: use test-repo requirement
r23894
Augie Fackler
test-module-imports.t: new test to use the import cycle detector
r20039 Run the doctests from the import checker, and make sure
it's working correctly.
$ TERM=dumb
$ export TERM
$ python -m doctest $import_checker
Gregory Szorc
import-checker: establish modern import convention...
r25703 Run additional tests for the import checker
$ mkdir testpackage
$ cat > testpackage/multiple.py << EOF
> from __future__ import absolute_import
> import os, sys
> EOF
$ cat > testpackage/unsorted.py << EOF
> from __future__ import absolute_import
> import sys
> import os
> EOF
$ cat > testpackage/stdafterlocal.py << EOF
> from __future__ import absolute_import
> from . import unsorted
> import os
> EOF
$ cat > testpackage/requirerelative.py << EOF
> from __future__ import absolute_import
> import testpackage.unsorted
> EOF
$ cat > testpackage/importalias.py << EOF
> from __future__ import absolute_import
> import ui
> EOF
$ cat > testpackage/relativestdlib.py << EOF
> from __future__ import absolute_import
> from .. import os
> EOF
$ cat > testpackage/symbolimport.py << EOF
> from __future__ import absolute_import
> from .unsorted import foo
> EOF
$ cat > testpackage/latesymbolimport.py << EOF
> from __future__ import absolute_import
> from . import unsorted
> from mercurial.node import hex
> EOF
$ cat > testpackage/multiplegroups.py << EOF
> from __future__ import absolute_import
> from . import unsorted
> from . import more
> EOF
$ mkdir testpackage/subpackage
$ cat > testpackage/subpackage/levelpriority.py << EOF
> from __future__ import absolute_import
> from . import foo
> from .. import parent
> EOF
$ cat > testpackage/sortedentries.py << EOF
> from __future__ import absolute_import
> from . import (
> foo,
> bar,
> )
> EOF
$ cat > testpackage/importfromalias.py << EOF
> from __future__ import absolute_import
> from . import ui
> EOF
$ cat > testpackage/importfromrelative.py << EOF
> from __future__ import absolute_import
> from testpackage.unsorted import foo
> EOF
$ python "$import_checker" testpackage/*.py testpackage/subpackage/*.py
testpackage/importalias.py ui module must be "as" aliased to uimod
testpackage/importfromalias.py ui from testpackage must be "as" aliased to uimod
testpackage/importfromrelative.py import should be relative: testpackage.unsorted
testpackage/importfromrelative.py direct symbol import from testpackage.unsorted
testpackage/latesymbolimport.py symbol import follows non-symbol import: mercurial.node
testpackage/multiple.py multiple imported names: os, sys
testpackage/multiplegroups.py multiple "from . import" statements
testpackage/relativestdlib.py relative import of stdlib module
testpackage/requirerelative.py import should be relative: testpackage.unsorted
testpackage/sortedentries.py imports from testpackage not lexically sorted: bar < foo
testpackage/stdafterlocal.py stdlib import follows local import: os
testpackage/subpackage/levelpriority.py higher-level import should come first: testpackage
testpackage/symbolimport.py direct symbol import from testpackage.unsorted
testpackage/unsorted.py imports not lexically sorted: os < sys
FUJIWARA Katsunori
import-checker.py: exit with code 0 if no error is detected...
r25731 [1]
Gregory Szorc
import-checker: establish modern import convention...
r25703
Augie Fackler
test-module-imports.t: new test to use the import cycle detector
r20039 $ cd "$TESTDIR"/..
There are a handful of cases here that require renaming a module so it
doesn't overlap with a stdlib module name. There are also some cycles
here that we should still endeavor to fix, and some cycles will be
hidden by deduplication algorithm in the cycle detector, so fixing
these may expose other cycles.
FUJIWARA Katsunori
tests: check import cycles in hgext/**.py, too...
r25176 $ hg locate 'mercurial/**.py' 'hgext/**.py' | sed 's-\\-/-g' | python "$import_checker" -
Mads Kiilerich
import-checker: show stdlib and relative imports separately...
r20386 mercurial/dispatch.py mixed imports
stdlib: commands
relative: error, extensions, fancyopts, hg, hook, util
mercurial/fileset.py mixed imports
stdlib: parser
relative: error, merge, util
mercurial/revset.py mixed imports
stdlib: parser
Gregory Szorc
revset: don't import discovery at module level...
r24722 relative: error, hbisect, phases, util
Mads Kiilerich
import-checker: show stdlib and relative imports separately...
r20386 mercurial/templater.py mixed imports
stdlib: parser
Durham Goode
template: add revset() template function...
r20519 relative: config, error, templatefilters, templatekw, util
Mads Kiilerich
import-checker: show stdlib and relative imports separately...
r20386 mercurial/ui.py mixed imports
stdlib: formatter
Pierre-Yves David
progress: move the singleton logic to the ui module...
r25498 relative: config, error, progress, scmutil, util
Matt Mackall
import-checker: fix rotatecycle...
r24487 Import cycle: mercurial.cmdutil -> mercurial.context -> mercurial.subrepo -> mercurial.cmdutil
FUJIWARA Katsunori
tests: check import cycles in hgext/**.py, too...
r25176 Import cycle: hgext.largefiles.basestore -> hgext.largefiles.localstore -> hgext.largefiles.basestore
FUJIWARA Katsunori
import-checker: make imported_modules yield absolute dotted_name_of_path...
r25174 Import cycle: mercurial.commands -> mercurial.commandserver -> mercurial.dispatch -> mercurial.commands
FUJIWARA Katsunori
import-checker.py: exit with code 0 if no error is detected...
r25731 [1]