|
59 | 59 | (apply #'fetcher url file args))))) |
60 | 60 |
|
61 | 61 | (defun url-to-release (url) |
62 | | - "extracts name of release from URL" |
63 | | - (when (search "/archive/" url) |
64 | | - (let* ((start (+ (search "/archive/" url) (length "/archive/"))) |
65 | | - (end (position #\/ url :start start))) |
66 | | - (subseq url start end)))) |
| 62 | + "obtains name of release from URL" |
| 63 | + (let* ((http-url (if (string-equal "https" (subseq url 0 5)) |
| 64 | + (uiop:strcat "http" (subseq url 5)) |
| 65 | + url)) |
| 66 | + (all-releases (ql-dist:provided-releases t)) |
| 67 | + (release (find http-url all-releases |
| 68 | + :test #'string= |
| 69 | + :key #'ql-dist:archive-url))) |
| 70 | + (ql-dist:project-name release))) |
67 | 71 |
|
68 | 72 | #+sbcl |
69 | 73 | (defun md5 (file) |
|
91 | 95 | "Checks that the md5 and size of FILE are as expected from the quicklisp |
92 | 96 | dist." |
93 | 97 | (let ((release (ql-dist:find-release name))) |
| 98 | + (unless (= (ql-dist:archive-size release) (file-size file)) |
| 99 | + (error "file size mismatch for ~A" name)) |
94 | 100 | (unless (string-equal (ql-dist:archive-md5 release) (md5 file)) |
95 | 101 | (error "md5 mismatch for ~A" name)) |
96 | | - (unless (string-equal (ql-dist:archive-content-sha1 release) (content-hash file)) |
97 | | - (error "sha1 mismatch for ~A" name)) |
98 | | - (unless (= (ql-dist:archive-size release) (file-size file)) |
99 | | - (error "file size mismatch for ~A" name)))) |
| 102 | + (unless (member (ql-dist:archive-content-sha1 release) |
| 103 | + (list (content-hash file (lambda (c) (sort c #'string< :key #'first))) |
| 104 | + (content-hash file #'reverse)) |
| 105 | + :test #'string-equal) |
| 106 | + (error "sha1 mismatch for ~A" name)))) |
100 | 107 |
|
101 | 108 | (defun register-fetch-scheme-functions () |
102 | 109 | (setf ql-http:*fetch-scheme-functions* |
|
0 commit comments