Loading defsystem.lisp +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading test/test-version.script +12 −0 Original line number Diff line number Diff line Loading @@ -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") test/version.lisp-expr 0 → 100644 +2 −0 Original line number Diff line number Diff line "1.0" 1.0 No newline at end of file uiop/stream.lisp +17 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. Loading @@ -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, Loading Loading
defsystem.lisp +4 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
test/test-version.script +12 −0 Original line number Diff line number Diff line Loading @@ -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")
test/version.lisp-expr 0 → 100644 +2 −0 Original line number Diff line number Diff line "1.0" 1.0 No newline at end of file
uiop/stream.lisp +17 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. Loading @@ -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, Loading