sapling/mercurial
Adam Simpkins 48496ce5ca fix a bug in the _checkforeignmodules() code
Summary:
Fix the `_collectimport()` code to more accurately figure out module paths.

When used from a statement like `import foo.bar` the `__import__()` function
returns the `foo` module.  However, if used like `from foo.bar import baz` it
returns the `foo.bar` module.  The `_collectimport()` code did not expect this
behavior and assumed that it always returned `foo`.  This resulted in it doing
the wrong thing when trying to resolve nested imports.

In most cases it would just fail with an attribute error and it would then
swallow this exceptions.  However in some cases it was able to find a
non-module object.  For instance, when processing the `mercurial.extensions`
module it would find the `extensions()` function inside this module.  Calling
`inspect.getabsfile()` on this function doesn't always produce the correct
result.  If loaded from a pre-compiled .pyc file the function may have a
relative path baked in as its function name.  The `inspect.getabsfile()` code
then simply prepends this with the current working directory, despite the fact
that this wasn't actually imported from the current directory.

I also changed the code to use inspect.getfile() rather than
inspect.getabsfile().  The getabsfile() function attempts to do other
normalization and string manipulation that we don't need.  (It tries to find
`*.py` names rather than `*.pyc` or `*.pyo` names, and it normalizes case.)

Reviewed By: ryanmce, quark-zju

Differential Revision: D8601652

fbshipit-source-id: db9be3c5cbbea83a880851036093aaa28b5b9b19
2018-06-25 15:52:25 -07:00
..
cext hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
cffi Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
default.d mergetools.rc: find OSX FileMerge in the new location inside Xcode 4.3 2015-10-16 11:37:34 +02:00
help treestate: implement repack 2018-06-18 10:40:07 -07:00
hgweb Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
httpclient Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
pure Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
rust treestate: fix state handling when upgrading to treestate 2018-06-25 15:24:20 -07:00
templates hgweb: stop using HTML comments in <script> 2017-12-15 12:15:58 +08:00
thirdparty Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
__init__.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
ancestor.py Additional info in function comment for commonancestorheads 2018-06-20 09:35:30 -07:00
archival.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
bdiff.c hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
bdiff.h hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
bitmanipulation.h hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
bookmarks.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
branchmap.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
bundle2.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
bundlerepo.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
byterange.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
changegroup.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
changelog.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
chgserver.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
cmdutil.py rebase: new, faster fallback logic for conflicts 2018-06-14 11:20:05 -07:00
color.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
commands.py chg: cleanup the new entry point 2018-06-14 18:36:46 -07:00
commandserver.py commandserver: set CLOEXEC on server domain socket 2018-06-20 22:21:12 -07:00
compat.h hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
config.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
configitems.py treestate: implement repack 2018-06-18 10:40:07 -07:00
connectionpool.py connectionpool: fix wrapping of cleanup 2018-06-21 23:20:10 -07:00
context.py fsmonitor: store fsmonitor state in treestate 2018-06-14 21:38:33 -07:00
copies.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
crecord.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
dagop.py dagop: handle wdir() in dagrange expressions 2018-06-25 05:19:58 -07:00
dagparser.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
dagutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
debugcommands.py debugdirstate: print treestate internal states in verbose mode 2018-06-13 19:03:10 -07:00
destutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
dirstate.py dirstate: optimize copied for treestate 2018-06-25 14:04:55 -07:00
dirstateguard.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
discovery.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
dispatch.py move hintutil.show after runcommand 2018-06-25 07:34:11 -07:00
drawdag.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
dummycert.pem ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs 2014-09-26 02:19:48 +02:00
encoding.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
error.py rebase: add :abort merge tool 2018-06-19 20:21:26 -07:00
exchange.py remotefilelog: don't process manifests when not necessary 2018-06-19 10:20:07 -07:00
exewrapper.c hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
extensions.py fix a bug in the _checkforeignmodules() code 2018-06-25 15:52:25 -07:00
fancyopts.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
filelog.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
filemerge.py rebase: fix --tool :abort with non-conflicting merges 2018-06-25 15:24:20 -07:00
fileset.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
formatter.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
graphmod.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
hbisect.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
help.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
hg.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
hintutil.py hint: pick the user config file that exists 2018-05-31 20:16:07 -07:00
hook.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
httpconnection.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
httppeer.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
i18n.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
interpreter.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
keepalive.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
localrepo.py localrepo: add localrepo._lockfreeprefix 2018-06-20 12:50:12 -07:00
lock.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
logexchange.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
lsprof.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
lsprofcalltree.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
mail.py py3: make sure the first argument of time.strftime() is str 2017-11-29 08:44:06 +05:30
main.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
manifest.py treemanifest: set a hint commit hash for resolving base trees 2018-06-13 11:49:46 -07:00
match.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
mdiff.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
merge.py merge: do not call dirstate.copied in a loop 2018-06-18 16:57:11 -07:00
mergeutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
metrics.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
minirst.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
mpatch.c hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
mpatch.h hg: disable check-code tests for C code 2018-06-05 19:21:43 -07:00
namespaces.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
node.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
obsolete.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
obsutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
parser.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
patch.py stat: add a new "status" style 2018-05-25 01:04:07 -07:00
pathutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
peer.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
phases.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
policy.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
posix.py log maxxrss from within mercurial 2018-06-07 11:50:46 -07:00
profiling.py profiling - modify file opening for profiling 2018-06-07 07:50:38 -07:00
progress.py progress: tone down fancyrenderer 2018-06-14 02:42:39 -07:00
pushkey.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
pvec.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
pycompat.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
rcutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
registrar.py template: add a way to support command-level template cleanly 2018-06-06 15:43:25 -07:00
repair.py truncate: handle bug in truncate 2018-05-30 18:20:57 -07:00
repository.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
repoview.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
revlog.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
revset.py revset: increase weights of predicates that use filter 2018-06-22 07:40:08 -07:00
revsetlang.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
rewriteutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
scmposix.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
scmutil.py casecollision: work with the new treestate 2018-06-11 14:32:42 -07:00
scmwindows.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
server.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
setdiscovery.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
similar.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
simplemerge.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
smartset.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
sparse.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
sshpeer.py sshpeer: forward remote stderr to stderr 2018-06-25 08:44:32 -07:00
sshserver.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
sslutil.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
statichttprepo.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
statprof.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
store.py store: workaround long non-fncache file names 2018-06-19 19:19:34 -07:00
streamclone.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
subrepo.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
tagmerge.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
tags.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
templatefilters.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
templatekw.py templatekw: implement nodechanges as a template keyword 2018-06-06 15:43:25 -07:00
templater.py template: improve error handling when template function signature mismatch 2018-06-06 15:43:25 -07:00
transaction.py truncate: handle bug in truncate 2018-05-30 18:20:57 -07:00
treediscovery.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
treestate.py dirstate: optimize copied for treestate 2018-06-25 14:04:55 -07:00
txnutil.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
ui.py dispatch: add a config option to control exit code 2018-06-13 16:14:01 -07:00
unionrepo.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
upgrade.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
url.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
urllibcompat.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
util.py zstd: use Rust-backed bindings for its support 2018-06-12 13:22:23 -07:00
verify.py codemod: join the auto-formatter party 2018-05-25 22:17:29 -07:00
vfs.py Back out "vfs: do not unlink files with one hardlink on Windows" 2018-06-19 16:19:51 -07:00
win32.py log maxxrss from within mercurial 2018-06-07 11:50:46 -07:00
windows.py log maxxrss from within mercurial 2018-06-07 11:50:46 -07:00
wireproto.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00
worker.py Upgrade to 18.5b1 2018-05-30 02:23:58 -07:00