Only adding a small detail, the Metacello expression is used to generate the project that is offered.
Also I see it as the Detached head status for projects that are loaded using Metacello. Maybe we should display the dirtiness in other way, but I think that is not a problem. It is normal that a project is marked dirty while used. Cheers On Tue, Aug 7, 2018 at 4:01 PM Guillermo Polito <guillermopol...@gmail.com> wrote: > Hi, > > I'll write down some of the reasons of the project's design, like that I > can afterwards copy paste it in the wiki :). > > First, this design did not came up from an egg. We worked on it for about > two months. And it is thought to be backwards compatible and manage lots of > metacello particularities. It may have things that are perfectible, sure, > so let's discuss it. > > One of the main problems we saw in metacello, and that Iceberg inherited, > was the "source subdirectory" thing. This source directory had to be > specified in the CLIENT, meaning that every time we clone a repository we > should know by heart the directory chose by its developer. Moreover, we > lack a standard way to do it, so everybody does as he feels (root > directory, src, source, repository, mc....). > > This has some bad consequences: > - once a repository is referenced by some other project, it is more > complicated to change its source directory. Imagine that tomorrow we set as > standard that all git repos should have the code in src. Then voyage should > change. And all its clients too. > - Making a typo in the code subdirectory means sometimes super ugly > errors from metacello that are difficult to debug and understand (e.g., > "Cannot resolve BaselineOfMetacello WTF") > > Moreover, there was another problem that people started stumbling on: the > fact that iceberg got confused sometimes thinking that an empty project was > in filetree (to keep backwards compatibility with projects without a > .properties). > > So we decided that for this release we wanted to revert a bit that > situation. Think object: let's put the meta-data used to interpret a > project's structure inside the project itself. > The idea is that: > > - each project should contain both a .project and a .properties file. The > first can contain arbitrary project meta-data (such as the source > directory). The second contains the cypress properties, which are needed to > correctly interpret the code inside the source directory. > - a project without a .project file is an old project and cannot be > interpreted, because we don't know the source directory > - a project without a .properties file is an old project and is by > default transformed in a project with a #filetree properties file > - an old project cloned from iceberg detects the missing .project file > and gives the user the opportunity to declare it (and then commit it > explicitly) > - an old project cloned and loaded from a Metacello expression defining a > source directory will honnor the source directory defined in the Metacello > expression (for backwards compatibility, and we have ~500 tests about this). > > # About defaults values / forcing the user to define a project > > First, notice that even when the repositories you load are just marked as > "dirty". > This is because in memory we add a project to your repository. > But you're not forced to commit it. > Actually, you can still load packages and baselines from that repository > without committing. > > This is in line with Iceberg's "explicitness". We try to not do any > destructive operation without asking the user first (that's why we have > several preview windows for pushing, pulling, checkout, merge..., and why > contrastingly with monticello we show the committed changes on the commit > window...). So, instead of transparently "adding the file" we have decided > to modify the project in memory and let the user the responsibility to > commit that file. > > If there's a drawback, is that the repository is marked as dirty. Which is > a bit noisy, yes, but still I think it's not so bad compared with the > previous drawbacks. > To solve this, we could have some default values, yes, and only mark it as > dirty if the project does not follow the default value. > This could work, but right now all projects use different names for their > source directories. > So the question is, what would be a good default? I'd like to use 'src' > since this is short, well known and less alien (all these in the sense that > we do not lose anything and we have a lot to gain by using it). > However, not much repositories use 'src' so it will still produce a lot of > "noise"... > > But still! Committing that file is a one-time operation. Once people fix > their repositories adding the project meta-data, you will not see them > dirty anymore. So we can see this as a transition noise too... > > Of course, new ideas are welcome. I'll let Pablo and Esteban add their > points of view on this too. > Guille > -- Pablo Tesone. teso...@gmail.com