PATCH Error message for broken asd file links
Andreas Fuchs <[email protected]> Sat, 06 Oct 2007 14:37:51 +0200
| Newsgroups | gmane.lisp.cclan.general |
|---|---|
| Message-ID | <[email protected]> |
There's a strange interaction in ASDF on SBCL: if a user has defined a system by manually loading a system definition, for example a file containing this: (asdf:defsystem "foo") and has a broken link in one of the directories in the asdf:*central-registry*, he'll get an error like the one in http://paste.lisp.org/display/48735 when anything uses (asdf:find-system "foo"). This is caused by PROBE-FILE on SBCL returning the symlink's pathname for broken symlinks, and FILE-WRITE-DATE returning NIL for these broken symlinks. I don't consider this a bug (the spec states that the file must exist, not that OPEN of that file must not fail), so asdf needs to be fixed (-: IMO, as the system is already in memory, any error message from find-system is inappropriate. It may still cause confusion for users once they reload their lisp and get an error that the system isn't found, so the attached patch warns that it can't compare the found system defn to the one in memory. Maybe silent success would be a better option. If the maintainers think so, please correct. Cheers, -- Andreas Fuchs, (http://|im:asf@|mailto:asf@)boinkor.net, antifuchs ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ cclan-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cclan-list
warn-on-reloading-broken-symlink.patch
(text/plain, 927 B)
diff --git a/contrib/asdf/asdf.lisp b/contrib/asdf/asdf.lisp
index 4005dc8..fa695a0 100644
--- a/contrib/asdf/asdf.lisp
+++ b/contrib/asdf/asdf.lisp
@@ -376,9 +376,14 @@ and NIL NAME and TYPE components"
(let* ((name (coerce-name name))
(in-memory (gethash name *defined-systems*))
(on-disk (system-definition-pathname name)))
+ (when (and in-memory (null (file-write-date on-disk)))
+ (warn "~@<Can't check whether ~A is newer than the definition for ~A ~
+ that is already loaded.~@:>"
+ on-disk name))
(when (and on-disk
(or (not in-memory)
- (< (car in-memory) (file-write-date on-disk))))
+ (and (file-write-date on-disk)
+ (< (car in-memory) (file-write-date on-disk)))))
(let ((package (make-temporary-package)))
(unwind-protect
(let ((*package* package))