Simple database: Difference between revisions

(→‎{{header|Common Lisp}}: don't overwrite if file exists as it should have been renamed before)
(→‎{{header|Common Lisp}}: version backups)
Line 119:
:date (parse-date (prompt-read "Date watched" (format-ymd)))
:tags (parse-tags (prompt-read "Tags"))))
 
(defun parse-integer-quietly (&rest args)
(ignore-errors (apply #'parse-integer args)))
 
(defun get-next-version (basename)
(flet ((parse-version (pathname)
(or :direction(parse-integer-quietly :output)
(string-left-trim (file-namestring basename)
(file-namestring pathname))
:start 1) 0)))
(let* ((files (directory (format nil "~A,*" (namestring basename))))
(max (reduce #'max files :key #'parse-version)))
(merge-pathnames (format nil "~a,~d" (file-namestring basename) (1+ max))
basename))))
 
(defun save-db (dbfile database)
(let ((file (probe-file dbfile)))
(rename-file file (concatenate 'string (fileget-namestringnext-version file) ",1"))
(with-open-file (out file :direction :output)
:direction :output)
(with-standard-io-syntax
(let ((*print-case* :downcase))
Anonymous user