Fare,
Please consider the patch in the 'missing-definition' branch in
git://git.feelingofgreen.ru/asdf
regards, Samium Gromoff -- _deepfire-at-feelingofgreen.ru O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
2009/12/21 Samium Gromoff _deepfire@feelingofgreen.ru:
Fare,
Please consider the patch in the 'missing-definition' branch in
git://git.feelingofgreen.ru/asdf
Applied in my development repo, master branch: http://common-lisp.net/project/xcvb/git/asdf.git
Candidate for immediate release, if no one else disagrees.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] You can tell whether a man is clever by his answers. You can tell whether a man is wise by his questions. — Naguib Mahfouz
Faré wrote
2009/12/21 Samium Gromoff
Fare,
Please consider the patch in the 'missing-definition' branch in
git://git.feelingofgreen.ru/asdf
Applied in my development repo, master branch: http://common-lisp.net/project/xcvb/git/asdf.git
Candidate for immediate release, if no one else disagrees.
(The above link is pretty useless.)
What does the patch do?
-T.
2009/12/21 Tobias C. Rittweiler tcr@freebits.de:
Applied in my development repo, master branch: http://common-lisp.net/project/xcvb/git/asdf.git
Candidate for immediate release, if no one else disagrees.
(The above link is pretty useless.)
What does the patch do?
This link might be more useful to you: http://common-lisp.net/gitweb?p=projects/xcvb/asdf.git
The patch adds the detection and reporting of one error case.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] What a lot of trouble to prove in political economy that two and two make four; and if you succeed in doing so, people cry, 'It is so clear that it is boring.' Then they vote as if you had never proved anything at all. — Frederic Bastiat, "What Is Seen and What is Not Seen", 1850
From: "Tobias C. Rittweiler" tcr@freebits.de
Faré wrote
2009/12/21 Samium Gromoff
Fare,
Please consider the patch in the 'missing-definition' branch in
git://git.feelingofgreen.ru/asdf
Applied in my development repo, master branch: http://common-lisp.net/project/xcvb/git/asdf.git
Candidate for immediate release, if no one else disagrees.
(The above link is pretty useless.)
What does the patch do?
I'm sorry, obviously the burden was upon me to properly describe the proposed modification.
Basically, ASDF:FIND-SYSTEM assumed that SYSTEM-DEFINITION-PATHNAME returns a valid pathname. But, of course, the reality is that ASDF doesn't have any leverage upon what is returned by the functions in the ASDF:*SYSTEM-DEFINITION-SEARCH-FUNCTIONS* list.
The implication is that if any function in that list screws up, by returninig a bogus pathname, the subsequent call to LOAD will fail with a relatively cryptic FILE-ERROR.
The proposed modification intercedes before the precious information is lost, by checking for presence of the referenced file, and signalling a more structured condition in case it does not exist.
regards, Samium Gromoff -- _deepfire-at-feelingofgreen.ru O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
From: Samium Gromoff _deepfire@feelingofgreen.ru
From: "Tobias C. Rittweiler" tcr@freebits.de
Faré wrote
2009/12/21 Samium Gromoff
Fare,
Please consider the patch in the 'missing-definition' branch in
git://git.feelingofgreen.ru/asdf
Applied in my development repo, master branch: http://common-lisp.net/project/xcvb/git/asdf.git
Candidate for immediate release, if no one else disagrees.
(The above link is pretty useless.)
What does the patch do?
I'm sorry, obviously the burden was upon me to properly describe the proposed modification.
Basically, ASDF:FIND-SYSTEM assumed that SYSTEM-DEFINITION-PATHNAME returns a valid pathname. But, of course, the reality is that ASDF doesn't have any leverage upon what is returned by the functions in the ASDF:*SYSTEM-DEFINITION-SEARCH-FUNCTIONS* list.
The implication is that if any function in that list screws up, by returninig a bogus pathname, the subsequent call to LOAD will fail with a relatively cryptic FILE-ERROR.
The proposed modification intercedes before the precious information is lost, by checking for presence of the referenced file, and signalling a more structured condition in case it does not exist.
I guess I also should provide the patch inline:
commit 2ca055895fb18aadcdbb3ab29f696c9fa63c1b62 Author: Samium Gromoff _deepfire@feelingofgreen.ru Date: Mon Dec 21 15:07:37 2009 +0300
New condition, MISSING-DEFINITION, signalled when a sysdef locator fails.
Thanks to Nikodemus Siivola for coming up with a portable way to check for file existence. Dead symlinks defeat all things like CL-FAD:FILE-EXISTS-P.
diff --git a/asdf.lisp b/asdf.lisp index 4a85132..a1cc31c 100644 --- a/asdf.lisp +++ b/asdf.lisp @@ -109,6 +109,9 @@ #:*resolve-symlinks*
#:operation-error #:compile-failed #:compile-warned #:compile-error + #:error-name + #:error-pathname + #:missing-definition #:error-component #:error-operation #:system-definition-error #:missing-component @@ -421,6 +424,14 @@ and NIL NAME and TYPE components" (:report (lambda (c s) (apply #'format s (format-control c) (format-arguments c)))))
+(define-condition missing-definition (system-definition-error) + ((name :initarg :name :reader error-name) + (pathname :initarg :pathname :reader error-pathname)) + (:report (lambda (c s) + (format s "~@<Definition search function returned a wrong pathname ~A ~ + in search of a definition for system ~A.~@:>" + (error-pathname c) (error-name c))))) + (define-condition circular-dependency (system-definition-error) ((components :initarg :components :reader circular-dependency-components)))
@@ -746,14 +757,17 @@ to `~a` which is not a directory.~@:>" (< (car in-memory) (safe-file-write-date on-disk)))) (let ((package (make-temporary-package))) (unwind-protect - (let ((*package* package)) - (asdf-message - "~&~@<; ~@;loading system definition from ~A into ~A~@:>~%" - ;; FIXME: This wants to be (ENOUGH-NAMESTRING - ;; ON-DISK), but CMUCL barfs on that. - on-disk - *package*) - (load on-disk)) + (with-open-file (asd on-disk :if-does-not-exist nil) + (if asd + (let ((*package* package)) + (asdf-message + "~&~@<; ~@;loading system definition from ~A into ~A~@:>~%" + ;; FIXME: This wants to be (ENOUGH-NAMESTRING + ;; ON-DISK), but CMUCL barfs on that. + on-disk + *package*) + (load asd)) + (error 'missing-definition :name name :pathname on-disk))) (delete-package package)))) (let ((in-memory (system-registered-p name))) (if in-memory
regards, Samium Gromoff -- _deepfire-at-feelingofgreen.ru O< ascii ribbon campaign - stop html mail - www.asciiribbon.org