On Mon, Feb 17, 2014 at 9:47 AM, Robert P. Goldman rpgoldman@sift.info wrote:
Attila Lendvai wrote:
so, let's say i have an already initialized source registry, and from my .sbclrc i want to add one more directory to it.
currently this is what i kludged together, but it stinks:
(asdf:initialize-source-registry (append '(:source-registry) (butlast asdf:*source-registry-parameter*) `((:directory ,(merge-pathnames "whatever" (user-homedir-pathname)))) '(:inherit-configuration)))
1- You seem to be repeating the :source-registry from the parameter (when not null), which cannot be good. Also, unless you specifically set it previously (which you probably did), the parameter needs not have :inherit-configuration (or its negation) last, and might be a string rather than a list.
2- In this context, you can use (:home "whatever") instead of this merge-pathnames form. You should get out of the habit of using merge-pathnames, the straightforward use of which is not portable to non-Unix pathnames (i.e. Windows, logical or URL pathnames). THOU SHALT NOT USE MERGE-PATHNAMES is a good style guide. Use instead UIOP:SUBPATHNAME, UIOP:MERGE-PATHNAMES*, UIOP:SUBPATHNAME*, etc.
or am i completely backwards with the cart, and i should just forget .sbclrc and use ~/.config/common-lisp/source-registry.conf.d/ for this?
That's an option: you could provide a file to copy and/or link into the source-registry.conf.d, and that would work for all implementations, not just SBCL.
the reason i prefer calling initialize-source-registry because then we can commit the right form into our env repo and the team members can have the exact same environment with less effort (just loading one repo-tracked file from .sbclrc).
For personal development, I'd recommend the file in source-registry.conf.d, and for deployment, I'd recommend a script that sets the CL_SOURCE_REGISTRY and/or has its own controlled parameter to initialize-source-registry.
Sorry, why is it that you put in the line with *source-registry-parameter* instead of simply adding the new directory?
BTW, for exactly your use case -- making it easy for people to put configurations in a revision control system, and have an entire team get their configuration that way, we added :HERE to the DSL for initializing the source registry.
Yes: if you symlink to a file that has a :here in it, *and* you didn't setf *resolve-symlinks* to nil, then pathnames in it will be relative to the true directory.
[I feel compelled to disclose that because we have so much legacy code in that form, I still use the variable asdf:*central-registry* for my own configuration purposes, with an in-house library that essentially duplicates the function of Faré's directory traversal.]
I still use the *central-directory* in many small tests, though I much prefer the *source-registry* for a well-managed source code.
Faré, why is it that *source-registry-parameter* is exported? It seems like a cache, and I don't understand why the user would need access to it.
You must be confusing *source-registry* and *source-registry-parameter*. The former is the cache after searching the various paths, and is private. The latter is the parameter provided to initialize-source-registry, and is exported specifically so that users may introspect what a another part of the program previous provided, and incrementally modify it. That's a feature that was requested by several users before I implemented it and exported the variable.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Austrian economics is the second law of thermodynamics to every other economist's perpetual motion machines. — Faré