On 11/7/16 7:36 AM, Esteban Lorenzano wrote: >> On 7 Nov 2016, at 11:28, Dale Henrichs <[hidden email]> wrote: >> >> >> >> On 11/7/16 4:52 AM, Esteban Lorenzano wrote: >>> btw this is pharo-dev discussion, redirecting there. >>> >>> Esteban >>> >>>> On 7 Nov 2016, at 08:50, Esteban Lorenzano <[hidden email]> wrote: >>>> >>>> We are developing Iceberg… and I know is not enough :) >>>> Which “unifying tools” are you referring ? >> The main unifying tool is a Metacello Project Browser (or something like the tODE project list). >> >> You have a nice tool with the CatalogBrowser (modulo BaselineOf support) ... but you know that already:) but once you load a Project into the image with the CatalogBrowser it sort of disappears ... >> >> There needs to be a way to see the _projects_ are loaded in the image ... right now you can see the package loaded into the image, and you can see the dirty packages, but the package is at too low a level >> >> From the project browser you should be able to commit a project --- which saves all of the dirty packages in the project --- in one commit for a git project --- all of the dirty packages written in one operation for mcz packages ... >> >> This project browser can provide the same set of services for an mcz project (ConfigurationOf) or a filetree project (BaselineOf): >> - save >> - load -- this is a bit more complicated to explain (I tried at the Metacello Dr. talk, but more discussion is needed) >> - diff -- project level diff over a collection of packages >> - commit log -- For ConfigurationOf, list the commit history of the Configuration. >> For a BaselineOf list the commit log for the git repository >> >> The workflow at the project level is not that different between Mcz and Filetree, so it is straightforward to work with … > this is what is provided by iceberg… it still needs some work, but this is precisely what is supposed to do :) > (and btw, this is why I disagree with Thierry some mails below). think that Iceberg will provide support for mcz repositories so I still think there is a need for this Metacello Project Browser ... the Metacello Project Browser would delegate to Iceberg for all of the services that it does provide. The Metacello Project Browser would not be a purely git/github tool ... Metacello Projects are repository format neutral so svn, hg, etc. would be equally supported from the Metacello Project Browser ... the standard set of operations: save/load/diff/log are needed for all different repository types ... I don't think it's a lot of work to implement the Metacello Project Browser tool and it is important that there be one place to look for and manage the projects loaded in image .... this is the "unifying" bit ... > >> The unification comes because you can use one metaphor (project) to work with both Mcz and Filetree ... the underlying implementation will ultimately... >> >> The next layer of unified tools is when you look at version history, for a method, you need to provide the ability to view the git commit history for the method (if stored in git) or the image history ... git commit hisotry can be provided at the project/package/class/method ... whereever possible the equivalent mcz/git service should be provided so that the two systems are on an even par … > also, this is supposed to be provided by iceberg. > >> The Monticello Browser and Iceberg GUI's don't go away, because it is often necessary to do work at the package level, but I think that putting focus on the project is the key ingredient to success for integrating git … > Iceberg is not package-oriented. It just show repositories/packages/classes/methods… this is a good way to do it and I do not thing anything is lost like this. > You need to take a second look at Iceberg :) Well I am specifically referring to this issue[1] and this comment by Guille[2] and Nico[3]. If Iceberg isn't going to load packages, then you need a tool that will load a package ... and as I say above this tool must work with ConfigurationOf and BaselineOf for svn, hg, etc. repositories ... [1] https://github.com/npasserini/iceberg/issues/184 [2] https://github.com/npasserini/iceberg/issues/184#issuecomment-254139549 [3] https://github.com/npasserini/iceberg/issues/184#issuecomment-257865003 > >> Since git repos are persistent on disk and will be shared ... it is important that there be a way for developers to easily access the git repos for projects that have been cloned locally but not yet loaded in the image itself ... I am really struggling with getting how important this point as this is the also a point that ties a Catalog Browser and Project Browser together > this is something to think… I do not get what catalog browser can do here (but yes, a way to browse local repositories needs to be provided). again in tODE, the Metacello Project Browser (aka project list) allows one to view projects that are cloned to local disk but not loaded in the current image ... note that I an using the term "project" not git repository ... the catalog browser defines "load specs" for projects ... but the developer is not able to control how the project gets loaded ... a better more flexible catalog browser would actually download spec objects into the Metacello Project Browser and allow developers to adjust the "load spec" for their environment, share this "load spec" with the other images in the "image cluster" and use the "load spec" to clone github projects to local disk and then load from the Metacello Project Browser ... > >> I've been using this approach for several years now and once you have the tools and can see at a glance what's "going on in your image" it is fun to work in a mixed environment ... all of this frustration that is bubbling on the list is largely due to not having these missing tools and underlying support --- I think … > I do not think we are so far from your vision. I think you did not get it Iceberg right… please, take a second look :) I would agree that not far is fair and I don't think that there is a ton of work to be done, but it is work that needs to be done ... so going the last little bit is necessary ... Nico is open to discussion, but I am not sure that all of the things that need to go into the Metacello Project Browser belong in Iceberg .... > now… is true that now everything you say is already done… but this is general orientation :) > > Esteban > > ps: all of this is *clearly* not pharo-users but pharo-dev discussion, let’s move there. > > oops now you tell me:) Dale |
In reply to this post by Thierry Goubier
[ ... ]
No my point was not that. My point is that it is important to pay attention and not to add more noise than necessary. Let us take the time and move alltogether. Stef
|
In reply to this post by Dale Henrichs-3
Hi Dale,
2016-11-07 12:03 GMT+01:00 Dale Henrichs <[hidden email]>:
Yes, this I understood. I do believe that what I suggested at one point (have the ability to compare versions with an 'isAncestorOf') would be very nice for that transition (work in mcz as well as on git with/without metadata).
For me, MC is also the code / diff model behind: will Cypress rewrites all that too?
As long as Cypress behaves as a MC repository and fits into the same API, I really don't see where is the difficulty. As we are saying now, adding a type of repository / emulating the MC overall API is no real difficulty in itself and isolates one from all the project management issues (because that means Metacello, ConfigurationOf and BaselineOf just keep working as usual). We need to get the MC repository API to evolve a bit, in part to handle the "save multiple packages, do one commit without using package dependencies." required now, and also to expose more of the repository organisation (remotes, branches) for the GUI above. And remove some of the things saying "I'm MC trying to do Metacello's job". What is a bit annoying, really, is this talk of rewriting everything where some of the pieces (the project browsing you're talkin about, for example) is already there in the image, just not exposed. I'm trying to code a little something for that... stay tuned for a screenshot soon. Thierry
|
2016-11-07 15:30 GMT+01:00 Thierry Goubier <[hidden email]>:
I would like to listen to your ideas about this topic, but I am not sure it is possible to achieve that compatibility. In fact we tried to do it for Iceberg and at some point we decided to abort it. On one side, trying to re-create monticello sequential file numbers in git is simply not possible, at least in a reliable way. On the other side, loading the graph of package versions and dependencies is really slow for big repositories (such as pharo-core), once we removed that requirement Iceberg got like 100x faster. |
2016-11-07 15:42 GMT+01:00 Nicolas Passerini <[hidden email]>:
I have an idea where such comparisons are done. I'd simply start by changing version numbers to the short commit ID, and see where it breaks ...
Yes, this is performance sensitive code. I spent a significant amount of time trying to optimize the smalltalk part of that in gitfiletree a few years ago... before I was shown that it could only scale to ~ 1000 commits (with a repository that had more than 8000 different versions for a package). Delegating everything to `git log` solved the issue. No code duplication! Overall, this is something that has worried me since the beginning of libgit. Libgit is low level and pushes some of the processing into Pharo, which is not the best tool to do high-speed processing of tree structures. And then, instead of designing the best solution to our problem, you end up trying to get the best design that doesn't hit a performance issue... Thierry |
2016-11-07 15:59 GMT+01:00 Thierry Goubier <[hidden email]>:
I started creating version names using the unix date (the number of seconds since 1970), which allows me to provide version numbers without complex calculations and without breaking Monticello. Numbers are not nice but we do not use them any way, it is just to comply with Monticello requirements.
I am using git log extensively, turns out to be a very powerful tool. Libgit provides a very similar tool called revwalk (https://libgit2.github.com/libgit2/#HEAD/group/revwalk). So in each case Pharo does not have to do those performance sensitive computing. The problem I found is that in order to recreate sequential numbers, you have to load all commits into the image. |
2016-11-07 16:13 GMT+01:00 Nicolas Passerini <[hidden email]>:
There is a human effect to them (I like to see the numbers increasing as I add new versions, of course!) but, well, since Dale said working with .1 would work, so it is :) Git short commit ID are only convenient for long-time git experts.
Yes! Problem solved.
Why? GitFileTree doesn't need to do that at all! Well, you know the code: it just ask git log to rebuild the parent / child relations for a package directory, and that is all... Then, like a mcz, the package isn't loaded into the image unless you select it in the GUI. So why did you need to load all the commits? Well, at the beginning, I was trying to read all the filetree metadata stored in the repository to build the versions as if it was mczs... and that was a really bad idea (slow parser for version files, hundred of files to scan, many files were even unreadable/broken by conflicts leftovers in the filetree repository). Thierry |
2016-11-07 16:26 GMT+01:00 Thierry Goubier <[hidden email]>:
Yes you are right, I expressed myself badly. You don't have to load "the commits". But, you still have to create an MCVersionInfo for each version of the package in the repository. In fact... you can create them, it will not kill you, but I think that this structure is not so useful, because it is always faster to use log/revwalk to ask about the relationship between two versions/commits. Moreover, we do not want to think about packages too much, we prefer to think in terms of a whole project, so the most interesting concept for us is the commit and not the version. Therefore, when I build a history (sometimes I do) I create a graph of commits and not a graph of versions. Finally, this leads to that, even in the case you want to load a specific version of a specific pacakge (which is not the normal case for Iceberg), you would specify a commitish (+ a package name) and not a version name. |
In reply to this post by EstebanLM
Hi,
On 07/11/16 02:50, Esteban Lorenzano wrote: [...] > What I mean is that we can help any transition, but at the end there is no way of having a “nice, coexisting” ecosystem: we will have one OR the other, or something that does not works at all, but we will not have seamlessly one AND the other (which does not means people using monticello will be forced to use git tools or vice-versa, just that you will need to chose one… right now many (many for real) of our problems come from the attempt of keeping our git support behaving as regular monticello… and that way of doing has a limit. A limit I think we already passed. [...] That's clarifying. Thanks a lot Esteban. I will try to keep myself on the Monticello boat a little longer, until the filetree and Iceberg stuff become clearer to me and I can see how to use them in a way that doesn't interrupt the workflow I have now (as happens with Monticello and Fossil). > Anyway, if you can list what you think we will need for the transition, I will be very glad to see what we can do :) Yes, Dale, your experience would be very appreciated. Cheers, Offray |
In reply to this post by Thierry Goubier
On 11/7/16 11:30 AM, Thierry Goubier
wrote:
II think that the work that you did with gitfiletree was very influential in making git a realistic option for the Pharo community and I think that the choices you made were excellent, but I think that for a transition it is important that git be presented as itself more fully and expose some of the features that set git apart (project/package/class/method diffs; multi-package commits; etc.) ... but I also feel that Monticello does not need to be diluted --- the existing Monticello tools should remain in place for the forseeable future ... Well Cypress is not that much of a rewrite ... Cypress definitions are closely based upon the Monticello definition model... snapshots and loading based on comparing the snapshot of the repository against the snapshot of the image are also closely based on Monticello ... The differences are in the fact that Cypress packages do not have ancestry, author names or version numbers: - the ancestry and author is recorded and managed by git (or svn or hg) - there is only one version of a package in a fieltree repo, so there is no need to sort packages by version number to fine the "latest version" So Cypress is more of a "take all of the really good parts of Monticello while dropping the bits that are handled better by git" than it is a complete _rewrite_ ... There are api differences between MC and Cypress ... MC has ancestry and package numbers while Cypress does not ... but I don;t think that these are major items ... I have yet to try to merge MC and Cypress in the same Metacello code base and I have yet to look closely at the requirements for Cypress Package Browser tool, but I know that the Cypress Package Browser will be much simpler ... But the goal for Metacello is that individual developers will be able to choose the repository/package model that best fits their work flow and portability needs ... yes I think this is the area where a Metallo Project Browser comes into play. The technology for committing the dirty packages in a a ConfigurationOf has been around for quite awhile, but a tool that unifies the "multi-package" commit for ConfigurationOf and BaselineOf hasn't popped out of the wood work ... Well I am annoyed as well .. I would say that perhaps we are in screaming agreement ... I've said that I don't think it's a lot of work to do the project-centric tool. but a project-centric tool that encompasses both ConfigurationOf and BaselineOf will expose the features that "are already there" Cool:) Dale |
In reply to this post by Nicolas Passerini
On 11/7/16 11:42 AM, Nicolas Passerini
wrote:
I agree that the git-oriented tools should not go ot of their may to conform to the MC model .. as you say it just does not fit ... but many of the standard operations that are performed can be performed on both git and mcz repositories without forcing both of the models to share identical implementations ... in image tools should distinguish between mcz and git projects and dispatch the standard operations to the appropriate repository --- and this si the spot where the handling changes based upon the repository model ... Dale |
In reply to this post by Dale Henrichs-3
Hi Dale,
2016-11-08 2:03 GMT+01:00 Dale Henrichs <[hidden email]>:
I'm having some issues with the scripting approach of Metacello, for that. Just manipulating a baseline in the Metacello registry (locking it) seems to be like writing a compiler code generation item: write a Metacello script ;) (Metacello>>#lock contains interesting code).
And here it is! I'm still fighting with the Metacello lock / unlock thing. If Pharo was more really modular in configurations and baselines, then I would see more things into the registry and I could group packages based on that (instead of having to prepare a ad-hoc classification for my my browser). Thierry
|
In reply to this post by stepharo
On 7 November 2016 at 14:28, stepharo <[hidden email]> wrote:
If you want to get somewhere with this story, you don't want to wait till everything will be ready. Transition will never start unless you force users to enter the minefield and let them clear the mines for you. Step by step. Many will blow themselves up, while some will manage to pass unhurt.. Because else, it will be always a minefield between you and the destination of your journey :)
Best regards,
Igor Stasenko. |
In reply to this post by Thierry Goubier
On 11/8/16 7:09 AM, Thierry Goubier
wrote:
I think I agree:) ... that is why i am talking about a tool ... developers shouldn't have to pass around workspaces to load and manipulate projects .. a project tool can partially automate the process, but I believe that there needs to be a "load spec" object that can be passed around and massaged by code instead of requiring a user to edit a Smalltalk workspace ... it's what I do in tODE ... the only times I have to write Smalltalk load scripts is when I work in Pharo :) I will repeat that I don't think Pharo should do exactly what I've done with tODE, but a Metacello Project Browser and some sort of "load spec" object that is shared amongst a cluster of images is something that needs to be seriously considered ... Yes this is headed in the right direction ... I am in Argentina this week so it isn't easy for me to do much collaboration, but I would love to help you with your lock problem next week ... For example ... you do not want to directly expose the Metacello registry as there are "hybrid projects" where a ConfigurationOf causes a BaselineOf to be loaded, so the BaselineOf needs to take precedence (I have code for resolving this) and I strongly suggest that the Project Browser not be built-into the Class Browser, but be a separate tool like the CataLogBrowser ... but this is just a suggestion --- a separate tool dedicated only to loaded Projects and unloaded Projects of interest allows one to get a very quick overview of what is in the project or not and when version skew pops up, one can easily see the affected projects ... embedding this kind of information in the code browser can make it hard to get the overview and if you choose to live with version skew can be annoying to ignore .... again these are just my thoughts .. Regardless I think you are definitely headed in the right direction and it isn't all that much work ... yet:) Dale |
In reply to this post by Igor Stasenko
On 11/8/16 11:04 PM, Igor Stasenko
wrote:
I think that at the early stages of the transition you have to support both approaches ... when the new tools are in place and stabilized then one can consider ... the transition has already started so this is not a case where you need to force folks to change, but a case where you need to support the folks who choose to change ... it can be relatively low cost to keep the old tools around for quite awhile ... I would think ... Dale |
On 10 November 2016 at 06:07, Dale Henrichs <[hidden email]> wrote:
Right, as i said: make a minefield and watch those who wanting to cross it. And big mistake then to shout: hey i will never ever step on it.. This is bad idea, since you discouraging people from doing what you need :)
Best regards,
Igor Stasenko. |
In reply to this post by Dale Henrichs-3
Hi Dale,
2016-11-10 6:04 GMT+01:00 Dale Henrichs <[hidden email]>:
Agreed. I would just like to find out which object can be used to act upon (can I call lock on a Metacello project spec... apparently not :))... I'm not too keen on adding another layer on top of it, first because I'm not that found of unneeded layers, second because it may mean a significant rewrite of the environment (have dozens of methods like MyLayer>>#load which is just a call to Metacello load) to get something that starts working. I'm not in a position to impose large scale changes in the Pharo ecosystem; it's the consortium role to take and impose such choices. I can only, like GitFileTree, inject something at a lower level that allow people to complement and experiment with...
I'm really willing to also make something helping to work with Baselines / Configurations because I think they present a significant complexity barrier to the proper use of Metacello features, and I don't see any path avoiding us to write those, given how complex it may be.
I'm of a different mind on this. Giving access to the Metacello registry explains well to me what is happening in the system; as long as the GUI accelerate a significant subset of the common operations, then I'll consider it good enough and have it working on a short time frame. Otherwise, you end up with projects like libgit / Iceberg, which are taking significantly longer to reach a better solution... Exposing the exponential time needed to reach the perfect solution. I also hate information duplication: why do I have to write a complex project spec where most (all?) of it has to be rewritten in a different form in a BaselineOf? Same goes for the forks you described the other day: why do I have to write in my project description the information I also have to add inside the repository (an upstream remote) to manage updating with the master project? For version skew, I must be a bit like git designers on that. It has to be an action (a git pull), and this action is required in git anyway (git pull upstream / git pull origin) .. I have no opinion on whether a GUI has to automatically check that everytime I open the project browser.
I need to keep it reasonable to be able to tackle it :) Thierry
|
On Thu, Nov 10, 2016 at 10:12 AM, Thierry Goubier <[hidden email]> wrote:
Now a BaselineOf is a ConfigurationOf but such things cannot be put in the Catalog because well, there is some incompatibility happening. Getting BaselineOf usable right away would be a small step but a great step. I find myself having to write a BaselineOf for the Git repo and a ConfigurationOfXXX usign the old scheme to be put in the Catalog and pointing to the BaselineOf. Could someone point to the reason why?
Already having the GTPlayground showing an inspector after loading is nice these days. Before it was more convoluted to understand what was going on. The inspector panes kind of rewrite things their way but still nice to have.
What is Iceberg trying to solve exactly? Ah, and I found why my Pharo5 image explodes when using GitFileTree on Windows: because of ProcessWrapper trying to use git which is in turn not in the path, and then boom.
There is too much stuff to understand to get anything used by a layman. There isn't so much to do with tools like npm.js etc: write your json thing for the package, use semver and this is all looking logical. So that one can get a junior dev handle it in a day. Try that with what we have. Phil
|
Free forum by Nabble | Edit this page |