[
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
|
Title: Re: [cdt-dev] First gotcha with add/exclude children of FFS
Copying the platform-core-dev folks too. Is there someone
from the Platform who could attend a meeting at EclipseCon about flexible file
systems. John A, will you be there? John is Mr. EFS and we can use his
guidance.
Thanks,
Doug.
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.
Im 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]
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]
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]
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]
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]
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]
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]
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]
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]
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]
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