On Mon, Aug 11, 2014 at 10:19 AM, Robert P. Goldman rpgoldman@sift.info wrote:
Thanks to both of you for your work on this patch.
I'm going to hold off on applying any patches, though, until there's a test case.
Dave, I understand that it might be hard to wrap your head around the test script code, so let's start by brainstorming what the test should do, rather than digging in and getting confused with the details of implementation.
I believe what is wanted is a test where we make an image with some system preloaded, try to mark it as immutable, and then check to see if it's reloaded. Is that correct?
I think you'd want to (1) compile a bundle from one slave process, or in the master process then delete suitable packages and clear-defined-systems. (2) in another slave process (or master process, after clean up), load the bundle and call register-immutable-system, then ((re)configure asdf if needed) and try to load the system, and see that the system loading was a success yet that the .asd file wasn't loaded (e.g. the .asd can contain a defpackage or defparameter that you check didn't happen)
Considering that it can be done without a slave process if only you clean up, maybe the best place for that isn't the test-program.script, but test-bundle.script.
As for what the patch itself should do, I believe the right thing to do would be for register-immutable-system to use (register-system (make-preloaded-system ...)). Note that you might want to preserve the version information for your system, if already registered, and/or if a keyword is given to register-immutable-system (with e.g. the default t meaning check for an already defined system). Finally, you might also want to patch clear-defined-systems so it doesn't undefine the immutable-systems.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org No woman ever falls in love with a man unless she has a better opinion of him than he deserves. — Edgar Watson Howe