Hello Chris! So good to hear about your progress on the revamped registry, kudos! Some comments following: On Jul 28, 2007, at 5:28 PM, Chris Pickel wrote:
So, here's the deal:
As (a couple of) you are aware, my project is to build a more advanced registry; to keep more state for installed ports and in a more structured fashion.
I have written a pretty much feature-complete sqlite3-based replacement for receipts and the filemap at this point. There is a C library that's compiled as a static lib (cregistry), which is later compiled into a Tcl module (registry2.0). There's a test case; errors are thrown in such a way that they work with try/catch.
I've also written a script to up-convert a user's existing receipts/ filemap into the new format. It's reasonably fast (and was not so before I got smarter with sqlite transactions).
How would that script be run? Each user manually at their own discretion? Or through some upgrade glue internal to MacPorts? I would very much prefer the latter approach, something like my "upgrade" target in base/Makefile.in (later on I'll remove all that code once we consider enough time has gone by to upgrade most of our user base to the macports namespace, in the mean time I'm sure we can share that target for other upgrade purposes).
The Tcl code that makes *use* of the registry has not yet been modified. So, I could commit registry2 now without screwing anything up
Not sure what you mean by this. What hasn't been modified and where? You mean that if you commit registry2.0 now, trunk would still be using the old registry & filemap until you "hook up" your code?
but I have two concerns:
* Doing so would commit my local history (12 commits, I think). CIA has the annoying habit of squaring the number of commit messages sent out in sequence, and I don't want to flood #macports with 144 commit messages.
I would not worry one bit about this, message duplication is due to a misconfiguration on our side and we can always silence the CIA bot in the channel. Just let me know when you plan on committing and I'll take care of it.
* I don't feel there's a need to include it in 1.5.1. If someone wanted to go ahead and tag 1.5.1, that'd be great :)
I'm working my way toward 1.5.1, hopefully soonish now (targeting mid next week). But, likewise, nothing to worry about here, I'm working with the sweet svnmerge.py on the 1.5 branch so I can cherry pick what we merge in from turnk and what stays out. Also, the release tags are created off release branches, not trunk, so that's more leeway there.
I'm still working on three things before I move on to the dependency graph:
* I'm probably leaking memory like crazy. I'm currently trying to clamp down on this with `gdb` and `leaks`, but I've no previous experience with the latter. If anyone has suggestions in this category, I'd be happy to hear them (Paul mentioned TCL_MEM_DEBUG).
* Improving its speed, particularly as pertains to Eugene's usage of cregistry.
* Documentation. cregistry is largely documented, in the doxygen style, but I'm not sure of the best way to document registry2.0. I could do a manpage (but what to call it?), or more doxygen-style (but tools would confuse the C parameters of the actual functions with the Tcl parameters I'd document).
Registry2.0 should not have a man page for itself, those are mostly for higher level stuff like the port(1) utility and Portfile writing facilities. Our code should all be documented in a doxygen-like fashion, however, so that one day we can build up an easily accessible API reference. Kudos for getting the ball rolling with cregistry! I'd encourage you to do the same for registry2.0 and later on figure out what tool we use to produce the docs if doxygen can't handle the tcl format, what matters the most is that the documentation is already there in place. The new guide is also a great place to put this type of stuff in, but I'm figuring what we should really do is include this automagically generated API reference into the guide directly off the output of doxygen or a similar tool. So, in short, feel free to commit once you feel comfortable with your code for others to look at it, don't worry about anything else. Really looking forward to see this stuff go live!
Chris
Regards,... -jmpp