[asdf-devel] 1.675 bug
![](https://secure.gravatar.com/avatar/28698375e19f799696f925da9bfdfd59.jpg?s=120&d=mm&r=g)
Hi list, I'm having trouble hot-upgrading asdf. My old setup was not checked out of a repository, but does have a file modified date of 2007-06-18. I also use asdf-binary-locations version "0.3.8". To begin with, I have created the following config file (~ is at c:/home) ~/.config/common-lisp/source-registry.conf (:source-registry (:directory "e:/src/ltk-0.90/") (:tree "c:/home/code/lisp/libs/") (:exclude "_darcs") :ignore-inherited-configuration) I then load-file asdf.lisp from Slime. My clisp-2.47 (non-cygwin Windows) is previously already running with asdf, asdf-binary-locations, and many systems loaded (and other random work done). I then tried to load a system that I could previously load just fine, in this case ironclad_0.27. CL-USER> (asdf:load-system :ironclad) ; loading system definition from C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd into #<PACKAGE ASDF0> ;; Loading file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd ... ; registering #<SYSTEM :IRONCLAD #x26F7286D> as IRONCLAD ; registering #<SYSTEM IRONCLAD-TESTS #x26FE5225> as IRONCLAD-TESTS ;; Loaded file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd ; No value This gave the following error. TRANSLATE-PATHNAME: replacement pieces (NIL NIL (:DIRECTORY #1="home" #2="code" #3="lisp" #4="libs" #5="ironclad_0.27") "package" "fas" :NEWEST) do not fit into #P"C:\\Documents and Settings\\chewyong\\Local Settings\\Temporary Internet Files\\common-lisp\\**\\*.*" [Condition of type SIMPLE-ERROR] I browsed around in the stack trace (yes clisp stack traces are ugly), and looked deeper into this particular frame: ... 17: <1/1718> #<SYSTEM-FUNCTION TRANSLATE-PATHNAME> [1712] EVAL frame for form (TRANSLATE-PATHNAME (ASDF::DIRECTORIZE-PATHNAME-HOST-DEVICE ASDF::P) ASDF::ABSOLUTE-SOURCE ASDF::DESTINATION) Locals: ASDF::ABSOLUTE-SOURCE = #P"\\**\\*.*" ASDF::ROOT = #P"\\" ASDF::DESTINATION = #P"C:\\Documents and Settings\\chewyong\\Local Settings\\Temporary Internet.. ASDF::SOURCE = T #:LIST-13280 = ((T ..)) ASDF::P = #P"\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" #:PATTERN-13281 = (T ..) #:TYPECASE-KEY-13279 = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" #:TYPECASE-KEY-13278 = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" ASDF::PATH = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" ... In particular, I'm guessing that this is related to truenamize (has it taken the wrong branch?) with respect to (line 677 on my version of asdf.lisp) (ignore-errors (return (truename p))) Am I close enough? See the following: CL-USER> (truename (merge-pathnames #P"\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas")) ==> TRUENAME: File #1=#P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" does not exist [Condition of type SYSTEM::SIMPLE-FILE-ERROR] My package.fas, due to asdf-binary-locations, has been stored previously in ~/code/lisp/libs/ironclad_0.27/clisp-2.47-win32-i386/package.fas I hope this is useful for fixing asdf + a-b-l hot upgrade. I can restart a new Lisp and give full backtraces or other further info, should that be necessary. Cheers.
![](https://secure.gravatar.com/avatar/0345f6261d6ced21145afdec166fd114.jpg?s=120&d=mm&r=g)
Ahem. Does it work better with 1.679? It's hard to test these things without access to a Windows machine... Also, I realize that in Unix, I rely on absolute-pathname-p meaning "a completely qualified pathname", which breaks down on Windows, with potentially "interesting" implications. Sigh. [ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] The main difference between a computer salesman and a used car salesman is that the used car salesman can probably drive and knows when he's lying. - Peter da Silva On 14 April 2010 20:46, szergling <senatorzergling@gmail.com> wrote:
Hi list,
I'm having trouble hot-upgrading asdf. My old setup was not checked out of a repository, but does have a file modified date of 2007-06-18. I also use asdf-binary-locations version "0.3.8".
To begin with, I have created the following config file (~ is at c:/home)
~/.config/common-lisp/source-registry.conf
(:source-registry (:directory "e:/src/ltk-0.90/") (:tree "c:/home/code/lisp/libs/") (:exclude "_darcs") :ignore-inherited-configuration)
I then load-file asdf.lisp from Slime. My clisp-2.47 (non-cygwin Windows) is previously already running with asdf, asdf-binary-locations, and many systems loaded (and other random work done).
I then tried to load a system that I could previously load just fine, in this case ironclad_0.27.
CL-USER> (asdf:load-system :ironclad) ; loading system definition from C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd into #<PACKAGE ASDF0> ;; Loading file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd ... ; registering #<SYSTEM :IRONCLAD #x26F7286D> as IRONCLAD ; registering #<SYSTEM IRONCLAD-TESTS #x26FE5225> as IRONCLAD-TESTS ;; Loaded file C:\home\code\lisp\libs\ironclad_0.27\ironclad.asd
; No value
This gave the following error.
TRANSLATE-PATHNAME: replacement pieces (NIL NIL (:DIRECTORY #1="home" #2="code" #3="lisp" #4="libs" #5="ironclad_0.27") "package" "fas" :NEWEST) do not fit into #P"C:\\Documents and Settings\\chewyong\\Local Settings\\Temporary Internet Files\\common-lisp\\**\\*.*" [Condition of type SIMPLE-ERROR]
I browsed around in the stack trace (yes clisp stack traces are ugly), and looked deeper into this particular frame:
...
17: <1/1718> #<SYSTEM-FUNCTION TRANSLATE-PATHNAME> [1712] EVAL frame for form (TRANSLATE-PATHNAME (ASDF::DIRECTORIZE-PATHNAME-HOST-DEVICE ASDF::P) ASDF::ABSOLUTE-SOURCE ASDF::DESTINATION) Locals: ASDF::ABSOLUTE-SOURCE = #P"\\**\\*.*" ASDF::ROOT = #P"\\" ASDF::DESTINATION = #P"C:\\Documents and Settings\\chewyong\\Local Settings\\Temporary Internet.. ASDF::SOURCE = T #:LIST-13280 = ((T ..)) ASDF::P = #P"\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" #:PATTERN-13281 = (T ..) #:TYPECASE-KEY-13279 = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" #:TYPECASE-KEY-13278 = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" ASDF::PATH = #P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" ...
In particular, I'm guessing that this is related to truenamize (has it taken the wrong branch?) with respect to (line 677 on my version of asdf.lisp)
(ignore-errors (return (truename p)))
Am I close enough? See the following:
CL-USER> (truename (merge-pathnames #P"\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas"))
==>
TRUENAME: File #1=#P"C:\\home\\code\\lisp\\libs\\ironclad_0.27\\package.fas" does not exist [Condition of type SYSTEM::SIMPLE-FILE-ERROR]
My package.fas, due to asdf-binary-locations, has been stored previously in ~/code/lisp/libs/ironclad_0.27/clisp-2.47-win32-i386/package.fas
I hope this is useful for fixing asdf + a-b-l hot upgrade. I can restart a new Lisp and give full backtraces or other further info, should that be necessary.
Cheers.
_______________________________________________ asdf-devel mailing list asdf-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel
![](https://secure.gravatar.com/avatar/28698375e19f799696f925da9bfdfd59.jpg?s=120&d=mm&r=g)
On 4/15/10, Faré <fahree@gmail.com> wrote:
Ahem. Does it work better with 1.679?
It's hard to test these things without access to a Windows machine...
Also, I realize that in Unix, I rely on absolute-pathname-p meaning "a completely qualified pathname", which breaks down on Windows, with potentially "interesting" implications. Sigh.
Hi again, Ok, forget about the hot-upgrade issue. I had wrongly assumed without checking that asdf runs well on clisp win32. Apologies, I should've checked that before. Here's what I discovered on deeper inspection. I had been sidetracked into the wrong line before, as the problem with truenamize lies elsewhere, and I've worked around it for now. A proper patch would require fixes to clisp (this is tentative for now) but may require version checking conditionalisation in any case. One should probably keep track of: http://sourceforge.net/tracker/?func=detail&aid=2987521&group_id=1355&atid=101355 As an aside I made another edit which may also need version conditionalisation. Check out http://sourceforge.net/tracker/?func=detail&aid=2959335&group_id=1355&atid=101355 maybe a dummy stub get-uid is required for clisp win32 in the future? And is the #-windows meant to be Lispworks only? Which implementation was it meant for? [and I don't know why that posix:uid thing didn't throw an error before for me... very strange] So the following are not patches to be applied, but merely highlights some issues that I don't know how to fix elegantly, as yet. Perhaps this issue should remain open for now, while we adopt a wait and see attitude? Yong. PS And yep, I have now tried the 1.679 release. $ diff -u 1.679.lisp asdf.lisp --- 1.679.lisp 2010-04-15 16:11:09.395991000 +1200 +++ asdf.lisp 2010-04-15 18:23:20.009511500 +1200 @@ -651,7 +651,8 @@ #-windows (progn -#+clisp (defun get-uid () (posix:uid)) +;; vvvvvvvvv---- This may need to be clisp version tested in the future? +#+(and clisp (not win32)) (defun get-uid () (posix:uid)) #+sbcl (defun get-uid () (sb-unix:unix-getuid)) #+cmu (defun get-uid () (unix:unix-getuid)) #+ecl (ffi:clines "#include <sys/types.h>" "#include <unistd.h>") @@ -705,9 +706,11 @@ :finally (return (merge-pathnames* - (make-pathname :host nil :device nil - :directory nil - :defaults p) + ;; Unwieldy, but fixes clisp pre-???2.47 bug + (merge-pathnames + (make-pathname :host nil :device nil + :directory nil) + p) sofar))))))) (defun lispize-pathname (input-file)
participants (2)
-
Faré
-
szergling