On 10/7/11 Oct 7 -10:35 AM, Faré wrote:
On Fri, Oct 7, 2011 at 08:40, Zach Beane xach@xach.com wrote:
Faré fahree@gmail.com writes:
Do we want to (a) leave run-shell-command half-broken on various combination of OSes and implementations as soon as any argument needs quoting, do we want to (b) use heavy artillery to solve the problem correctly, or should we not just (c) delete this broken functionality that obviously nobody can or should be relying on for anything serious?
My preference goes to (c) delete the damn thing (replacing the function body by an error that suggests a good replacement), but only if it doesn't create a quagmire for users.
My preference is to leave it as-is.
Xach - would it be easy for you to test Quicklisp with a version of ASDF without run-shell-command (or fmakunbound'ing it early on) and see if anything breaks?
Of Quicklisp projects, it breaks CommonQT, elephant, gsll, umlisp, and cl-gene-searcher.
You win, thanks to superior data. Thanks, Zach!
My plan: 1- declare the interface deprecated for now 2- work with the authors of said software to migrate off of it. 3- when no one is known to use it anymore, make it issue a warning at compile and/or runtime. 4- after a few versions, make it issue an error
I don't think that's a full solution, per my somewhat garbled email of last night. The problem is that we will end up with
(defsystem foo (:defsystem-depends-on xcvb-run-program) ... system definition ... )
The problem is that unlike before, we can't have nice
(defmethod PERFORM ((op my-op) (c my-component-class)) (run-shell-program ....))
Instead, we end up with the much nastier
(defmethod PERFORM ((op my-op) (c my-component-class)) (funcall (intern (symbol-name #:fare-run-shell-program) :xcvb-runner ....)))
I suppose if there is a one function-sized API, this won't be too bad, because we can just define
(defun run-shell-command (&rest args) (apply (intern (symbol-name #:fare-run-shell-program) :xcvb-runner) ....))
once and then writing the PERFORM methods will be OK....
:DEFSYSTEM-DEPENDS-ON doesn't interact very gracefully with the package system....
Cheers, r