diff --git a/defsystem.lisp b/defsystem.lisp index 6349bac0b890dfa738501769a6ce966a87486656..2a3baab9be61843b0f58eb1d4decf3abd9282369 100644 --- a/defsystem.lisp +++ b/defsystem.lisp @@ -114,10 +114,12 @@ (case (first form) ((:read-file-form) (destructuring-bind (subpath &key (at 0)) (rest form) - (safe-read-file-form (subpathname pathname subpath) :at at :package :asdf-user))) + (safe-read-file-form (subpathname pathname subpath) + :at at :package :asdf-user))) ((:read-file-line) (destructuring-bind (subpath &key (at 0)) (rest form) - (read-file-lines (subpathname pathname subpath) :at at))) + (safe-read-file-line (subpathname pathname subpath) + :at at))) (otherwise (invalid)))) (t diff --git a/test/test-version.script b/test/test-version.script index 0da057dc8dd0c4df33d9b0f7e971a608355f06d6..63cc88026b92c2a4b2210a725758464c0599c26d 100644 --- a/test/test-version.script +++ b/test/test-version.script @@ -26,9 +26,21 @@ :pathname #.*test-directory* :version "1.2") +(def-test-system :versioned-system-file-form + :defsystem-depends-on ((:version :test-asdf/file2 "2.1")) + :pathname #.*test-directory* + :version (:read-file-form "version.lisp-expr" :at 0)) + +(def-test-system :versioned-system-file-line + :defsystem-depends-on ((:version :test-asdf/file2 "2.1")) + :pathname #.*test-directory* + :version (:read-file-line "version.lisp-expr" :at 1)) + (defun vtest (name v &optional (true t)) (or (eq true (version-satisfies (find-system name) v)) (error "no satisfaction: ~S version ~A not ~A" name v true))) (vtest :versioned-system-1 "1.0") (vtest :versioned-system-2 "1.0") (vtest :versioned-system-3 "2.0" nil) +(vtest :versioned-system-file-form "1.0") +(vtest :versioned-system-file-line "1.0") diff --git a/test/version.lisp-expr b/test/version.lisp-expr new file mode 100644 index 0000000000000000000000000000000000000000..50608ec1635ab9f21f2d0e354df7ac1693701e06 --- /dev/null +++ b/test/version.lisp-expr @@ -0,0 +1,2 @@ +"1.0" +1.0 \ No newline at end of file diff --git a/uiop/stream.lisp b/uiop/stream.lisp index 8cb16ca211d072905d8ed481e4b422ba885e65a2..13d21dddda82f0aec5d4de9d31470aad16c5e1fc 100644 --- a/uiop/stream.lisp +++ b/uiop/stream.lisp @@ -17,7 +17,8 @@ #:copy-stream-to-stream #:concatenate-files #:copy-file #:slurp-stream-string #:slurp-stream-lines #:slurp-stream-line #:slurp-stream-forms #:slurp-stream-form - #:read-file-string #:read-file-lines #:read-file-forms #:read-file-form #:safe-read-file-form + #:read-file-string #:read-file-line #:read-file-lines #:safe-read-file-line + #:read-file-forms #:read-file-form #:safe-read-file-form #:eval-input #:eval-thunk #:standard-eval-thunk ;; Temporary files #:*temporary-directory* #:temporary-directory #:default-temporary-directory @@ -341,6 +342,14 @@ BEWARE: be sure to use WITH-SAFE-IO-SYNTAX, or some variant thereof" BEWARE: be sure to use WITH-SAFE-IO-SYNTAX, or some variant thereof" (apply 'call-with-input-file file 'slurp-stream-lines keys)) + (defun read-file-line (file &rest keys &key (at 0) &allow-other-keys) + "Open input FILE with option KEYS (except AT), +and read its contents as per SLURP-STREAM-LINE with given AT specifier. +BEWARE: be sure to use WITH-SAFE-IO-SYNTAX, or some variant thereof" + (apply 'call-with-input-file file + #'(lambda (input) (slurp-stream-line input :at at)) + (remove-plist-key :at keys))) + (defun read-file-forms (file &rest keys &key count &allow-other-keys) "Open input FILE with option KEYS (except COUNT), and read its contents as per SLURP-STREAM-FORMS with given COUNT. @@ -357,6 +366,13 @@ BEWARE: be sure to use WITH-SAFE-IO-SYNTAX, or some variant thereof" #'(lambda (input) (slurp-stream-form input :at at)) (remove-plist-key :at keys))) + (defun safe-read-file-line (pathname &rest keys &key (package :cl) &allow-other-keys) + "Reads the specified line from the top of a file using a safe standardized syntax. +Extracts the line using READ-FILE-LINE, +within an WITH-SAFE-IO-SYNTAX using the specified PACKAGE." + (with-safe-io-syntax (:package package) + (apply 'read-file-line pathname (remove-plist-key :package keys)))) + (defun safe-read-file-form (pathname &rest keys &key (package :cl) &allow-other-keys) "Reads the specified form from the top of a file using a safe standardized syntax. Extracts the form using READ-FILE-FORM,