Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] First gotcha with add/exclude children of FFS


I'd be interested to attend as well as I will attend EclipseCon the whole week.

Thanks.

Serge.

Ken Ryall wrote:
Doug,

Can we get together at EclipseCon to discuss this issue specifically? Do you know the right platform people to invite to the meeting? We really need to piece together a plan.

I’m sure you have enough to do so if you can tell me who to recruit I can help organize the meeting.

Thanks - Ken

------------------------------------------------------------------------
*From: *"ext Schaefer, Doug" <Doug.Schaefer@xxxxxxxxxxxxx>
*Reply-To: *"CDT General developers list." <cdt-dev@xxxxxxxxxxx>
*Date: *Wed, 20 Feb 2008 18:44:57 -0800
*To: *"CDT General developers list." <cdt-dev@xxxxxxxxxxx>
*Subject: *RE: [cdt-dev] First gotcha with add/exclude children of FFS

So, you know. The more I think about what you guys are saying, I'm realizing that the EFS solution probably is the right one. The objective should be to turn the IResource tree into a logical project view and to remove all notions that it represents physical file layout. That unfortunately starts with the .project and .cproject files, but I think there are tricks we can do there. The .settings may be harder but let me sleep on that.

At any rate, this has piqued my interest again and I'll work on reviving it and see where it goes. I'll try to get a prototype working by EclipseCon so we can talk about it more concretely.

Cheers,
Doug

------------------------------------------------------------------------
*From:* cdt-dev-bounces@xxxxxxxxxxx [mailto:cdt-dev-bounces@xxxxxxxxxxx] <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of *Brunauer, Walter
*Sent:* Monday, February 18, 2008 8:53 AM
*To:* CDT General developers list.
*Subject:* RE: [cdt-dev] First gotcha with add/exclude children of FFS

Hi Warren,

well, the confusion my origin from the different meanings of what project setup is: for me, project setup is not equal to build setup. I.e., on our projects, the build setup is an independent step from the project setup. We intentionally separated this to overcome all kind of issues you obviously experienced as well. And this is how we see it:

1. Create a project at the desired location (everything beneath this root location is part of the project, but it can be an empty project just as well with linked resources added to it later). By default, the build setup is identical to the project content (there is one build target, linking/archiving everything together).

2. If (a) specific build setup(s) are needed, it is possible to specify as many build targets with arbitrary contents as desired. This approach separates the physical file system layout from logical build layouts, and it even works beyond project boundaries. IOW, no matter from where source files are pulled in (the same projects, nested projects, outer projects, sibling projects), one is able to specify any build setup exactly are needed, as long as all source files are known to Eclipse (as resources).

HTH,

Walter



    ------------------------------------------------------------------------
    *From:* cdt-dev-bounces@xxxxxxxxxxx
    [mailto:cdt-dev-bounces@xxxxxxxxxxx]
    <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
    *Warren.Paul@xxxxxxxxx
    *Sent:* Freitag, 15. Februar 2008 14:51
    *To:* cdt-dev@xxxxxxxxxxx
    *Subject:* RE: [cdt-dev] First gotcha with add/exclude children of FFS



    Hi Walter,



    I forgot all about the absolute paths issue with linked resources.
    I'll update the wiki.



    I'm a bit confused about your comment about this not being a
    project setup issue. We have our own builder as well, and it will
    happily build whatever the build description says, whether those
    files are under the project root or not. We even have our own
    project explorer view which shows a logical representation of the
    project rather than the physical file system layout. But we still
    run into a lot of issues when files are not under the project root
    - that is, when you can't get an IFile for them.



    We have a wide range of user types from small application
    developers to large system developers. In many cases, a users code
    base consists of hundreds of directories with thousands of source
    files. In such a source base, there are many hundreds of build
    artifacts and almost as many "logical projects". It is a huge
    problem for these users to be able to create projects currently.
    They will typically have a few projects going at a time, but many
    times the natural project root for all of them will be the same.
    We've found ways to work around some of the other issues, but not
    this one. It sounds like perhaps you guys have found a way. Could
    you elaborate on how you setup your projects?



    Thanks,
    Warren



    ------------------------------------------------------------------------
    *From:* cdt-dev-bounces@xxxxxxxxxxx
    [mailto:cdt-dev-bounces@xxxxxxxxxxx]
    <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of *ext
    Brunauer, Walter
    *Sent:* Friday, February 15, 2008 1:56 AM
    *To:* CDT General developers list.
    *Subject:* RE: [cdt-dev] First gotcha with add/exclude children of FFS



    Hi Warren,



    FWIW, you did not mention anything about linked resources and
    absolute paths these persist in the .project file by default.
    Again a big issue around linked resources in combination with
    sharing project within a team (even without team support), and one
    more reason why they appear to be so cumbersome to handle. To me
    it seems many times one has to unsell linked resources to users:
    Whereas linked resources are (kind of!) nice for evaluation
    purposes (because, yes, in this case you might not want to pollute
    your sources), as soon as you start serious development, you run
    into all kind of troubles. The hurdle to get everything right from
    the beginning is overwhelming for novices (e.g. its not possible
    to change a linked resource to use a variable later). Sorry, I
    don't know how to add this to the Wiki page...



    Having said that, the scenario you describe is really about having
    the flexibility around build and indexer setup, not around project
    setup, IMO.



    It's rather classic: users have common code they want to reuse in
    multiple applications - so they create one or a set of libraries
    out of it, within one or a set of projects. Of course, indexing
    should be able to handle only code going into these libraries, and
    optionally ignore the rest. Then, they create their application
    projects, which use the binary artifacts of the library
    project(s). Now it would be great if they would have automatic
    support for application linkage specification, i.e. some nice
    wizard or UI allowing to select the library binaries of other
    projects to be linked in, without the need to specify it manually
    in the linker options. And probably also desired: during
    application code development, the public API's of all used library
    projects should be the only thing they see WRT code completion,
    etc. I guess, some UI would be needed for this as well.



    And now think of all developers in the world. Wouldn't it be great
    to give as many of them the freedom to choose how to achieve this?
    Either everything in one project, or one project per build
    artifact, or one project per module/application/product, or with
    nested projects... its possible. Our commercial IDE based on CDT
    supports all this, and we did not have to provide some EFS or work
    with linked resources. Well, we had to override the build system,
    and this is IMO the place to solve this in CDT as well.




    Again, I don't see anything specific to project setup. The issue
    around having the source tree polluted with project files - I
    don't think this is the big thing. I would not leave the Eclipse
    path in this area at all and allow to separate the project file
    from the project location. Its a very general paradigm of Eclipse,
    and I am pretty sure doing everything differently will generate
    lots and lots of problems in all kind of areas (probably much more
    than you already identified), unless you make it a new Eclipse way
    (add/change this in the platform, not in CDT, that is).



    Just my 2 or 3 cents again,



    Walter




        ------------------------------------------------------------------------
        *From:* cdt-dev-bounces@xxxxxxxxxxx
        [mailto:cdt-dev-bounces@xxxxxxxxxxx]
        <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
        *Warren.Paul@xxxxxxxxx
        *Sent:* Donnerstag, 14. Februar 2008 23:35
        *To:* cdt-dev@xxxxxxxxxxx
        *Subject:* RE: [cdt-dev] First gotcha with add/exclude
        children of FFS



        I've updated the Wiki page
        http://wiki.eclipse.org/CDT:Flexible_Project_Structure with
        some more thoughts on the issue. It would be great to get
        feedback from other CDT users - both those shipping C/C++
        IDE's and end users. You'll see that I'm not convinced that
        the linked resources route is a viable option. Maybe we can
        get the platform team involved in the discussion to help find
        the best route forward.



        Thanks,
        Warren





        ------------------------------------------------------------------------
        *From:* cdt-dev-bounces@xxxxxxxxxxx
        [mailto:cdt-dev-bounces@xxxxxxxxxxx]
        <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of *ext
        Schaefer, Doug
        *Sent:* Friday, January 25, 2008 11:15 AM
        *To:* CDT General developers list.
        *Subject:* RE: [cdt-dev] First gotcha with add/exclude
        children of FFS



        I guess what my investigation has shown me that the EFS
        solution and linked resources are pretty much identical. I
        really noticed this when trying to figure out how to persist
        the adds and found myself wishing I could add that to the
        .project file just like linked resource are. And they are....



        I think all the issues that we have with linked resources
        would be equally as bad with the EFS solution, possibly worse
        because the EFS adds are hidden. The CVS one is a great
        example. I really doubt CVS would work with the EFS solution
        either. And I don't want us to think EFS would be better since
        it's not in the platform where we'll have a battle getting
        changes. Any platform changes required to make linked resource
        work correctly would also need to be done for EFS.



        So my hope is to save the effort at implementing the
        add/remove functionality since I believe that's already there
        with linked/hidden resources. We can then focus on making
        linked resources work where we need them and improving the
        workflows. But this really needs to start now.



        So, Warren, you've somewhat started a list of workflows that
        we'd like to support with this solution. This is a great place
        to start. I've created a Wiki page to start capturing these.
        Please feel free to add more information, especially to the
        workflow section. When we have that we may get a better idea
        of which of the two solutions will work best.



        http://wiki.eclipse.org/CDT:Flexible_Project_Structure



        Thanks,

        Doug





        ------------------------------------------------------------------------
        *From:* cdt-dev-bounces@xxxxxxxxxxx
        [mailto:cdt-dev-bounces@xxxxxxxxxxx]
        <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
        *Warren.Paul@xxxxxxxxx
        *Sent:* Friday, January 25, 2008 11:22 AM
        *To:* cdt-dev@xxxxxxxxxxx
        *Subject:* RE: [cdt-dev] First gotcha with add/exclude
        children of FFS



        We've been working on Eclipse/CDT based products for about
        three years now. I'm sorry to say that the project model is
        still not satisfactory for our purposes. We've tried many
        angles, but are still stuck with some pretty serious
        limitations. I've volunteered to investigate the EFS route to
        see if it will help at all. Based on this thread I'm assuming
        it won't.



        Let me give you a brief overview of how our users work, and
        then discuss the problem we've run into. I don't think any of
        this is specific to our users BTW.



        Most of our users have existing code bases. They simply want
        to "import" it into the IDE. Others will create new projects
        from our templates. The new projects are created in the
        workspace. Imported projects could be anywhere in the file
        system. Often times they will import several projects from the
        same source tree. This is where our biggest problem is. Let's
        say the source base looks like this:



        C:\MyProjects\Project1\...


        C:\MyProjects\Project2\...


        C:\MyProjects\Common\...



        Because both projects share code in the Common directory, the
        logical root project directory for both Project1 and Project 2
        is C:\MyProjects\. But in Eclipse you can't have two projects
        with the same root. This is where the .project and .cproject
        files are created. So currently our users would import
        Project1 with the natural root (C:\MyProjects\), but Project2
        has to be rooted at C:\MyProjects\Project2\. This means that
        any source/headers from the common directory are not under
        Project2. This means those files are not in the project
        explorer for that project, are not indexed, etc.. We logged
        this against the platform -
        https://bugs.eclipse.org/bugs/show_bug.cgi?id=78438. Basically
        if you put the .project file anywhere, but have a project root
        attribute, this would cease to be a problem.



        Our first product actually always created the .project in the
        workspace, and for imported projects, would create links to
        files and folders. We ran into so many issues with this that
        we had to change the model. I don't recall all of the issues,
        but here's a list of some:



        - Version control simply didn't work at all



        - You can't make file system changes with links. For example,
        if you want to rename a file or folder, or move a file around,
        you can't do this with linked resources. It only changes the
        link itself, not the underlying resource.



        - Creating new resources in a project with links is confusing
        at best. Let's say you have a project with a linked folder and
        file at the root. If you create a new file or folder at the
        root, it is created in the workspace, not where the other
        folder/file are in the file system. But if you create a new
        file under the linked folder, it gets created where you'd expect.



        - The location of the .project/.cproject files are
        problematic. Some users will want to keep these in version
        control, while others won't. Those that do want them created
        in the source tree, but those that don't want them elsewhere,
        like the workspace. I forget now why this was a problem with
        linked resources, but there was something weird going on there.



        I suppose it's worth noting that the last time we really
        looked at this was in Eclipse 3.2, so some of this may have
        been fixed by now. But I doubt it. In general linked resources
        are second class citizens. Some IResource API's just don't
        work for linked resources. Just search for references to
        IResource#isLinked for "special handling". I suspect that
        we'll run into similar issues with EFS though - see
        getLocation vs getLocationURI.



        We also have the same issue that Doug is trying to address
        (hiding some branches in a source tree). This is much less of
        an issue for us though. You can already reduce the scope of
        the indexer and the build. The only real issue for us is for a
        very large source tree, you're going to get IResource's for
        everything, which slows things down quite a bit. There is
        actually somewhat of a problem in reducing the indexer scope -
        see https://bugs.eclipse.org/bugs/show_bug.cgi?id=178159.



        The hidden attribute addition sounds promising for hiding
        resources under the project root, but doesn't really do
        anything to add flexibility to the contents of a project. EFS
        sounds like it would though. What I mean by that is, having
        resources under a project that are real resources, not linked,
        but that don't live under the project root in the file system.
        I've just started looking into EFS, so maybe it's a bit of
        wishful thinking at this point, but I'm hoping we could create
        a project anywhere, and when we create it we pass the URI
        location from our own EFS. Then when asked for the children,
        we could return URI's for files from anywhere in the file
        system, or on other machines even. This would seem to hold the
        potential for working around the issues listed above. We'd
        basically have an EFS map from what we want under a project to
        the actual file system.



        So hopefully some of the experts can chime in here. Is my hope
        for EFS unrealistic? Is there a different approach we should
        look at?



        Thanks,
        Warren





        ------------------------------------------------------------------------
        *From:* cdt-dev-bounces@xxxxxxxxxxx
        [mailto:cdt-dev-bounces@xxxxxxxxxxx]
        <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of *ext
        Brunauer, Walter
        *Sent:* Friday, January 25, 2008 1:47 AM
        *To:* CDT General developers list.
        *Subject:* RE: [cdt-dev] First gotcha with add/exclude
        children of FFS



        Hi,



        after reading this rather long thread, I'll decided to throw
        in my personal opinion.



        I consider this approach to work against one of the most
        general Eclipse platform paradigms, where a project is defined
        to be a root directory and everything in it. IMO, the more
        workarounds are introduced against this paradigm, the more
        problems will be faced, and the more incompatibilities (or at
        least unawarenesses) created.



        Isn't the whole problem you try to solve here rather about
        what files should go into the build (and probably into the
        indexer) than what files are part of a project? I understand
        that CDT has no separation of what a project and what the
        build input is (well, IIRC one can exclude specific files from
        the build, but in general, the project content defines the
        build input, right?).



        In our commercial IDE, we separated this. This not only
        introduced much more powerful build setup capabilities in
        general, but especially enabled users to setup build artifacts
        with arbitrary contents (think of sources being compilable
        with different compiler flags for different build artifacts,
        build input exclusion patterns, build input from all over the
        workspace, multiple build artifacts within the same project,
        reusable build artifacts accross project boundaries, etc.,
        etc., etc.). BTW, we call this build system flexible managed
        build - because that's what it is:-)



        Of course, one can setup CDT projects as of today to exactly
        contain what is desired (with the help of linked resources).
        However, I find linked resources to be cumbersome and error
        prone, though many of our customers start out with them during
        evaluation as well, mostly because they are looking for a way
        to achieve what they did in the past with other non-Eclipse
        based IDEs, but sooner or later I know of lots of them
        realizing its much easier to use the features of our flexible
        build system instead, especially if projects need to be shared
        in a team. And now think of virtual file systems, the
        potential complexity of these, hidden assumptions,
        restrictions, etc. Sounds worse than linked resources to me.



        I guess, the point I am trying to make is: whatever you decide
        to do, make it understandable and transparent (and of course
        as simple as possible to use) for the user.



        As said, just my 2 cents,



        Walter




            ------------------------------------------------------------------------
            *From:* cdt-dev-bounces@xxxxxxxxxxx
            [mailto:cdt-dev-bounces@xxxxxxxxxxx]
            <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
            *Schaefer, Doug
            *Sent:* Donnerstag, 24. Jänner 2008 23:17
            *To:* CDT General developers list.
            *Subject:* RE: [cdt-dev] First gotcha with add/exclude
            children of FFS



            Jogging through the code, it really looks like the HIDDEN
            feature is what I was looking for. What I haven't found
            yet is UI to make a resource hidden or a navigator filter
            to show hidden resources (in case you want to bring them
            back). Is this planned?



            Assuming we have the core features available to link in
            and hide resource, I think we still have workflow issues
            that need to be addressed. I like Ken's idea of a file
            that controls the linking/hiding. We could have an
            import/export mechanism for setting up projects based on
            this file. A nice wizard for creating the file would also
            be good, similar to the way the way the export file system
            wizard works.



            Given this, we may be further along than we thought (BTW,
            the hidden stuff seems to have been added in 3.4 M4).



            Cheers,

            Doug



            ------------------------------------------------------------------------
            *From:* cdt-dev-bounces@xxxxxxxxxxx
            [mailto:cdt-dev-bounces@xxxxxxxxxxx]
            <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
            *Schaefer, Doug
            *Sent:* Thursday, January 24, 2008 2:51 PM
            *To:* CDT General developers list.
            *Subject:* RE: [cdt-dev] First gotcha with add/exclude
            children of FFS



            Thanks Michael/Szymon,



            Is there a bug describing the isHidden feature?


            Doug



            ------------------------------------------------------------------------
            *From:* cdt-dev-bounces@xxxxxxxxxxx
            [mailto:cdt-dev-bounces@xxxxxxxxxxx]
            <mailto:cdt-dev-bounces@xxxxxxxxxxx%5D> *On Behalf Of
            *Michael Valenta
            *Sent:* Thursday, January 24, 2008 11:37 AM
            *To:* cdt-dev@xxxxxxxxxxx
            *Subject:* RE: [cdt-dev] First gotcha with add/exclude
            children of FFS


            Doug et al,

            Szymon is really the person you want to bug on this but
            I'll throw in my 2 cents ;-) First, I have to say that a
            solution at the IResource level (e.g. using linked
            resources and the new hidden folder support) is infinitely
            better from a repository provider perspective than an EFS
            based solution. You may not get all the Team support you
            want at the IResource level but a solution at the EFS
            level would certainly break the existing CVS client since
            the CVS client isn't EFS aware to any great extent. For
            instance, if you tried to hide a folder using EFS, the CVS
            client would probably try and recreate it the next time
            you performed a Team>Update. It is also important to note
            that the Platform does not provide all the hooks required
            by repository providers and I know of at least one
            provider that has resorted to using it's own EFS
            implementation under projects that are mapped to that
            provider to get the capabilities it requires. I think it
            is important that tooling in Eclipse stick to using the
            IResource layer as the layer they operate on and let the
            repository provider (or any other tooling whose
            responsibility it is to manage the available files)
            control the underlying file system. If there are
            shortcomings or enhancements required then you should push
            to get them in at the IResource level.

            As for the current state of Team support for linked
            resources, I think the best approach is to enumerate some
            specific scenarios of how you see linked resources and
            exclusions working with descriptions of what you need to
            do today to get Team support and what you would like to
            see. It is also important to know if you expect all the
            links to come from the same repository (or at least
            repository type) or whether a project could contain
            content from different repository types (obviously the
            later would be more difficult to accommodate than the
            former).

            Hope this helps,
            Michael


        ------------------------------------------------------------------------

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev
------------------------------------------------------------------------

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev


Back to the top