How do I convert a FileTree project to Metadataless GitFileTree project?
Thierry, I think I tried the obvious: 1. open existing repository with gitfiletree:// 2. reload all packages from gitfiletree repo and remove old filetree:// repo from each package 3. edit .filetree and add `"Metadata" : "false"` but when I save a package I continue to get metadata created ... I even tried removing and adding the repo after editting the .filetree file .... I have a handful of additional random things that I will try, but I think it is also time to find out the proper technique:) I want to gain experience with GitFileTree; test out the Metacello Cypress mode; and perhaps honor the `"Metadata" : "false"` in the GemStone version of FileTree ... With a short time of usage, I would really like to be able to save all of the packages in a project (including the BaselineOf) in one commit ... I often have multi-package units of work that really should be committed together and of course if a method is moved across a package boundary, the independent commits don't allow git to recognize the move as a "rename" ... Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:) Thanks, Dale
Hi Dale, Le 28/06/2016 20:49, Dale Henrichs a écrit :
Thierry,
I think I tried the obvious:
1. open existing repository with gitfiletree:// 2. reload all packages from gitfiletree repo and remove old filetree:// repo from each package 3. edit .filetree and add `"Metadata" : "false"`
but when I save a package I continue to get metadata created ...
With that sequence, I'm sure the gitfiletree repository in memory has still kept the Metadata : true property, and so hasn't taken in account the on-disk change. Like FileTree, it only loads the repository properties on the very first access to that repository.
I even tried removing and adding the repo after editting the .filetree file ....
And that didn't work ? I suspected it would... unless the gitfiletree repository of step 1 above was not garbage collected.
I have a handful of additional random things that I will try, but I think it is also time to find out the proper technique:)
I haven't provided an API for the switch, really. And I don't know where to add that option inside the Monticello gui. What I did, in the few cases I did it, was to inspect the in-image MCFileTreeGitRepository and change the property in the inspector ;)
I want to gain experience with GitFileTree; test out the Metacello Cypress mode; and perhaps honor the `"Metadata" : "false"` in the GemStone version of FileTree ...
With a short time of usage, I would really like to be able to save all of the packages in a project (including the BaselineOf) in one commit ... I often have multi-package units of work that really should be committed together and of course if a method is moved across a package boundary, the independent commits don't allow git to recognize the move as a "rename" ...
We would need a specific API for that. At the moment what would work is to save the baselineOf with all the baseline packages as dependencies. Now, I'd like to be able to query the baseline to know which packages it describes, and save all of them in one go. Another possibility would be to add an option with a no-commit flag (write but do not commit, do not try to update the package version) and add a button to the window appearing after each written package version to do the commit, store temporarily all such "staged" packages info in the repository object, and provide a warning if one tries to resave a package before a commit...
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object? Thierry
Thanks,
Dale
Thierry, I don't think I can do it at all... I've deleted all of the packages, I've removed all traces of the repository and when I add the repository and inspect I get hasMetadata false... I then deleted the metadata directory from every package on disk and committed ... I then loaded the packages again from disk and made a change and when I commit the change version number increments and voila, I have a new monticello meta data directoy on disk free of charge ... and yes hasMetadata is still false ... I looked at the code and it seems that you are extracting the meta data from the git repo (once you have meta data you must have meta data forever?) It looks like it is not possible to switch to metadataless which is a shame ... all of the repos where I'd use this have monticello meta data in the history so you'll find it if you go looking for it:) additional comments in-lined below ... On 6/28/16 12:19 PM, Thierry Goubier wrote:
Hi Dale,
Le 28/06/2016 20:49, Dale Henrichs a écrit :
Thierry,
I think I tried the obvious:
1. open existing repository with gitfiletree:// 2. reload all packages from gitfiletree repo and remove old filetree:// repo from each package 3. edit .filetree and add `"Metadata" : "false"`
but when I save a package I continue to get metadata created ...
With that sequence, I'm sure the gitfiletree repository in memory has still kept the Metadata : true property, and so hasn't taken in account the on-disk change. Like FileTree, it only loads the repository properties on the very first access to that repository.
I even tried removing and adding the repo after editting the .filetree file ....
And that didn't work ? I suspected it would... unless the gitfiletree repository of step 1 above was not garbage collected.
I have a handful of additional random things that I will try, but I think it is also time to find out the proper technique:)
I haven't provided an API for the switch, really. And I don't know where to add that option inside the Monticello gui. a Smalltalk expression or setting woudl be better than nothing ... although it looks like the issue is deeper than simply changing the metadata state:(
What I did, in the few cases I did it, was to inspect the in-image MCFileTreeGitRepository and change the property in the inspector ;)
I want to gain experience with GitFileTree; test out the Metacello Cypress mode; and perhaps honor the `"Metadata" : "false"` in the GemStone version of FileTree ...
With a short time of usage, I would really like to be able to save all of the packages in a project (including the BaselineOf) in one commit ... I often have multi-package units of work that really should be committed together and of course if a method is moved across a package boundary, the independent commits don't allow git to recognize the move as a "rename" ...
We would need a specific API for that. yep..
At the moment what would work is to save the baselineOf with all the baseline packages as dependencies. unless there have been radical changes to the way dependencies work, this would defeat the purpose of having a baseline, i.e., all packages get loaded when the baseline itself is loaded ...
Now, I'd like to be able to query the baseline to know which packages it describes, and save all of them in one go. I have this feature implemented in tODE ... of course in tODE I have created a Metacello Project Browser that is used instead of a Monticello Package Browser ... tODE still have the ability to manipulate packages independent of the project, but the vast majority of the work is done by loading and saving projects instead of packages ...
The upshot is that I have code that supports all of the necessary functionality, but someone woule need to build a Metacello Project Browser in Pharo to make this funcitonality available to users --- and I don't have the bandwidth for that ...
Another possibility would be to add an option with a no-commit flag (write but do not commit, do not try to update the package version) and add a button to the window appearing after each written package version to do the commit, store temporarily all such "staged" packages info in the repository object, and provide a warning if one tries to resave a package before a commit...
A poor man's project browser would have some additional menu items for the BaselineOf package: save project and load project would probably be sufficient. The you would go around a write all of the dirty packages associated with the baseline ... in addition to the baseline itself ... and then do your git commit when completed ...
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object?
When working with a metadataless repository why would need to look up version info for the package in other repository? In the past, the Monticello Browser would only look in the repositories of the repository group for a package to look for package versions ... now it seems that all of the repositoris in the default repository group are scanned for versions of the package being committed. Dale
BTW, I loaded git file tree with the Catalog Browser, so I'm not necessarily using the latest code from Github: BaselineOfGitFileTree-ThierryGoubier.16 Dale On 6/28/16 12:55 PM, Dale Henrichs wrote:
Thierry,
I don't think I can do it at all... I've deleted all of the packages, I've removed all traces of the repository and when I add the repository and inspect I get hasMetadata false...
I then deleted the metadata directory from every package on disk and committed ... I then loaded the packages again from disk and made a change and when I commit the change version number increments and voila, I have a new monticello meta data directoy on disk free of charge ... and yes hasMetadata is still false ...
I looked at the code and it seems that you are extracting the meta data from the git repo (once you have meta data you must have meta data forever?)
It looks like it is not possible to switch to metadataless which is a shame ... all of the repos where I'd use this have monticello meta data in the history so you'll find it if you go looking for it:)
additional comments in-lined below ...
On 6/28/16 12:19 PM, Thierry Goubier wrote:
Hi Dale,
Le 28/06/2016 20:49, Dale Henrichs a écrit :
Thierry,
I think I tried the obvious:
1. open existing repository with gitfiletree:// 2. reload all packages from gitfiletree repo and remove old filetree:// repo from each package 3. edit .filetree and add `"Metadata" : "false"`
but when I save a package I continue to get metadata created ...
With that sequence, I'm sure the gitfiletree repository in memory has still kept the Metadata : true property, and so hasn't taken in account the on-disk change. Like FileTree, it only loads the repository properties on the very first access to that repository.
I even tried removing and adding the repo after editting the .filetree file ....
And that didn't work ? I suspected it would... unless the gitfiletree repository of step 1 above was not garbage collected.
I have a handful of additional random things that I will try, but I think it is also time to find out the proper technique:)
I haven't provided an API for the switch, really. And I don't know where to add that option inside the Monticello gui. a Smalltalk expression or setting woudl be better than nothing ... although it looks like the issue is deeper than simply changing the metadata state:(
What I did, in the few cases I did it, was to inspect the in-image MCFileTreeGitRepository and change the property in the inspector ;)
I want to gain experience with GitFileTree; test out the Metacello Cypress mode; and perhaps honor the `"Metadata" : "false"` in the GemStone version of FileTree ...
With a short time of usage, I would really like to be able to save all of the packages in a project (including the BaselineOf) in one commit ... I often have multi-package units of work that really should be committed together and of course if a method is moved across a package boundary, the independent commits don't allow git to recognize the move as a "rename" ...
We would need a specific API for that. yep..
At the moment what would work is to save the baselineOf with all the baseline packages as dependencies. unless there have been radical changes to the way dependencies work, this would defeat the purpose of having a baseline, i.e., all packages get loaded when the baseline itself is loaded ...
Now, I'd like to be able to query the baseline to know which packages it describes, and save all of them in one go. I have this feature implemented in tODE ... of course in tODE I have created a Metacello Project Browser that is used instead of a Monticello Package Browser ... tODE still have the ability to manipulate packages independent of the project, but the vast majority of the work is done by loading and saving projects instead of packages ...
The upshot is that I have code that supports all of the necessary functionality, but someone woule need to build a Metacello Project Browser in Pharo to make this funcitonality available to users --- and I don't have the bandwidth for that ...
Another possibility would be to add an option with a no-commit flag (write but do not commit, do not try to update the package version) and add a button to the window appearing after each written package version to do the commit, store temporarily all such "staged" packages info in the repository object, and provide a warning if one tries to resave a package before a commit...
A poor man's project browser would have some additional menu items for the BaselineOf package: save project and load project would probably be sufficient. The you would go around a write all of the dirty packages associated with the baseline ... in addition to the baseline itself ... and then do your git commit when completed ...
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object?
When working with a metadataless repository why would need to look up version info for the package in other repository?
In the past, the Monticello Browser would only look in the repositories of the repository group for a package to look for package versions ... now it seems that all of the repositoris in the default repository group are scanned for versions of the package being committed.
Dale
Dale, I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode. To see the changes on disk, you need to save a new version of your packages, that should be all. I just tried and that works. 1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version! Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Le 28/06/2016 21:55, Dale Henrichs a écrit :
Thierry,
I don't think I can do it at all... I've deleted all of the packages, I've removed all traces of the repository and when I add the repository and inspect I get hasMetadata false...
I then deleted the metadata directory from every package on disk and committed ... I then loaded the packages again from disk and made a change and when I commit the change version number increments and voila, I have a new monticello meta data directoy on disk free of charge ... and yes hasMetadata is still false ...
I looked at the code and it seems that you are extracting the meta data from the git repo (once you have meta data you must have meta data forever?)
It looks like it is not possible to switch to metadataless which is a shame ... all of the repos where I'd use this have monticello meta data in the history so you'll find it if you go looking for it:)
This is a vcs, so, anyway, the monticello meta data will stay in the history; you just have to checkout an old enough commit to get it :)
additional comments in-lined below ...
More comments below as well.
On 6/28/16 12:19 PM, Thierry Goubier wrote:
Hi Dale,
Le 28/06/2016 20:49, Dale Henrichs a écrit :
Thierry,
I think I tried the obvious:
1. open existing repository with gitfiletree:// 2. reload all packages from gitfiletree repo and remove old filetree:// repo from each package 3. edit .filetree and add `"Metadata" : "false"`
but when I save a package I continue to get metadata created ...
With that sequence, I'm sure the gitfiletree repository in memory has still kept the Metadata : true property, and so hasn't taken in account the on-disk change. Like FileTree, it only loads the repository properties on the very first access to that repository.
I even tried removing and adding the repo after editting the .filetree file ....
And that didn't work ? I suspected it would... unless the gitfiletree repository of step 1 above was not garbage collected.
I have a handful of additional random things that I will try, but I think it is also time to find out the proper technique:)
I haven't provided an API for the switch, really. And I don't know where to add that option inside the Monticello gui. a Smalltalk expression or setting woudl be better than nothing ... although it looks like the issue is deeper than simply changing the metadata state:(
No, this was just that.
What I did, in the few cases I did it, was to inspect the in-image MCFileTreeGitRepository and change the property in the inspector ;)
I want to gain experience with GitFileTree; test out the Metacello Cypress mode; and perhaps honor the `"Metadata" : "false"` in the GemStone version of FileTree ...
With a short time of usage, I would really like to be able to save all of the packages in a project (including the BaselineOf) in one commit ... I often have multi-package units of work that really should be committed together and of course if a method is moved across a package boundary, the independent commits don't allow git to recognize the move as a "rename" ...
We would need a specific API for that. yep..
At the moment what would work is to save the baselineOf with all the baseline packages as dependencies. unless there have been radical changes to the way dependencies work, this would defeat the purpose of having a baseline, i.e., all packages get loaded when the baseline itself is loaded ...
Yes, but this is the only point where a MC repository sees a bunch of packages to write to disk and not a single package.
Now, I'd like to be able to query the baseline to know which packages it describes, and save all of them in one go. I have this feature implemented in tODE ... of course in tODE I have created a Metacello Project Browser that is used instead of a Monticello Package Browser ... tODE still have the ability to manipulate packages independent of the project, but the vast majority of the work is done by loading and saving projects instead of packages ...
The upshot is that I have code that supports all of the necessary functionality, but someone woule need to build a Metacello Project Browser in Pharo to make this funcitonality available to users --- and I don't have the bandwidth for that ...
So, what we would need is a project concept, and packages being loaded via a baseline are added to that project, and, when saving, you manipulate that project ? Stef, I seem to remember you have planned for someone to work on Git integration. I think this would be about the right feature to add, combined with versionner...
Another possibility would be to add an option with a no-commit flag (write but do not commit, do not try to update the package version) and add a button to the window appearing after each written package version to do the commit, store temporarily all such "staged" packages info in the repository object, and provide a warning if one tries to resave a package before a commit...
A poor man's project browser would have some additional menu items for the BaselineOf package: save project and load project would probably be sufficient. The you would go around a write all of the dirty packages associated with the baseline ... in addition to the baseline itself ... and then do your git commit when completed ...
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object?
When working with a metadataless repository why would need to look up version info for the package in other repository?
In the past, the Monticello Browser would only look in the repositories of the repository group for a package to look for package versions ... now it seems that all of the repositoris in the default repository group are scanned for versions of the package being committed.
I'll have a look and see if I can cut that in the case of GitFileTree packages. Thierry
Dale
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Sorry, this does not work for me .... this is the first thing I tried and of course I looked very carefully to ensure that the packages were gone and the repository was not referenced anywhere...
I spent a fair amount of time reading the git filetree code to try to understand who is creating the monticello.meta directory and reading all of your code, I could not find any obvious culprits.... so I don't think that your code is directly responsible for the creation of the metadata dir... However, I just sprayed a bunch of self halts into the code in an attempt to find out who might be causing the directory to be created and I tripped across MCLazyVersionInfo who I think is the culprit for the "scanning the entire known universe" and _might_ be the culprit for "lazily" creating the "missing" monticello.meta directory - I haven't gotten that far yet. With regards to "scanning the entire known universe". It looks like any sender of #ancestors (which is not an unusual thing during save --- my current case or diff another case where I've seen the full scan) to an instance MCLazyVersionInfo can end up doing following: MCRepositoryGroup default in: [ :r | r versionWithInfo: self ifNone: [ ] ] which literally scans the entire repository universe ... This is part of the method #loadAncestorsAndStepChildren which is documented to: "This code scans all the repositories to find the exact package version and reload the relevant info." In my image I have 475 instances of MCLazyVersionInfo and 481 instances of MCWorkingCopy (without knowing for certain, I'll speculate that the 6 working copies without MCLazyVersionInfo are the 6 packages that are instances of MCGitFileTreeVersionInfo a subclass of MCLazyVersionInfo) ... The MCLazyVersionInfo caches the result of the full universe scan in a WeakArray ... so if there's an intervening gc (or two) between the time that one saves a package, the full repository scan will be re-run again ... and again ... and again .. So I think I now understand why I see so many scans of the pharo inbox and presumably all of the repos almost every time I save a package ... not very friendly... This scan was triggered when I tried to save one of the packages that I had just loaded and in this case the MCGitFileTreeVersionInfo triggered a scan because the repo instance variable was nil ... perhaps this is the difference between your run and mine ... in my case the repo was not set correctly and in your case it was? Hopefully someone will do something about this "lazy version info problem" personally I would gladly trade off some memory and disk consumption to avoid having to wait for the entire repository universe to be scanned every time I save a package ...perhaps there is a setting somewhere? I will continue trying to work through meta data directory creation problem and see if I can pinpoint the metadata dir creation culprit ... right now I know that the packages are loaded without creating the directory ... Dale
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object.
Le 28/06/2016 21:55, Dale Henrichs a écrit :
Thierry,
I don't think I can do it at all... I've deleted all of the packages, I've removed all traces of the repository and when I add the repository and inspect I get hasMetadata false...
I then deleted the metadata directory from every package on disk and committed ... I then loaded the packages again from disk and made a change and when I commit the change version number increments and voila, I have a new monticello meta data directoy on disk free of charge ... and yes hasMetadata is still false ...
I looked at the code and it seems that you are extracting the meta data from the git repo (once you have meta data you must have meta data forever?)
It looks like it is not possible to switch to metadataless which is a shame ... all of the repos where I'd use this have monticello meta data in the history so you'll find it if you go looking for it:)
This is a vcs, so, anyway, the monticello meta data will stay in the history; you just have to checkout an old enough commit to get it :)
additional comments in-lined below ...
More comments below as well.
On 6/28/16 12:19 PM, Thierry Goubier wrote:
Hi Dale,
At the moment what would work is to save the baselineOf with all the baseline packages as dependencies.
unless there have been radical changes to the way dependencies work, this would defeat the purpose of having a baseline, i.e., all packages get loaded when the baseline itself is loaded ...
Yes, but this is the only point where a MC repository sees a bunch of packages to write to disk and not a single package. I understand that ... but for writing out dirty packages in a Metacello project this is not a viable alternative...
Now, I'd like to be able to query the baseline to know which packages it describes, and save all of them in one go. I have this feature implemented in tODE ... of course in tODE I have created a Metacello Project Browser that is used instead of a Monticello Package Browser ... tODE still have the ability to manipulate packages independent of the project, but the vast majority of the work is done by loading and saving projects instead of packages ...
The upshot is that I have code that supports all of the necessary functionality, but someone woule need to build a Metacello Project Browser in Pharo to make this funcitonality available to users --- and I don't have the bandwidth for that ...
So, what we would need is a project concept, and packages being loaded via a baseline are added to that project, and, when saving, you manipulate that project ? Actually, Metacello has a registry of loaded projects (baselines and configurations) and using Metacello it is possible to determine which pacakges belong to which projects etc. so it is not necessary to "register packages with a project" ... the project registry in Metacello is enough ...
Stef, I seem to remember you have planned for someone to work on Git integration. I think this would be about the right feature to add, combined with versionner... Yep I agree ... and as I have often said, I've written code in tODE that uses Metacello to manage projects with a host of git support features as well ... and I would gladly offer advice and assistance to help someone adapt the code/lessons that I've larned with tODE to Pharo ... I have built a definition model upon which a number of the tools are based, but it is probably time for a next generation implementation ...
Another possibility would be to add an option with a no-commit flag (write but do not commit, do not try to update the package version) and add a button to the window appearing after each written package version to do the commit, store temporarily all such "staged" packages info in the repository object, and provide a warning if one tries to resave a package before a commit...
A poor man's project browser would have some additional menu items for the BaselineOf package: save project and load project would probably be sufficient. The you would go around a write all of the dirty packages associated with the baseline ... in addition to the baseline itself ... and then do your git commit when completed ...
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object?
When working with a metadataless repository why would need to look up version info for the package in other repository?
In the past, the Monticello Browser would only look in the repositories of the repository group for a package to look for package versions ... now it seems that all of the repositoris in the default repository group are scanned for versions of the package being committed.
I'll have a look and see if I can cut that in the case of GitFileTree packages.
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ... Dale
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry. Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy. (at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions). Thierry
On Wed, Jun 29, 2016 at 4:00 PM, Thierry Goubier <thierry.goubier@gmail.com> wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Would it be feasible to drop all those MB except keep the latest version of a package in-Image, i.e. the one required to determine the next version number of the package. ? cheers -ben
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions).
Thierry
Le 29/06/2016 12:57, Ben Coman a écrit :
On Wed, Jun 29, 2016 at 4:00 PM, Thierry Goubier <thierry.goubier@gmail.com> wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Would it be feasible to drop all those MB except keep the latest version of a package in-Image, i.e. the one required to determine the next version number of the package. ?
This is not considered enough for Monticello. If you are on a multi-people team with a smalltalkhub repository, keeping memory of myPackage.7 is not enough because your team members may push .8, .9, etc... before your save, and your save should be .10, not .8. So an access to the remote repository is necessary (and all of them; maybe you're working with multiple smalltalkhub repositories for that package). Of course, MC does not lock the remote repository while you do that, so the number it generates at the beginning (just before you get the window where you fill in the package version comment) is not guaranteed to be up to date if a team member saves a new version in the mean-time. Of course, MC does not forbid you to change by hand the version number. Thierry
cheers -ben
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions).
Thierry
On 6/29/16 5:30 AM, Thierry Goubier wrote:
Le 29/06/2016 12:57, Ben Coman a écrit :
On Wed, Jun 29, 2016 at 4:00 PM, Thierry Goubier <thierry.goubier@gmail.com> wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Would it be feasible to drop all those MB except keep the latest version of a package in-Image, i.e. the one required to determine the next version number of the package. ?
This is not considered enough for Monticello. If you are on a multi-people team with a smalltalkhub repository, keeping memory of myPackage.7 is not enough because your team members may push .8, .9, etc... before your save, and your save should be .10, not .8. So an access to the remote repository is necessary (and all of them; maybe you're working with multiple smalltalkhub repositories for that package). when you are doing the next version number calculation, you only need the first ancestor (the ancestor that is loaded in the image) ... to find whether or not team members have committed new versions involves scanning the packages in the repositories in the repository group and picking up the first version in the ancestry ...
it seems for a working copy that only the first ancestor is needed in the image ... the rest can be lazily loaded if one wants to see history ... The new versions committed by team members aren't even in the ancestry of the working copy ... I have not looked at the details of the caching that is used by the repository implementation with respect to versionInfo, but if my allInstances yesterday is any indication, it is/was always necessary to scan the repositories in the repository group to look for newer versions of the package but the version info for those scans wasn't necessarilyt cached anyway ...
Of course, MC does not lock the remote repository while you do that, so the number it generates at the beginning (just before you get the window where you fill in the package version comment) is not guaranteed to be up to date if a team member saves a new version in the mean-time.
Of course, MC does not forbid you to change by hand the version number.
Right ... so close counts in Monticello version numbers and horse shoes :) Dale
On 6/29/16 1:00 AM, Thierry Goubier wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy. That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions). In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement: "the only way to guarantee a unique version number for a package is to scan all available repositories" is absolutely true, but even then there is no guarantee that a duplicate package does not exist in a repository that is not connected to the repo ... However, Monticello is also tolerant of packages with the same name and in practice, the same author rarely if ever produces two different versions of a package with the same name (unless they do it on purpose) and of course two packages with the same name cannot coexist in a single mcz repository, so this condition is even more rare and not necessarily worth scanning all connected repos ....
On Thu, Jun 30, 2016 at 3:04 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 1:00 AM, Thierry Goubier wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy.
That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions).
In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement:
"the only way to guarantee a unique version number for a package is to scan all available repositories"
What if rather than being incremental the Monticello number what generated YYMMDDhhmmss? Should be reasonably compatible with that scope creep of version numbers into Monticello tools. Maybe the length is a bit ugly and by convention we can condense it a bit. Does that timestamp in the filename need to be human decodable? YY-->alpha character, e.g. 2016-->F (these sort after existing numeric numbers) MM-->hex e.g. Jan-->1 Oct-->A Dec-->C DD-->extended hex 1-->1, 16-->F, 30-->T hh-->extended hex e.g. 1-->1, 16-->F, 23-->M mm-->standard number ss-->divide by 2 then extended hex, e.g. 8-->4, 32-->F Today 2016-06-30 23:15:32 --> F6TM15F e.g. Collections-Native.BenComan.F6TM15F.mcz cheers -ben
On 6/29/16 3:44 PM, Ben Coman wrote:
On Thu, Jun 30, 2016 at 3:04 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 1:00 AM, Thierry Goubier wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy. That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions). In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement:
"the only way to guarantee a unique version number for a package is to scan all available repositories"
What if rather than being incremental the Monticello number what generated YYMMDDhhmmss? Should be reasonably compatible with that scope creep of version numbers into Monticello tools.
Maybe the length is a bit ugly and by convention we can condense it a bit. Does that timestamp in the filename need to be human decodable? YY-->alpha character, e.g. 2016-->F (these sort after existing numeric numbers) MM-->hex e.g. Jan-->1 Oct-->A Dec-->C DD-->extended hex 1-->1, 16-->F, 30-->T hh-->extended hex e.g. 1-->1, 16-->F, 23-->M mm-->standard number ss-->divide by 2 then extended hex, e.g. 8-->4, 32-->F
Today 2016-06-30 23:15:32 --> F6TM15F e.g. Collections-Native.BenComan.F6TM15F.mcz
Ben, the "unique version number" was in reference to the current scheme of incrementing the version number ... the truth is that I don't think it is necessary to "guarantee a unique version number" for Monticello purposes ... it is sufficient to take the latest version number or the package from the set of: the image and repositories in repository group... which is the technique that was used for years ... The bug in MCLazyVersionInfo is that it is scanning all repositories connected to the image, when it is sufficient to scan the repositories in the working copy repository group to get a reasonably unique version number ... Dale
On Thu, Jun 30, 2016 at 7:26 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 3:44 PM, Ben Coman wrote:
On Thu, Jun 30, 2016 at 3:04 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 1:00 AM, Thierry Goubier wrote:
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy.
That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions).
In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement:
"the only way to guarantee a unique version number for a package is to scan all available repositories"
What if rather than being incremental the Monticello number what generated YYMMDDhhmmss? Should be reasonably compatible with that scope creep of version numbers into Monticello tools.
Maybe the length is a bit ugly and by convention we can condense it a bit. Does that timestamp in the filename need to be human decodable? YY-->alpha character, e.g. 2016-->F (these sort after existing numeric numbers) MM-->hex e.g. Jan-->1 Oct-->A Dec-->C DD-->extended hex 1-->1, 16-->F, 30-->T hh-->extended hex e.g. 1-->1, 16-->F, 23-->M mm-->standard number ss-->divide by 2 then extended hex, e.g. 8-->4, 32-->F
Today 2016-06-30 23:15:32 --> F6TM15F e.g. Collections-Native.BenComan.F6TM15F.mcz
Ben,
the "unique version number" was in reference to the current scheme of incrementing the version number ... the truth is that I don't think it is necessary to "guarantee a unique version number" for Monticello purposes ... it is sufficient to take the latest version number or the package from the set of: the image and repositories in repository group... which is the technique that was used for years ...
The bug in MCLazyVersionInfo is that it is scanning all repositories connected to the image, when it is sufficient to scan the repositories in the working copy repository group to get a reasonably unique version number ...
Dale
If changing that is sufficient, then cool. My idea was just covering Law Of Unintended Consequence ;) cheers -ben
Am 30.06.2016 um 01:26 schrieb Dale Henrichs <dale.henrichs@gemtalksystems.com>:
On 6/29/16 3:44 PM, Ben Coman wrote: On Thu, Jun 30, 2016 at 3:04 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 1:00 AM, Thierry Goubier wrote: Le 29/06/2016 00:55, Dale Henrichs a écrit : ...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy. That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions). In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement:
"the only way to guarantee a unique version number for a package is to scan all available repositories"
What if rather than being incremental the Monticello number what generated YYMMDDhhmmss? Should be reasonably compatible with that scope creep of version numbers into Monticello tools.
Maybe the length is a bit ugly and by convention we can condense it a bit. Does that timestamp in the filename need to be human decodable? YY-->alpha character, e.g. 2016-->F (these sort after existing numeric numbers) MM-->hex e.g. Jan-->1 Oct-->A Dec-->C DD-->extended hex 1-->1, 16-->F, 30-->T hh-->extended hex e.g. 1-->1, 16-->F, 23-->M mm-->standard number ss-->divide by 2 then extended hex, e.g. 8-->4, 32-->F
Today 2016-06-30 23:15:32 --> F6TM15F e.g. Collections-Native.BenComan.F6TM15F.mcz
Ben,
the "unique version number" was in reference to the current scheme of incrementing the version number ... the truth is that I don't think it is necessary to "guarantee a unique version number" for Monticello purposes ... it is sufficient to take the latest version number or the package from the set of: the image and repositories in repository group... which is the technique that was used for years ...
The bug in MCLazyVersionInfo is that it is scanning all repositories connected to the image, when it is sufficient to scan the repositories in the working copy repository group to get a reasonably unique version number ...
Can this be fixed easily? thanks, Norbert
Dale
Hi Norbert, Le 30/06/2016 08:51, Norbert Hartl a écrit :
Am 30.06.2016 um 01:26 schrieb Dale Henrichs <dale.henrichs@gemtalksystems.com>:
On 6/29/16 3:44 PM, Ben Coman wrote: On Thu, Jun 30, 2016 at 3:04 AM, Dale Henrichs <dale.henrichs@gemtalksystems.com> wrote:
On 6/29/16 1:00 AM, Thierry Goubier wrote: Le 29/06/2016 00:55, Dale Henrichs a écrit : ...
I'm pretty certain the MCLazyVersionInfo is the real culprit here ... while reading the code I recognized that many of the basic patterns were exactly as I had remembered them from years ago ... however ... MCLazyVersionInfo this puppy with its "default behavior" to scan the universe is the real culprit ... I would think that at a minimum the repository or repository group would/could be know at the time that the MCLazyVersionInfo was created and a scan of just those repositories --- already associated with the project --- would not be nearly as bad as when we have now ...
The MCLazyVersionInfo thing is mine too; it was a solution to avoid keeping MBs of version info kept inside the image memory, with the cost of having to reload that information when you access the ancestry.
Now, the approach needs to be tuned to avoid spurious "query the world" searches, but, as you point out, I hasn't been too successfull yet. And one of the thing MC lack, is that link between a repository and a working copy. That's not true. Each working copy has repository group where either the developer has either explicitly declared the set of repositories that are associated with the working copy and/or the system has recorded the set of repositories from which the package has been loaded ... you should restrict the search to the repos in the repository group.
(at the same time, restricting version number determination to a subset of the repositories is against MC principles when numbering versions). In principle, yes, but from a practical point of view, the version number search was "always" restricted to the set of repositories in the repository group for the working copy ... keep in mind that putting version numbers in the package name is a _convention_. I don't think that Monticello ever defined a package name syntax ... Technically, Monticello is supposed to use the UUID to disambiguate between to packages with the same name, but as you and I know, this is not really enforced in the code --- Monticello evolved to rely on the version number for ordering package versions, but I don't think that was ever part of the design of Monticello ... if you look at the older implementations of the tools, there was no enformcement of any rationale package naming scheme ...
I agree that today when looking at the point to which Monticello usage has evolved that the statement:
"the only way to guarantee a unique version number for a package is to scan all available repositories"
What if rather than being incremental the Monticello number what generated YYMMDDhhmmss? Should be reasonably compatible with that scope creep of version numbers into Monticello tools.
Maybe the length is a bit ugly and by convention we can condense it a bit. Does that timestamp in the filename need to be human decodable? YY-->alpha character, e.g. 2016-->F (these sort after existing numeric numbers) MM-->hex e.g. Jan-->1 Oct-->A Dec-->C DD-->extended hex 1-->1, 16-->F, 30-->T hh-->extended hex e.g. 1-->1, 16-->F, 23-->M mm-->standard number ss-->divide by 2 then extended hex, e.g. 8-->4, 32-->F
Today 2016-06-30 23:15:32 --> F6TM15F e.g. Collections-Native.BenComan.F6TM15F.mcz
Ben,
the "unique version number" was in reference to the current scheme of incrementing the version number ... the truth is that I don't think it is necessary to "guarantee a unique version number" for Monticello purposes ... it is sufficient to take the latest version number or the package from the set of: the image and repositories in repository group... which is the technique that was used for years ...
The bug in MCLazyVersionInfo is that it is scanning all repositories connected to the image, when it is sufficient to scan the repositories in the working copy repository group to get a reasonably unique version number ...
Can this be fixed easily?
I suspect it is easy to fix... Just make the lazy version info aware of the repository group of the working copy. Thierry
thanks, Norbert
Dale
Dale, Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
Actually, Metacello has a registry of loaded projects (baselines and configurations) and using Metacello it is possible to determine which pacakges belong to which projects etc. so it is not necessary to "register packages with a project" ... the project registry in Metacello is enough ...
How do one adds a new package to a project in that registry? One can create new packages in a repository, and add them to the baseline (by editing the baseline method)? Do we need to rethink the Kommitter/Versionner stuff to provide a GUI to manipulate such things? Thierry
On 6/29/16 1:09 AM, Thierry Goubier wrote:
Dale,
Le 29/06/2016 00:55, Dale Henrichs a écrit :
...
Actually, Metacello has a registry of loaded projects (baselines and configurations) and using Metacello it is possible to determine which pacakges belong to which projects etc. so it is not necessary to "register packages with a project" ... the project registry in Metacello is enough ...
How do one adds a new package to a project in that registry? One can create new packages in a repository, and add them to the baseline (by editing the baseline method)? Yes, when you add a new package to the baseline the package becomes part of the project ... the exceptions come into play when you add a package to a baseline that is not aimed at the current platform :) For example when I'm working in GemStone I may add a package to the baseline for Pharo and actually create the initial version of the package in the GemStone image ... now as far as Metacello is concerned, the pharo package is not part of the GemStone baseline ... but this is not a common situation and in my case I manually commit the pharo package and don't really expect it to be "automatically managed" ...
Do we need to rethink the Kommitter/Versionner stuff to provide a GUI to manipulate such things? I am not (yet) familiar with Kommitter/Versionner, but I imagine that a Metacello Project Browser is needed... In tODE the "Metacello Project Browser" is called the `project list` and does more than just manage the packages and git repo for the project --- there is a one to one relationship between a git repo and a baseline that is very nice --- From the tODE "Metacello Project Browser" one can open a browser on all of the classes in the project, or all of the categories in the project, or all of the packages in the project, or all of the dirty packages in the project, or a changes browser that displays all of the changes to all of the packages in one place, or open a test browser on all of the tests in the project, etc.... So new tools and extensions to existing tools are probably called for ...
Dale
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Well I've found the culprit: MCFileTreeWriter>>addString:at:encodedTo: ensures that monticello.meta directory exists...
Of course as I reread your comment "no more monticello.meta/version" I will have to say that I've only been looking at whether or not the monticello.meta directory existed or not ... I equate "no monticello meta data" as no monticello.meta directory and you interpret it as "no monticallo version file" ... well I can live with that ... I swore that I saw version files being updated in some of my experiments ... but now that I know that I should only look at the monticello.meta/version file, I will try yet again ... Thanks for you patience and help ... Dale
Thierry, Okay ... it is "working" now ... I was also misled by the fact that you are continuing to fabricate Monticello version numbers which presumably cannot be relied upon in any way. Tugrik-Help-DaleHenrichs.11 will show up in each branch that includes the commit for "Tugrik-Help-DaleHenrichs.10", but the SHA and contents would be different for each one of the "Tugrik-Help-DaleHenrichs.11" , is that right? Perhaps using the short SHA in place of the "version number" would be safer and provide useful information in the version number slot? If I support "Metadata" : "false" in GemStone, I do not intend to fabricate a "realistic looking Monticello version number" ... but I will look into using the short SHA (when in a git repo) and perhaps fall back to cypress.1 for non-git repos... Anyway, I will now be able to move forward with my Metacello Cypress experiments and also try to understand how Metacello loads are affected by metadtaless, since you _are_ fabricating Monticello version numbers, my previous assumptions are not correct ... Thanks again! Dale On 6/28/16 4:11 PM, Dale Henrichs wrote:
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Well I've found the culprit: MCFileTreeWriter>>addString:at:encodedTo: ensures that monticello.meta directory exists...
Of course as I reread your comment "no more monticello.meta/version" I will have to say that I've only been looking at whether or not the monticello.meta directory existed or not ... I equate "no monticello meta data" as no monticello.meta directory and you interpret it as "no monticallo version file" ... well I can live with that ... I swore that I saw version files being updated in some of my experiments ... but now that I know that I should only look at the monticello.meta/version file, I will try yet again ...
Thanks for you patience and help ...
Dale
Hi Dale, Le 29/06/2016 01:50, Dale Henrichs a écrit :
Thierry,
Okay ... it is "working" now ... I was also misled by the fact that you are continuing to fabricate Monticello version numbers which presumably cannot be relied upon in any way.
Tugrik-Help-DaleHenrichs.11 will show up in each branch that includes the commit for "Tugrik-Help-DaleHenrichs.10", but the SHA and contents would be different for each one of the "Tugrik-Help-DaleHenrichs.11" , is that right?
Yes.
Perhaps using the short SHA in place of the "version number" would be safer and provide useful information in the version number slot?
Maybe. But then you'll have a bunch of stuff expecting version numbers that will stop working.
If I support "Metadata" : "false" in GemStone, I do not intend to fabricate a "realistic looking Monticello version number" ... but I will look into using the short SHA (when in a git repo) and perhaps fall back to cypress.1 for non-git repos...
Anyway, I will now be able to move forward with my Metacello Cypress experiments and also try to understand how Metacello loads are affected by metadtaless, since you _are_ fabricating Monticello version numbers, my previous assumptions are not correct ...
Please tell how it goes, especially the part with the short SHA, because I haven't tried that; I kept creating version numbers to just have gitfiletree behaving like filetree (apparently). Thierry
Thanks again!
Dale
On 6/28/16 4:11 PM, Dale Henrichs wrote:
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Well I've found the culprit: MCFileTreeWriter>>addString:at:encodedTo: ensures that monticello.meta directory exists...
Of course as I reread your comment "no more monticello.meta/version" I will have to say that I've only been looking at whether or not the monticello.meta directory existed or not ... I equate "no monticello meta data" as no monticello.meta directory and you interpret it as "no monticallo version file" ... well I can live with that ... I swore that I saw version files being updated in some of my experiments ... but now that I know that I should only look at the monticello.meta/version file, I will try yet again ...
Thanks for you patience and help ...
Dale
Hi Dale, Therry, I am working on a libgit-based git integration for Pharo and I am facing the same problem about version numbers. So maybe I can help you if you are working on that. I had the same idea as Dale, using short SHAs instead of correlative numbers, but I didn't have the time yet to got down that path. Therry, you said that
you'll have a bunch of stuff expecting version numbers that will stop working.
Do you already know which stuff will stop working? That would be realy
helpful.
Hi Nicolas, Le 29/06/2016 10:24, Nicolas Passerini a écrit :
Hi Dale, Therry, I am working on a libgit-based git integration for Pharo and I am facing the same problem about version numbers. So maybe I can help you if you are working on that.
How is the libgit integration going?
I had the same idea as Dale, using short SHAs instead of correlative numbers, but I didn't have the time yet to got down that path.
Ok.
Therry, you said that
you'll have a bunch of stuff expecting version numbers that will stop working.
Do you already know which stuff will stop working? That would be realy helpful.
All the Monticello GUI : track down version numbers to order stuff in the lists views everywhere. The Metacello / Gofer stuff (Configurations, Baselines) also use version numbers. One of the difficulty of switching will be the cohabitation of number-based systems (smalltalkhub) and SHA-based systems, especially when you do things like copying a version from a git repository to a smalltalkhub repository. That's why I suggested to change the ordering relation to a partial order based on the property A is an ancestor of B -> B is before A. Thierry
Thank you Thierry! I have more questions inline. On Wed, Jun 29, 2016 at 10:44 AM, Thierry Goubier <thierry.goubier@gmail.com
wrote:
All the Monticello GUI : track down version numbers to order stuff in the lists views everywhere.
So, if we built a new GUI which does not rely on those version numbers maybe we could get rid of that problem, what do you think?
The Metacello / Gofer stuff (Configurations, Baselines) also use version numbers.
Yes, I understand that they use version numbers, but do they require that version numbers are correlative?
One of the difficulty of switching will be the cohabitation of number-based systems (smalltalkhub) and SHA-based systems, especially when you do things like copying a version from a git repository to a smalltalkhub repository.
I think that currently it is not possible to copy a number-based package version from smalltalkhub to a metadata-less git repository using git file tree. I mean, you can but the new version will not have the same version number, right?
That's why I suggested to change the ordering relation to a partial order based on the property A is an ancestor of B -> B is before A.
I've lost you there. I agree that it is true that A is an ancestor of B -> B is before A, but the most common problem goes the other way arround, i.e. you want to know if A is ancestor of B and the implication then is not true: B is before A 'does not imply' B is ancestor of A. So I missed your point here.
Le 29/06/2016 15:30, Nicolas Passerini a écrit :
Thank you Thierry!
I have more questions inline.
On Wed, Jun 29, 2016 at 10:44 AM, Thierry Goubier <thierry.goubier@gmail.com <mailto:thierry.goubier@gmail.com>> wrote:
All the Monticello GUI : track down version numbers to order stuff in the lists views everywhere.
So, if we built a new GUI which does not rely on those version numbers maybe we could get rid of that problem, what do you think?
Yes, of course. But this still means we have to rebuild the GUI... which probably requires it anyway :)
The Metacello / Gofer stuff (Configurations, Baselines) also use version numbers.
Yes, I understand that they use version numbers, but do they require that version numbers are correlative?
They need those version numbers to indicate a total ordering of versions, to be able to: - determine what is the HEAD of the repository, - determine if a currently loaded version in the image should be replaced by a higher version numbered from the configuration or baseline. Now we could know what should be the API on there.
One of the difficulty of switching will be the cohabitation of number-based systems (smalltalkhub) and SHA-based systems, especially when you do things like copying a version from a git repository to a smalltalkhub repository.
I think that currently it is not possible to copy a number-based package version from smalltalkhub to a metadata-less git repository using git file tree. I mean, you can but the new version will not have the same version number, right?
In that way, you're right. The other way works. The other way is more common, as far as I can see. Metacello can only distribute from github and bitbucket; git repositories can happen in many other places, and gitfiletree handles most of them.
That's why I suggested to change the ordering relation to a partial order based on the property A is an ancestor of B -> B is before A.
I've lost you there. I agree that it is true that A is an ancestor of B -> B is before A, but the most common problem goes the other way arround, i.e. you want to know if A is ancestor of B and the implication then is not true: B is before A 'does not imply' B is ancestor of A. So I missed your point here.
Well, this is why I talked about a partial order. If two versions belonging to two different branches are compared, then you can't say anything about the order of the two versions. Thierry
On 6/29/16 6:30 AM, Nicolas Passerini wrote:
Thank you Thierry!
I have more questions inline.
On Wed, Jun 29, 2016 at 10:44 AM, Thierry Goubier <thierry.goubier@gmail.com <mailto:thierry.goubier@gmail.com>> wrote:
All the Monticello GUI : track down version numbers to order stuff in the lists views everywhere.
So, if we built a new GUI which does not rely on those version numbers maybe we could get rid of that problem, what do you think? The package browser for a git repository does not need to list all versions of the package ... listing a single package name (sans version number and author) is sufficient.
Of course this new tool needs to provide access to the commit log for the repo and then you need to be allowed to do diffs between git versions without respect to packages as well ... The tool should also provide the git commit log for the package directory (moral equivalent of package history) but then there should also be a way to see the commit history for a class and the methods ... These are things that I have already done for tODE...
The Metacello / Gofer stuff (Configurations, Baselines) also use version numbers.
Yes, I understand that they use version numbers, but do they require that version numbers are correlative?
in Metacello, package version numbers are only relevant in the context of a ConfigurationOf. Only the base package name (sans version number and author) is used in a BaselineOf ... technically ... right now ... Metacello does use the version number when determining whether or not to load a package, but I have a Cypress package extension for Metacello that ignores the package version when loading and this extension will become part of the standard Metacello release in support of metadataless repos .... Today a ConfigurationOf should not/cannot be used with a metadataless repository, so version numbers on packages is a moot point.
One of the difficulty of switching will be the cohabitation of number-based systems (smalltalkhub) and SHA-based systems, especially when you do things like copying a version from a git repository to a smalltalkhub repository.
I think that currently it is not possible to copy a number-based package version from smalltalkhub to a metadata-less git repository using git file tree. I mean, you can but the new version will not have the same version number, right?
Yes ...
That's why I suggested to change the ordering relation to a partial order based on the property A is an ancestor of B -> B is before A.
I've lost you there. I agree that it is true that A is an ancestor of B -> B is before A, but the most common problem goes the other way arround, i.e. you want to know if A is ancestor of B and the implication then is not true: B is before A 'does not imply' B is ancestor of A. So I missed your point here.
I think that ordering is a moot point for metadata-less repositories ... There is only one package version present in a checkout of a git repository and it think that it makes sense to turn to explicit git-based tools when dealing with git-based repositories ... I know that GitFileTree has been aimed at preserving the Monticello-ness of packages, but I think that approach is limiting --- because Monticello itself is limited --- When I look at a particular commit that I've done with from tODE I not only see the changes that I've made to package, but I also see the changes that I made along the way to other things I've stashed in the git repository like documentation and scripts so to really support the use of git from within the image, we have to start acknowledging that there are artifacts in the git repository that are not just Monticello packages and those artifacts are important to me as a developer to be able to view in the context of the changes that I've made to my code and non-code artifacts ... For me going metadataless does not imply that "we reconstruct monticello meta data from git" but that "we abandon the Monticello meta data completely" in favor or git-based tools ... Monticello packages with full metadata will not go away anytime soon, and I am not advocating the abandonment Monticello altogether. I am advocating that for developers choosing to use git that we build a set of tools that give direct access to git artifacts ... In tODE I have found that it is possible to provide all of the familiar tools for Monticello packages using a git flavor in parallel with the traditional Monticello metadata-full tools ... at this point in the evolution of Pharo I think that a hybrid approach is called for .. Dale
On 6/29/16 1:44 AM, Thierry Goubier wrote:
Hi Nicolas,
Le 29/06/2016 10:24, Nicolas Passerini a écrit :
Hi Dale, Therry, I am working on a libgit-based git integration for Pharo and I am facing the same problem about version numbers. So maybe I can help you if you are working on that.
How is the libgit integration going?
I had the same idea as Dale, using short SHAs instead of correlative numbers, but I didn't have the time yet to got down that path.
Ok.
Therry, you said that
you'll have a bunch of stuff expecting version numbers that will stop working.
Do you already know which stuff will stop working? That would be realy helpful.
All the Monticello GUI : track down version numbers to order stuff in the lists views everywhere.
The Metacello / Gofer stuff (Configurations, Baselines) also use version numbers.
One of the difficulty of switching will be the cohabitation of number-based systems (smalltalkhub) and SHA-based systems, especially when you do things like copying a version from a git repository to a smalltalkhub repository. My thoughts are that the we'd change the package name parsers to accept hex numbers as version numbers ... granted packages with hex version numbers could wreak havoc if they found their way into an mcz repository, but frankly a developer choosing to go metadata-less isn't likely to be using very many mcz repositories anyway and if a project is migrated to an mcz repository I would think it would be acceptable for the first version in the ancestry to be the Short SHA (allowing one to trace an ancestry manually in a git repo if desired) and subsequent version numbers could use decimal notation ...the version number is not involved in the maintaining monticello ancestry (using a version number is a convention as far as monticello is concerned)
That's why I suggested to change the ordering relation to a partial order based on the property A is an ancestor of B -> B is before A. Frankly for git packages, I have toyed with notion of eliminating the version number from the package name altogether. The version number in the name of a package was invented as a convention because otherwise there was no way to distinguish different Monticello packages from each other ... in FileTree we simply use the name of the package to name the directory and technically there is only ever one version of a package in a git repo anyway ... perhaps we should look at completely eliminating the version number from the package altogether?
With the cypress package extension, Metacello should be ignoring the version number anyway --- a package without a version number is "obviously metadata-less" ... Hmmm, it might even be easier to parse a package that doesn't even have a version number (or author name for that matter) ... If we are going to be making mods to tools it might be better to go this route ... What do you guys think? Dale
On 6/29/16 1:24 AM, Nicolas Passerini wrote:
Hi Dale, Therry, I am working on a libgit-based git integration for Pharo and I am facing the same problem about version numbers. So maybe I can help you if you are working on that. I had the same idea as Dale, using short SHAs instead of correlative numbers, but I didn't have the time yet to got down that path.
Therry, you said that
you'll have a bunch of stuff expecting version numbers that will stop working.
Do you already know which stuff will stop working? That would be realy helpful.
Nicolas, Yes. There are a number of different places in the image where the Monticello package name is parsed. GoferVersionReference>>parseName: is one such place and I know that Metacello has it's own parser for Monticello package names and there are probably a few others that are floating around in the Monticello Browser I don't know whether tools like Kommitter/Versionner are doing their own parsing or not. If I'm not mistaken you will probably find all the Monticello name parsers by looking for senders of #isDigit which should result in some fairly obvious suspects ... then we just need to figure out if we can create a parser that will accept a hex version number and go from there ... If we assume that the short SHA version numbers will only be used with Pharo5.0/6.0/GemStone (platforms for which new tools have been created), then we might be able to pull this off... Dale
Nicolas, Over the long July 4th weekend, I realized that the package-cache needs to be considered in the package naming scheme ... As currently implemented, the GitFileTree scheme of sequentially numbering version numbers based on the order of git commits is problematic when the package-cache is considered, since switching branches can lead to a package named XXX-dkh.12 being in the package-cache and there is no way to know whether it is the "right package" ... The short sha scheme would guarantee that the package-cache would not have improper collisions, so this is an argument in favor of going that route ... When reading a package from a metadataless repository using FileTree as opposed to GitFileTree, the package-cache is even more problematic since all packages are given the same author-version number: cypress-1 and you are virtually guaranteed to have package-cache problems The scheme that I favor: eliminating both author and version number from the name, suffers from the same package-cache problem ... Now I believe that I should be able to "solve the package-cache problem" in Metacello when using the Cypress extension, because Metacello is already aware of the package-cache when doing a fetch ... Unfortunately loads from the Monticello Browser and Gofer will still be using the package-cache unless those tools are made aware of metadataless repositories or the decisions about whether or not the package-cache is used is delegated to the repository instance itself --- probably the preferred solution --- and an approach that I also consider as I work through the issues for Metacello ... Anyway, the short-sha may actually be the best solution. I have found the short sha very useful when displaying the loaded version of a project in the project browser for tODE and echoing the short sha (sans author) in the package names, would provide a useful reminder of the version that was checked out when the package was loaded ... Dale On 06/29/2016 01:24 AM, Nicolas Passerini wrote:
Hi Dale, Therry, I am working on a libgit-based git integration for Pharo and I am facing the same problem about version numbers. So maybe I can help you if you are working on that. I had the same idea as Dale, using short SHAs instead of correlative numbers, but I didn't have the time yet to got down that path.
Therry, you said that
you'll have a bunch of stuff expecting version numbers that will stop working.
Do you already know which stuff will stop working? That would be realy helpful.
On 6/28/16 10:22 PM, Thierry Goubier wrote:
Hi Dale,
Le 29/06/2016 01:50, Dale Henrichs a écrit :
Thierry,
Okay ... it is "working" now ... I was also misled by the fact that you are continuing to fabricate Monticello version numbers which presumably cannot be relied upon in any way.
Tugrik-Help-DaleHenrichs.11 will show up in each branch that includes the commit for "Tugrik-Help-DaleHenrichs.10", but the SHA and contents would be different for each one of the "Tugrik-Help-DaleHenrichs.11" , is that right?
Yes.
Perhaps using the short SHA in place of the "version number" would be safer and provide useful information in the version number slot?
Maybe. But then you'll have a bunch of stuff expecting version numbers that will stop working. Ah yes, the nasty Monticello version number parsing that is sprinkled around the universe... But at the end of the day, these are tools issues and we shouldn't let tools limitations stand in the way of progress ...
With that said I certainly understand the issues ... The design of Metacello was almost completely driven by "tools issues" and of course FileTree was originally written to be completely compatible with the Monticello tools ... But by dropping monticello version data (actually making monticello version data optional) we are breaking the tools ... The fabricated version numbers that you are currently using do the job of not breaking the tools, but they break the semantics of Monticello and fool the developer in believing things that aren't true --- which is a bit dangerous in my opinion ... So at the end of the day, if we are really going to _support_ optional monticello version data, then we need to make a pass through the tools .... I built tODE from the ground up so that I could make the tools directly git aware ...
If I support "Metadata" : "false" in GemStone, I do not intend to fabricate a "realistic looking Monticello version number" ... but I will look into using the short SHA (when in a git repo) and perhaps fall back to cypress.1 for non-git repos...
Anyway, I will now be able to move forward with my Metacello Cypress experiments and also try to understand how Metacello loads are affected by metadtaless, since you _are_ fabricating Monticello version numbers, my previous assumptions are not correct ...
Please tell how it goes, especially the part with the short SHA, because I haven't tried that; I kept creating version numbers to just have gitfiletree behaving like filetree (apparently).
I understand the motivation ... the basic theory is that when using Baselines and git, the monticello version number is not relevant any more ... as you point out above, the SHA will be problematic with regards to the handful of places in the system that parse package names to extract a version number and solving that problem by itself may not be practical -- it remains to be seen ... The other half of this equation is that new tools should really be built to work with git-based repositories ... a Metacello Project Browser as the "main focus" would relieve the pressure to be completely compatible with the Monticello Browser and open the way for the creation of a Cypress Browser for working with git/filetree repos... Dale
Dale, you're right, the monticello.meta directory is kept, in part because I wasn't sure I could get rid of some of the information in some files in that directory (dependencies, initializers). Since those files don't usually create conflicts with git, it seemed Ok. Thierry Le 29/06/2016 01:11, Dale Henrichs a écrit :
On 6/28/16 2:16 PM, Thierry Goubier wrote:
Dale,
I'm sure it is possible. Wait, wait! If you have in your .filetree "Metadata" : "false" then this is fine and it has switched to the metadata-less mode.
To see the changes on disk, you need to save a new version of your packages, that should be all.
I just tried and that works.
1- remove the GitFileTree repository from your image 2- write the property "Metadata" : "false" in the .filetree on disk 3- re-add the GitFileTree repository (local) 4- modify then save one of the repository packages 5- look on disk: no more monticello.meta/version!
Note that I had no packages in the image linked to that repository at 1-, because I'm not sure the simple removal would have really removed the repository singleton object. Well I've found the culprit: MCFileTreeWriter>>addString:at:encodedTo: ensures that monticello.meta directory exists...
Of course as I reread your comment "no more monticello.meta/version" I will have to say that I've only been looking at whether or not the monticello.meta directory existed or not ... I equate "no monticello meta data" as no monticello.meta directory and you interpret it as "no monticallo version file" ... well I can live with that ... I swore that I saw version files being updated in some of my experiments ... but now that I know that I should only look at the monticello.meta/version file, I will try yet again ...
Yes
Thanks for you patience and help ...
Dale
On 6/29/16 1:05 AM, Thierry Goubier wrote:
Dale,
you're right, the monticello.meta directory is kept, in part because I wasn't sure I could get rid of some of the information in some files in that directory (dependencies, initializers).
Since those files don't usually create conflicts with git, it seemed Ok. Makes a ton of sense ... the other information on disk can be fabricated on demand, but I am also a fan of "doing the smallest amount needed" ....
I got confused because I _expected_ the directory to be gone .... Dale
On 6/28/16 12:19 PM, Thierry Goubier wrote:
Hi Dale,
Le 28/06/2016 20:49, Dale Henrichs a écrit :
Also I'm hoping that in metadataless mode I stop scanning the entire known repository universe for package versions that will not be found anywhere but in the repositories that I've explicitly associated with the the package itself:)
I don't think it happens there. MCGitFileTreeVersionInfo already tracks the repository it comes from, but I'm pretty sure that MC doesn't ask the version info for the new data. Maybe add a new type of WorkingCopy object?
Thierry, In Pharo5.0 it seems that the Pharo inbox and several other repositories get scanned whenever I do a package diff or do a package save from the Monticello Browser ... a few weeks ago, you responded to someone elses complaint about this annoying behavior and at this point (after reading through a bunch of code trying to get some understanding about why metadataless Git Filetree is not working for me) I believe that you were claiming responsibility for a problem that is not yours ... It is true that on every save, you do a refresh for the GitFileTree and it is true that this is slightly annoying (but understandable), but the truth is that I am seeing this annoying inbox and friends scanning when I don't have git file tree loaded in the image ... Soooo, my crack about "scanning the entire known universe" was aimed at the behavior I see without GitFileTree loaded in the image .... Dale
participants (5)
-
Ben Coman -
Dale Henrichs -
Nicolas Passerini -
Norbert Hartl -
Thierry Goubier