Hi Martin,

Thanks for your comments.  Keeping the file system layer stateless is the
right approach.  I think the following additions would be sufficient:*
IFileStore.getCanonicalPath()
* IFileStore.isAlias() -- much lighter weight than getting
the canonical path, only returns true if last segment is aliased

A big concern I have is that if the resource layer solely adds
getCanonicalPath() to existing methods, it won't get invoked consistently.
 Perhaps having {IWorkspace,IProject}.findResource(String absolutePath) API
calls as the primary/only way to convert a path string to a resource would
provide the consistency we need.
Here are some scenarios for which we will want aliasing to work correctly:

A) The file "/real/myfile.cc" is symlinked by "/project_alias/myfile.cc".
Desired behavior:
* When a debugger returns the path "/real/myfile.cc", the debug framework
opens the resource associated with project_alias, not a separate resource
outside the workspace

B) "/project/external_lib/headers" is symlinked to the folder
"/project/external_lib/v1234/src/headers".
 "/project/external_lib/v1234/src/headers/file_with_syntax_error.h" fails to
compile. Desired behavior:
* Clicking on a console hyperlink or a Problems pane item for the
error opens the workspace-mapped resource.  (This is no different from A,
but illustrates that symlinks can occur in any segment in a path, not just
the end segment.)
C) "/project1/external_lib/headers" and "/project2/external_lib/headers" are
both symlinked to the folder "/project1/external_lib/v1234/src/headers".  On
a build of project1, code in an #ifdef in
"/project/external_lib/v1234/src/headers/header.h" fails to compile. Desired
behavior:
* You get two different editor panes when
opening "/project1/external_lib/headers/header.h"
and "/project1/external_lib/headers/header.h", since they may be used with
different compilation directives, which would affect their display
* Clicking on a console hyperlink or a problems pane item for the
error opens the workspace-mapped resource for the project1 version of the
file
* Editing the "header.h" file updates both editors in concert

--Terry

On Tue, Oct 7, 2008 at 10:31 AM, Oberhuber, Martin <
[EMAIL PROTECTED]> wrote:

>  Hi Terry,
>
> I fully agree.
>
>    1. *Create / Modify Aliases.* I also don't see a need for creating /
>    modifying file system links from Eclipse. There should be support for
>    visualizing them, though (which is easy to add in Eclipse 3.5 already).
>    2. *Consistent normalized path support.* Agree. We'll need *
>    IFileStore#getCanonicalPath()* on the EFS API, and we'll need smart
>    algorithms on the Resource / Refresh / Compare code to avoid using
>    getCanonicalPath() where possible, in order to maintain good performance. 
> In
>    other words, query the canonical path only when we come across an FS link,
>    but construct the path ourselves for "regular" files and folders. The 
> *Workspace
>    Tree* will need some redesign to understand links "moving around" its
>    structure.
>    3. *Serve up both normalized and non-normalized path strings.* Yes,
>    though I think this is probably more relevant *for resource objects*than 
> for filesystem objects -- the FS layer does exactly that with a
>    getCanonicalPath() API already, but since FS must be stateless it will be
>    expensive. On the Resource layer, we can add state (caching) to make it
>    faster.
>    * the non-normalized path is how the client / user originally referred
>    to a resource, and
>    * the normalized path is its normalized variant (can be computed from
>    the workspace tree).
>    4. *Support team providers for VCSs that can check in symlinks.* I'm
>    not sure if that is required. Assuming that foo/bar is a symlink, doing a
>    "checkin foo/bar" will check in the symlink as needed. To me, it seems that
>    all we need to make sure is that we don't instruct the VCS to check in the
>    same file twice just because we approach a given (normalized) file through
>    multiple different (non-normalized) paths. This should be possible through
>    an improved alias-aware Workspace Tree.
>
> I think that if we are careful, there is some potential to even add proper
> Alias Management in Eclipse 3.5 already, though that needs a lot more
> investigation. What I would propose, is starting that work soon in order to
> see whether we can apply it to Galileo already or whether it requires more
> radical change that would make it impossible in 3.5.
>
> Cheers,
> --
> *Martin Oberhuber*, Senior Member of Technical Staff, *Wind River*
> Target Management Project Lead, DSDP PMC Member
> http://www.eclipse.org/dsdp/tm
>
>
> _______________________________________________
> eclipse-incubator-e4-dev mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev
>
>
_______________________________________________
eclipse-incubator-e4-dev mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/eclipse-incubator-e4-dev

Reply via email to