On 6/25/07, chris vigelius <[EMAIL PROTECTED]> wrote:
Hello,
Hi Chris,
I'm currently trying to make a patch which adresses the long-standing
symlink problem on Unix platforms, as I am using Ubuntu Feisty and they
have almost every library symlinked...
...
REF.getFileAbsolutePath() canonicalizes the path passed to it, so
resolveModule is called with "/usr/share/python-support/...". But
resolveModule() internally matches the passed file against pythonpath,
and since this is different from the real path (because of the resolved
symlink), it is dropped.
My question is now, why this matching is done in the first place? To
determine the package name, one could just walk up the directories and
look for __init.py__, that would be not only faster but also remove the
symlink problem. Are there any special reasons why the canonical path of
a module must be compared against pythonpath?
The current implementation is the way it is because it can resolve module
names even if the file does not exist. E.g.: When a file is removed, the
code-completion builder will have to remove the AST cache for that file --
but when that happens, the file does not actually exist anymore... you can
see that the signature it has is:
public String resolveModule(String fullPath, final boolean
requireFileToExist)
So, if the file does not exist, it might be difficult to resolve it...
Still, I thought it didn't actually resolve symlinks, but you're right about
getCanonicalPath, so, I think this can be worked on -- initially making it
resolve the modules in the changePythonPath, when we know that the files
exist -- fixing it in the builder (for projects) may be a different story
(at: ProjectModulesManagerBuild.rebuildModule)... anyway, 1st things 1st...
The solutions available (I think) would be:
- Creating a new resolveModule that would work on existing files
- Resolving the module when we're looking for the files in the pythonpath
(currently in listFilesForCompletion, it uses
pythonPathHelper.getModulesBelow to get a list of files and then resolves
it, but maybe this could be changed to resolve the File and the actual
module name at the same time).
I think that the second approach would probably be better... would you be
willing to take a look at it?
Cheers,
Fabio
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
pydev-code mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pydev-code