Hi,
I’m so not wanting to be part of this discussion, but here I am. Just because it was mentioned my name in a way I consider inaccurate.
This is textually my answer (even with the English errors): … “Anyway the answer will be no :) This was considered, and even the first implementation of tonel had it. Now, this was discarded because it does not works with git (or other file backends). It was not even me who complained first (as I said, I implemented it). It was Dale and other people used to work on git. Thing is, putting timestamps it will generate conflicts massively when there is no reason to it. So, we drop it… and we add support for the equivalent using the tool we use (iceberg gives you not just the author that modified last the method but all of them, along the history). I hope is an understandable reason?” And then in other mail of same thread I suggested an approach viable for squeak: "Now, what I’m sure is that if you are trying of using the 100% of Monticello and to use git just as another repository backend, it will not work (we already tried). It will consume far too much effort and you will finish beating the purpose of use git and a file-based-format, and you will be in the worst of two worlds :) We started like that, and we ended up implementing Iceberg to take benefit of the tools we are using. In the middle, there was/is gitfiletree. (I think I suggested you to look at it to adapt it for tonel and squeak). Gitfiletree uses OSProcess to call git as external tool and it makes all the operations needed. “ Now, what I was suggesting was a way to use tonel backed with OSProcess (which works in squeak) instead backing it with libgit2 as us. Since they need the blame support, they could use OSProcess and external git for it. Of course squeak (and any other dialect) are free to take tonel and adapt it to their needs (in fact, Mariano extended Tonel for VA specific things). And Pharo can read that format but it will ignore all extensions. Now, another problem is to WRITE: Pharo would write those packages in “pharo format” and that information would be lost. And in the case of VMMaker, if the idea is to be able to work on both sides, then Pharo needs to “honour” that format, it cannot just read it and ignore it later. So this creates an incompatibility that needs to be handled. Anyway, as you can see my answer was not “not under any circumstances”. Was “no, because is not convenient”. Esteban
|
In reply to this post by Levente Uzonyi
Yes, it is feasible like that, but not ideal. Not all of these packages are changed with every commit, so you would generate multiple consecutive MCVersions of a package with the unchanged contents in comparison to their immediate ancestor and a log message that does not pertain to the package at all. Since Squot has already solved this once, the fundamental question is how much effort someone wants to invest to backport features to Monticello and whether the effort is desired and warranted. I've heard multiple voices that do not want to go back to Monticello. And I'm sure there are at least as many on the list that do not want to let it go. ;-) Side note: Squot uses the Monticello model for packages (i. e., MCSnapshot and MCPatch and their contents, and the loader facilities), but it does not use MCVersion or MCRepository. In any case, you would need something to access the Git history and object database. In Pharo this is the libgit2 binding. In Squot it is FileSystem-Git, which could also be reused to write something for Monticello. But since it is coupled with FileSystem, the next discussion will be whether that should finally be adopted into Trunk, and if so in which form. Again, I've heard multiple proponents to make this move. After that, the next problem will be that the current MCRepository hierarchy couples file formats and ancestry storage. In the case of Monticello-in-another-VCS, these are orthogonal: you can have FileTree layouts in Git, you can have Tonel layouts in Git, you could have both at the same time, you could have both in a different VCS in the future... So instead of a "FileTree"-Repository and a "Tonel"-Repository, I think there should rather be a "Git"-Repository that picks the correct readers and writers dynamically to process the files and directories in each commit. To make the smell more tangible: I think neither MCFileTreeRepository (or whathever its name actually is) nor TonelRepository should be subclasses of MCFileBasedRepository (they are today), although it sounds crazy. Am Mo., 18. Feb. 2019 um 11:45 Uhr schrieb Levente Uzonyi <[hidden email]>: On Mon, 18 Feb 2019, Jakob Reschke wrote: |
In reply to this post by Jakob Reschke
On Mon, 18 Feb 2019 at 05:34, Jakob Reschke <[hidden email]> wrote:
The key things that Tonel addressed for me is: a. Windows FileTree often had problems with "path too long" due to long method names. These occur as semi-random failures when it works for some, and for others located in another path it fails. b. Windows was very slow for many small files cheers -ben |
> On 18.02.2019, at 14:48, Ben Coman <[hidden email]> wrote: > > > > On Mon, 18 Feb 2019 at 05:34, Jakob Reschke <[hidden email]> wrote: > > Personally, I am very fond of the use of Git instead of Monticello, but not convinced of Tonel so far. > > The key things that Tonel addressed for me is: > a. Windows FileTree often had problems with "path too long" due to long method names. These occur as semi-random failures when it works for some, and for others located in another path it fails. > b. Windows was very slow for many small files My fix would be: Don't write to the disk. Best regards -Tobias |
In reply to this post by Eliot Miranda-2
Hi Tudor, Retrieving author and timestamp from git history is doable. The question is whether it will be still possible to contribute thru MC or not. If it is metadataless MC, there's no point, it's unusable. I think that the minimal metadata we have to maintain is the last MC ancestor. This can be done by convention thru a .last_mc_ancestor file. Of course, there will be conflicts, but easy to (automatically) solve. That could also lie in commit message, but is somehow a bit more fragile... it would mean scanning thru ancestry for getting such information. By symmetry, merged agit sha should be in mc commit, either a specific file in mcz, or commit message. Also note that vmmaker history as proposed in opensmalltalk pr was broken (no respect of branch topology). Maybe retry with Squot? There is still a problem of synching commits of other packages (cog, various plugins ...), and if nobody is working on it, we are condemned to a mediocre solution. IMO, a broken history has not much interest. The question is whether it is possible to come to acceptable compromise? Le lun. 18 févr. 2019 à 07:33, Tudor Girba <[hidden email]> a écrit :
|
Am Mo., 18. Feb. 2019 um 15:12 Uhr schrieb Nicolas Cellier <[hidden email]>:
Note that the Tonel adapter for Squot is not finished yet. So you cannot try that "now". |
In reply to this post by Jakob Reschke
On Mon, 18 Feb 2019, Jakob Reschke wrote:
> Yes, it is feasible like that, but not ideal. Not all of these packages are changed with every commit, so you would generate multiple consecutive MCVersions of a package with the unchanged contents in > comparison to their immediate ancestor and a log message that does not pertain to the package at all. Well, that's just the question of writing the tool. It could easily detect that some commit doesn't modify package X, so there's no need to create a new version of it. > Since Squot has already solved this once, the fundamental question is how much effort someone wants to invest to backport features to Monticello and whether the effort is desired and warranted. I've That is indeed a question. It seemed to me that even if just temporarily, having .mcz versions would solve Eliot's problem. > heard multiple voices that do not want to go back to Monticello. And I'm sure there are at least as many on the list that do not want to let it go. ;-) Side note: Squot uses the Monticello model for > packages (i. e., MCSnapshot and MCPatch and their contents, and the loader facilities), but it does not use MCVersion or MCRepository. MC is far from perfect. It's a "quick hack". It doesn't scale well. And there were bad design decisions made. But it still works, and many toolchains rely on it, e.g. the Trunk or VMMaker. > > In any case, you would need something to access the Git history and object database. In Pharo this is the libgit2 binding. In Squot it is FileSystem-Git, which could also be reused to write something What I had in my mind was a lot simpler: watch a repository for new commits. When a new commit appears, fetch it, load the tonel code into an image and create the new .mczs. Store the new .mczs in a repository. Repeat. > for Monticello. But since it is coupled with FileSystem, the next discussion will be whether that should finally be adopted into Trunk, and if so in which form. Again, I've heard multiple proponents > to make this move. I'm fine with moving to FileSystem, provided it is ready for production. I see two possible ways to achieve that: 1. create a layer on top of FileSystem which works like FileDirectory, then release it and deprecate it. :) 2. add FileSystem to the Trunk and gradually migrate all uses of FileDirectory to it. > After that, the next problem will be that the current MCRepository hierarchy couples file formats and ancestry storage. In the case of Monticello-in-another-VCS, these are orthogonal: you can have > FileTree layouts in Git, you can have Tonel layouts in Git, you could have both at the same time, you could have both in a different VCS in the future... So instead of a "FileTree"-Repository and a > "Tonel"-Repository, I think there should rather be a "Git"-Repository that picks the correct readers and writers dynamically to process the files and directories in each commit. To make the smell more > tangible: I think neither MCFileTreeRepository (or whathever its name actually is) nor TonelRepository should be subclasses of MCFileBasedRepository (they are today), although it sounds crazy. I don't think it is a good idea to mix MC and git at all. IMO we only need tools to safely and reliably migrate from one to the other to start a change. Levente > > Am Mo., 18. Feb. 2019 um 11:45 Uhr schrieb Levente Uzonyi <[hidden email]>: > On Mon, 18 Feb 2019, Jakob Reschke wrote: > > > Am Mo., 18. Feb. 2019, 01:39 hat Levente Uzonyi <[hidden email]> geschrieben: > > > > Is it a must to use Metacello to load code in Tonel format? > > What does Metacello add to the mix? > > Can't we just map each git commit to an mcz? > > > > Levente > > > > > > Strictly speaking, Metacello is not required. But you would have to resolve the package dependencies yourself and gather them from external repositories, which is the main benefit of > Metacello. So I > > understand that Eliot wants it to work. > > > > There is no mcz to map to. If one were to create a new kind of MCRepository that maps commits to MCVersions, you would have 0..* MCVersions per commit because each commit may touch > multiple packages > > or none. Each commit describes a particular configuration of package versions, so one could generate an artificial MCConfiguration for each commit. Note that Squot / the Git Browser > already supports > > these scenarios for FileTree repositories, albeit without using Monticello for the version control. > > Looking at the repository in question[1], there seem to be multiple > packages stored in it[2]: BaselineOfScorch, Scorching, ScorchingDev, > ScorchingTests, ScorchingVMTests. My impression is that these could be > converted to individual mczs for each commit, which would mean that the > same code would be available as MC packages. Then you could load the code > with MC/Metacello/whatever from the .mczs. > > Am I missing something? > > Levente > > [1] https://github.com/clementbera/Scorch > [2] https://github.com/clementbera/Scorch/tree/master/repository > > > > > > > > |
In reply to this post by EstebanLM
Esteban, On Mon, Feb 18, 2019 at 4:06 AM Esteban Lorenzano <[hidden email]> wrote:
How can this be true? Since a method's time stamp changes only when it is modified it will only produce a change where a method is changed. I see no problem with this. I do see the possibility of a bug in Pharo when it was using Monticello and timestamps though. There was a time when you, Esteban, were contributing to VMMaker.oscog from Pharo and often there would be many changes where just the timestamp had changed. SO the problem seems to be not with timestamps but with mismanagement of them.
Who is we? I ask from a different perspective. I ask not too have Pharo use it but to allow Squeak to use it so that I can have timestamps for Squerask and still use Tonel. But still "“Anyway the answer will be no :)". So, your first statement is false. If things are correct there will *not* be massive generation of conflicts when there is no reason. Second, I am not asking you to change Tonel in Pharo. i am only asking you to allow Tonel to support timestamps in systems that want to use it.
It was still no. And my request was clear. I asked if you would allow Tonel to support timestamps, not that Pharo would use timestamps. This avoids forking Tonel, which I see as essential (it is essential that Tonel *not* fork) for Tonel to be a format that can serve as an interchange between Squeak and Pharo.
_,,,^..^,,,_ best, Eliot |
Hi Eliot, Am Mo., 18. Feb. 2019 um 18:34 Uhr schrieb Eliot Miranda <[hidden email]>:
When two people's changes to the same method are merged with Git (or on GitHub for that matter) there will be a conflict at the line that contains the timestamp. Even if the method source could be merged conflict-free. Moreover, none of the two original timestamps will be accurate for the merged version of the method, so in fact there *must* be a conflict. This is only alleviated by performing the merge in the IDE where a new timestamp could be generated for the merged method. For otherwise clean merges, this is probably unacceptable for people that just want to press the "merge" button on a pull request.
This is the reason why Pharo cannot just "not use" timestamps and yet support them. Every Pharo user on the team would eliminate the timestamps that the Squeak team members committed. Except if Pharo would allow to carry the existing timestamps around in the code model for Squeak, but it sounds like they are not willing to do that, are they?
Kind regards, Jakob PS. Note that I am not on pharo-dev and do not wish to subscribe for just one thread, so I had to omit them from CC. |
In reply to this post by Eliot Miranda-2
On Tue, 19 Feb 2019 at 01:34, Eliot Miranda <[hidden email]> wrote:
This is a case of the difference between theory and practice :)
When I heard of this timestamp conflict problem I began with the same belief to do some digging (and you know how I dig deep into things) with git-only command line experiments and ended up finding its really true. I'll try to remember some examples. cheers -ben |
In reply to this post by Eliot Miranda-2
Still that’s not the point.
Not having an agreement is very different that the behaviour you described about me (and that to justify your own actions). You presented my opposition as it would have been “just because” and I presented you my arguments. Even more, I *was* trying to find a solution. I can be right or wrong, but I’m not an idiot trying to be more than I am. Honestly, discussing with you many times feels like it is “my way or the highway”, and it’s hard to follow you :( Esteban
|
In reply to this post by Levente Uzonyi
> > In any case, you would need something to access the Git history and object database. In Pharo this is the libgit2 binding. In Squot it is FileSystem-Git, which could also be reused to write something
> > What I had in my mind was a lot simpler: watch a repository for new > commits. When a new commit appears, fetch it, load the tonel code into an > image and create the new .mczs. Store the new .mczs in a repository. > Repeat. > > > for Monticello. But since it is coupled with FileSystem, the next discussion will be whether that should finally be adopted into Trunk, and if so in which form. Again, I've heard multiple proponents > > to make this move. > > I'm fine with moving to FileSystem, provided it is ready for production. > I see two possible ways to achieve that: > 1. create a layer on top of FileSystem which works like FileDirectory, > then release it and deprecate it. :) That's backwards. FileDirectory is the smaller, faster, lower-level, more-utilitarian framework. FileSystem is a "boutique" domain and framework with powerful high-level capabilities, but suffers from a performance-killing design issue. So it'd probably make more sense for FileSystem use FileDirectory as its "primitive", and then we can simply keep FileDirectory around as-is for legacy apps. > 2. add FileSystem to the Trunk and gradually migrate all uses of > FileDirectory to it. This would be asking virtually every app to do a similar migration. All because of Squot? 3. Port Squot to use FileDirectory. 4. Don't port anything. Side-by-side existence. People who need Squot simply load Filesystem too. > > After that, the next problem will be that the current MCRepository hierarchy couples file formats and ancestry storage. In the case of Monticello-in-another-VCS, these are orthogonal: you can have > > FileTree layouts in Git, you can have Tonel layouts in Git, you could have both at the same time, you could have both in a different VCS in the future... So instead of a "FileTree"-Repository and a > > "Tonel"-Repository, I think there should rather be a "Git"-Repository that picks the correct readers and writers dynamically to process the files and directories in each commit. To make the smell more > > tangible: I think neither MCFileTreeRepository (or whathever its name actually is) nor TonelRepository should be subclasses of MCFileBasedRepository (they are today), although it sounds crazy. > > I don't think it is a good idea to mix MC and git at all. IMO we only > need tools to safely and reliably migrate from one to the other to start a > change. > > Levente > > > > > Am Mo., 18. Feb. 2019 um 11:45 Uhr schrieb Levente Uzonyi <[hidden email]>: > > On Mon, 18 Feb 2019, Jakob Reschke wrote: > > > > > Am Mo., 18. Feb. 2019, 01:39 hat Levente Uzonyi <[hidden email]> geschrieben: > > > > > > Is it a must to use Metacello to load code in Tonel format? > > > What does Metacello add to the mix? > > > Can't we just map each git commit to an mcz? > > > > > > Levente > > > > > > > > > Strictly speaking, Metacello is not required. But you would have to resolve the package dependencies yourself and gather them from external repositories, which is the main benefit of > > Metacello. So I > > > understand that Eliot wants it to work. > > > > > > There is no mcz to map to. If one were to create a new kind of MCRepository that maps commits to MCVersions, you would have 0..* MCVersions per commit because each commit may touch > > multiple packages > > > or none. Each commit describes a particular configuration of package versions, so one could generate an artificial MCConfiguration for each commit. Note that Squot / the Git Browser > > already supports > > > these scenarios for FileTree repositories, albeit without using Monticello for the version control. > > > > Looking at the repository in question[1], there seem to be multiple > > packages stored in it[2]: BaselineOfScorch, Scorching, ScorchingDev, > > ScorchingTests, ScorchingVMTests. My impression is that these could be > > converted to individual mczs for each commit, which would mean that the > > same code would be available as MC packages. Then you could load the code > > with MC/Metacello/whatever from the .mczs. > > > > Am I missing something? > > > > Levente > > > > [1] https://github.com/clementbera/Scorch > > [2] https://github.com/clementbera/Scorch/tree/master/repository > > > > > > > > > > > > > > |
In reply to this post by Eliot Miranda-2
Doru, On Sun, Feb 17, 2019 at 10:33 PM Tudor Girba <[hidden email]> wrote: Hi Eliot, All this is great work. But I cannot use it until I can also function in Squeak. I know you want me to move to Pharo, but I am not convinced that it is a safe place for me to land. I have voiced my concerns before (stability, moving away from support I need (e.g. Pharo dropping read./write file streams is the latest example). Let me simply restate that "t6he devil you know is better than the devil you don't", and that I know I am productive with VMMaker in Squeak, but I *do not* know that I can be productive in Pharo (in fact, I have lots of experience of the contrary). So I will not move to Pharo any time soon and so, until there is a solution to git/tonel/squeak integration I cannot join the unified repository, must as I would like to. I'm sorry for the frustration this causes other. I am radical in some things, but deeply conservative in others. And my ability to be productive is obviously foundational.
_,,,^..^,,,_ best, Eliot |
In reply to this post by Chris Muller-3
Hi Chris, On Mon, Feb 18, 2019 at 10:53 AM Chris Muller <[hidden email]> wrote: > > In any case, you would need something to access the Git history and object database. In Pharo this is the libgit2 binding. In Squot it is FileSystem-Git, which could also be reused to write something I disagree. FIleDirectory is an obsolete mess. FileSystem is a well designed, modern alternative, designed by a Squeaker (Colin). I would much rather see FileSystem as the foundation.
_,,,^..^,,,_ best, Eliot |
In reply to this post by EstebanLM
Fair enough.
I should not have step in this discussion. Esteban
|
On Mon, Feb 18, 2019 at 11:02 AM Esteban Lorenzano <[hidden email]> wrote:
Again, your response is to withdraw and not to engage. I am trying too be honest about my feelings and about the issues. Why don't you try and do the same? Why do you always try and withdraw? Why do you top post emotionally and run away from a real problem that affects both of us? I do not understand this pattern Esteban. I am not trying to hurt you.
_,,,^..^,,,_ best, Eliot |
In reply to this post by Chris Muller-3
Am Mo., 18. Feb. 2019 um 19:53 Uhr schrieb Chris Muller <[hidden email]>:
Part of the fun is that one of its components writes the serialized forms of objects (packages in FileTree format being the almost exclusively used "special" case) to a directory, not even knowing that it is in fact constructing a Git tree in the process. One can try to reimplement that abstraction and call it GitDirectory, or throw over this part of the architecture, of course. Any volunteers? ;-) On the other hand, this abstraction is one of the parts that will make it quite hard to integrate the Git history in the IDE (that is in the System Browser, for method versions, timestamps, ...) because you would have the cross this barrier to extract any history subsets efficiently. Esteban's mail sounds to me like Iceberg intentionally does not have this abstraction, but I didn't check. One argument in favor of the abstraction is that (in theory) you can swap out Git for something else without touching the file-in and file-out components (in practice, implementing the VCS adapter is the hardest part and even the Git Browser reaches down into the Git layers to accomplish some things, but so it at least deserves its name). |
In reply to this post by Eliot Miranda-2
Hi Doru, On Mon, Feb 18, 2019 at 8:14 PM Tudor Girba <[hidden email]> wrote: Hi Eliot, I am doing things on a case-by-case basis. Currently I use classNamed:, e.g. (Smalltalk classNamed: #FileSystem) ifNotNil: [:fileSystem| fileSystem disk delimiter asInteger] ifNil: [FileDirectory pathNameDelimiter asInteger] (Smalltalk classNamed: #CurrentReadOnlySourceFiles) ifNil: syncAction ifNotNil: [:crosf| crosf cacheDuring: syncAction] (Smalltalk classNamed: #Project) ifNotNil: [:project| Project uiProcess] "Squeak" ifNil: [UIManager default uiProcess] "Pharo" ((Smalltalk classNamed: #FillInTheBlankMorph) ifNotNil: "Squeak" [:fITBM| fITBM request: 'Input please!' initialAnswer: '' centerAt: ActiveHand cursorPoint inWorld: ActiveWorld onCancelReturn: nil acceptOnCR: true] ifNil: "Pharo; onCancelReturn: nil is the default here" [UIManager default request: 'Input please!' initialAnswer: '']). this at least allows Squeak to migrate to FileSystem without having to rewrite. Using the above I was already able to get most of VMMaker working in Pharo6. Things broke for Pharo7, which indicates that the vmMakerForSqueak:forPharo: approach has vulnerabilities.
_,,,^..^,,,_ best, Eliot |
Hi, sorry to jump in the middle of a discussion, and also sorry if this will be only noise (i don't know about VMMaker), but I had to fight with compatibility for long time, so, here is what I did and still do (I had to support and still supporting some business framework on VASmalltalk, VSESmalltalk and VisualWorks) What we did was to define a common layer of services, represented by the classes needing compatibility work, and replicate that common classes on every dialect . The end result was that my code was working against the same classes and same methods, but every dialect had the specific set of compatibility classes preloaded. So, if for example File is the chosen class name, the compatibility package will include File for the dialect(s) where it is missing, and the differences will be inside this class, but exposed using a common interface valid for all of the dialects. This way we have no if in the code for testing which dialect we are in, and all of the differences are kept on a single place we load on every different dialect. It was pretty easy to add VW when I started working in it after VSE and VA (just look at all of the compatibility classes/methods and replicate them for VW) , and I'll use same approach for moving to Pharo, when needed. It's also easy to increment; As we find a different case, we add methods or classes. Note that we have also compatibility for things like showing the user a directory dialog for choosing file, or yes no dialog , etch. it's a complex business framework.... I don't know if this can helps, probably it's too late... or is just not useful based on your taste or your point of view or the problems in hand. Hope not bothering the list too much. ( I'm noticing that lately the Smalltalk community gets upset easily ... long time passed since everything resolved in front of a beer or two ...) long life Smalltalk :) and thank you all for the work done (all of you...) giorgio BTW, I have to say that I really don't understand sometime the continuous jumping to different names also when it does'n seems needed (but probably it's my problem... I'm getting old and lazy ). Stay compatible seems for me a target, we are such a small community... but i'm surely wrong. On Wed, Feb 20, 2019 at 2:18 PM David T. Lewis <[hidden email]> wrote: On Wed, Feb 20, 2019 at 09:23:55AM +0100, Tudor Girba wrote: |
Free forum by Nabble | Edit this page |