(defpackage :changelog-filter (:use :cl :alexandria :serapeum :fw.lu) (:export )) (in-package :changelog-filter) (defparameter *changelog-path* "/Users/elangley/WebKit/Source/WebCore/ChangeLog") (defun get-block (stream) (let ((header (read-line stream))) (loop for next = (peek-char nil stream nil) while (and next (whitespacep next)) collect (read-line stream) into lines finally (return (trim-whitespace (string-join (cons header lines) #\newline)))))) (defun main () (let ((*changelog-path* (or (caddr sb-ext:*posix-argv*) *changelog-path*)) (search-string (cadr sb-ext:*posix-argv*))) (handler-case (with-input-from-file (s *changelog-path*) (loop for next-block = (get-block s) when (search search-string next-block :test #'char-equal) do (format t "~&~a~%" next-block))) (end-of-file (c) c)))) ;;; sbcl --disable-debugger --no-userinit --load $HOME/quicklisp/setup.lisp --eval '(ql:quickload (list :alexandria :serapeum :fwoar.lisputils))' --load /Users/elangley/git_repos/lisp-sandbox/changelog-filter.lisp --eval "(save-lisp-and-die "'"'"changelog-filter"'"'" :executable t :toplevel #'changelog-filter::main :compression t)"