[asdf-devel] Guard against (push "/foo/bar" asdf:*central-registry*)

Gary King gwking at metabang.com
Fri Jul 10 13:20:53 UTC 2009


New (more complicate) code:

(defun directory-pathname-p (pathname)
   (and (member (pathname-name pathname) (list nil :unspecific))
        (member (pathname-type pathname) (list nil :unspecific))))

(defun pathname-name+type (pathname)
   "Returns a new pathname consisting of only the name and type from
a non-wild pathname."
   (make-pathname :name (pathname-name pathname)
                  :type (pathname-type pathname)))

(defun ensure-directory-pathname (pathname)
   (if (directory-pathname-p pathname)
       pathname
       (make-pathname
        :directory `(,@(pathname-directory pathname)
		      ,(namestring (pathname-name+type pathname))))))

(defun sysdef-central-registry-search (system)
   (let ((name (coerce-name system))
	(to-remove nil)
	(to-replace nil))
     (block nil
       (unwind-protect
	   (dolist (dir *central-registry*)
	     (let ((defaults (eval dir)))
	       (cond ((directory-pathname-p defaults)
		      (let ((file (and defaults
				       (make-pathname
					:defaults defaults :version :newest
					:name name :type "asd" :case :local))))
			(if (and file (probe-file file))
			    (return file))))
		     (t
		      (restart-case
			  (let ((*print-circle* nil))
			    (error "~@<While searching for system `~a`: `~a` evaluated to  
`~a` which is not a directory.~@:>" system dir defaults))
			(remove-entry-from-registry ()
			    :report "Remove entry from *central-registry* and continue"
			    (push dir to-remove))
			(coerce-entry-to-directory ()
			    :report (lambda (s)
				      (format s "Coerce entry to ~a, replace ~a and continue."
					      (ensure-directory-pathname defaults) dir))
			    (push (cons dir (ensure-directory-pathname defaults)) to- 
replace)))))))
	;; cleanup
	(dolist (dir to-remove)
	  (setf *central-registry* (remove dir *central-registry*)))
	(dolist (pair to-replace)
	  (let* ((current (car pair))
		 (new (cdr pair))
		 (position (position current *central-registry*)))
	    (setf *central-registry*
		  (append (subseq *central-registry* 0 position)
			  (list new)
			  (subseq *central-registry* (1+ position))))))))))






On Jul 9, 2009, at 4:04 PM, Tobias C. Rittweiler wrote:

> Richard M Kreuter writes:
>
>> Wouldn't it be more user-friendly to coerce such pathnames to ones  
>> that
>> denote directory names?
>
> Small addendum to my previous mail:
>
> Even in the case of automatic coercing, I think ASDF should signal a
> style-warning for educational purposes.
>
>  -T.
>
>
> _______________________________________________
> asdf-devel mailing list
> asdf-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel

--
Gary Warren King, metabang.com
Cell: (413) 559 8738
Fax: (206) 338-4052
gwkkwg on Skype * garethsan on AIM * gwking on twitter









More information about the asdf-devel mailing list