On 04/08/2015 01:11 AM, Thierry Goubier
wrote:
Actually it is not quite CommandShell based ... the shell is tODE shell, where Smalltalk is the scripting language. The tODE git commands are implemented by parsing the command line args, resolving options and args to objects, and then calling a Smalltalk git command API that eventually does make shell calls (sometimes multiple git commands are folded into a single tODE git command ... thus making it possible to ultimately switch out the actual `git calls` and use something FFI-based, like libgit2... This approach also makes it quite feasible to write fairly complicated Smalltalk scripts that call the smalltalk git command api directly, bypassing the command line interface altogether ... In tODE I regularly drop off live objects to the file system using STON ... The tODE shell which allows you to navigate an object-based directory also allows you to mount the nodes from the file system and when traversing the file system recognizes STON files and presents objects to you instead of the dead files:) I haven't tried taking this approach all the way to source files ... but???? Dale |
In reply to this post by Thierry Goubier
On 04/08/2015 12:47 PM, Thierry Goubier wrote: > Hi Dale, > > Le 08/04/2015 19:30, Dale Henrichs a écrit : >> >> >> On 04/07/2015 10:24 PM, Thierry Goubier wrote: >>> Le 08/04/2015 02:05, Dale Henrichs a écrit : >>> I have threatened in the past to add an option to a repository that >>> would eliminate the need to store monticello meta data ... Damien is >>> working on "starting from scratch" on the new format, because the >>> current implementation supports 4-5 different FileTree formats. >>> Damien's >>> work could be leveraged to add an "optional Monticello meta data" >>> option >>> to FileTree and if your SCM (like git) gives you per method history >>> with >>> the proper tools you can leverage that information.. >>> >>> I would say this could be a reasonable possibility, in that you could >>> have two modes of compatibility: >>> >>> - Complete filetree compatibility for gitfiletree: the current >>> situation, with properties and version written to disk. >>> >>> - Partial filetree compatibility, where that metadata isn't written >>> and you rely on gitfiletree to recreate it to export as .mcz. >>> >>> Partial compatibility has two effects, which need to be considered. >>> When using github:// or bitbucket:// urls, filetree will be used and >>> your packages will end up having no version number (except .1?), no >>> author, no timestamps for methods, etc... And the second one is that, >>> if you clone a mcz inside the gitfiletree repository, the mcz ancestry >>> of versions and author timestamps on methods will be lost, which is >>> something you may not want. >> Yes for Metacello some modifications would need to be made because in a >> normal mcz universe Metacello will not load a package if the version is >> older or the same as the one in the image ... and following in the >> tradition of other Monticello tools the UUID is ignored:( .. I was >> working with a pure cypress implementation and have written the >> Metacello code to support these repos ... > > Ok. > > Yes, the version number handling is delicate; even the one used by > gitfiletree feels unsatisfying, even if it allows Metacello/Monticello > to work as usual. Metacello-Cypress package where I changed the load semantics to unconditionally load the package ... the snapshot comparison logic in play when loading packages is pretty good so it isn't necessarily a penalty to unconditionally compare snapshots when loading a package from FileTree ... > >> A better long term solution is to treat these as a CypressPackage or >> FileTreePackage which has some similarities to Monticello packages ... >> because faking out Monitcello version numbers and users is not much >> different than storing the metadata in FileTree ... > > Not sure I understand. I know where the Cypress/FileTree code handles > the lack of metadata when reading, that's all :) > >> But someone were to add those options to filetree, I think we could >> reduce the overall number of hacks:) > > Another solution I'd see possible is a reduced metadata format, where > just the version number of the current package is stored and retrieved > (i.e. a version file without ancestry). > > It would allow FileTree and Metacello to work exactly as usual. > > And, maybe, I could even unify the UUIDs? > > There are things in Monticello which needs a rethink to better adapt > to SCMs like git (or Fossil: it's so similar to git :) ) while keeping > more or less the same appearance: branches, hashes, tags and semantic > versionning. > > But I don't see yet how to handle that or to propose anything. > > I know that it would be great to reduce the cognitive distance between > MC version and history handling, and the same as seen from Metacello > baselines and configurations. Branches + baselines are doing a lot to > simplify, but MC stuff is unaware of that. And MC should delegate > merging to the underlying repository, as well. So this "extraneous" Monticello meta data is really related to the versioning aspects of the Monticello package ... aspects that really needed if you are using "git" (read "git" as svn, hg, git, fossil, etc.:) for version control .. in working with "git" the SHA of the commit for the repository as a whole is more important than any of the package meta data ... from the SHA one can see the commit comment for the "git" commit the SHA is related to a project not a package ... the project contents is represented by the BaselineOf ... in git one can reason about the collection of commits associated with a directory (package or class or method) and look at diffs at that level of granularity .... The primary point being that a "git" package can be stripped down to the basic list of definitions and the ancestry and version names and method properties can be dropped on the floor instead of fabricated ... What I imagine is a separate software stack for these "git" packages the commonality is at the snapshot/definition level and the core definitions can migrate between Monticello and "git" packages almost without change ... if one wanted to know the "history" of a package the Monticello package would answer back a representation of the ancestor graph, while the "git" package would answer back a representation of the commit history ... there would be different objects in the histories, since the meta data for extracting the useful bits varies considerably between the two package implementations, but from a tools perspective and arranging for a common tool-level api would be able to accommodate these two completely different packages as well as any number of package implementations that could wrap packages stored in the wide variety of SCMS floating around out there .... and those to come ... what the hell:) Well there's a year or so of work:) Dale |
Free forum by Nabble | Edit this page |