Hi Ben,

Le 03/02/2016 06:00, Ben Coman a écrit :>
I'm curious how the merge driver is implemented.  I think it was
mentioned that git calls-back to Pharo to do the processing. Is this
it something like this...

* How to make Git preserve specific files while merging
    
https://medium.com/@porteneuve/how-to-make-git-preserve-specific-files-while-merging-18c92343826b#.raovdvj9p

Probably, haven't read it.

* A few of my Git tricks, tips and workflows
   section under gitattribute(5)
   http://nuclearsquid.com/writings/git-tricks-tips-workflows/

Yes. You use git attributes to trigger the use of a pharo-implemented command line tool which does the merge for git.


Or... rather than the metadata being a specific file (e.g.
'metadata'), the file could change for each commit (e.g.
'metadata.nnn') where nnn is the revision number, so each commit
deletes the old metadata file and writes the new metadata file.
Monticello could know to use whichever single 'metadata.*' file
exists.  Would that avoid the problem of metadata merge conflict?

I've thought of that, and it seems hard to get right (which file goes first? how do you recognize a merge?). You have to remember that packages have hundreds, even thousands of versions so this would mean that number of files.

I went through all the different possible file formats, class-based, package-based, method-based, log metadata and the like, and I concluded that:

- the method based format is as good as any other.
- method based format allow for method-history queries on the git/vcs history (as well as class based / package based queries). - the tree structure on github or bitbucket is quite convenient (and browsable) to the point one could edit a package directly in it (I do when I need to do a quick fix). - anything that can compress a bit the metadata version is probably good to consider. version files can be huge.
- merge drivers really work and releave us from conflict resolution
- we need a merge tool written in Smalltalk/MC
- MC version numbering is a very bad idea
- MC almost never using properly UUIDs is a very bad behavior
- MC packages history can be considered broken in the general case
- it takes time to define, implement, test and really use a new format and tooling

Thierry


Reply via email to