cl-grep

Simple implementation of grep
Log | Files | Refs

commit b0e28dcbef21192ae5d2b93287d2c245857a2f01
parent 0f03457b2ada8a46611132fc60d5410da1cae675
Author: ChanderG <[email protected]>
Date:   Tue,  2 Dec 2025 19:43:11 +0530

add checks to run on more real-world examples

Diffstat:
Mgrep.lisp | 33+++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)

diff --git a/grep.lisp b/grep.lisp @@ -39,18 +39,26 @@ (defun fs-walker (dir) (lo "Visiting dir: ~a" dir) - ;; check if we should visit this dir - (let ((dirname (pu:directory-name dir)) - (blacklist (list ".git" ".venv"))) - (when (member dirname blacklist :test #'equalp) - (lo "Skipping dir: ~a" dir) - (return-from fs-walker nil))) - ;; process files in this dir - (fsu:map-directory #'queue-file dir - :type ':file) - ;; go through sub-folders - (fsu:map-directory #'fs-walker dir - :type ':directory)) + (when (not dir) + (lo "Obtained invalid dir nil, somehow.") + (return-from fs-walker nil)) + + (handler-case + (progn + ;; check if we should visit this dir + (let ((dirname (pu:directory-name dir)) + (blacklist (list ".git" ".venv"))) + (when (member dirname blacklist :test #'equalp) + (lo "Skipping dir: ~a" dir) + (return-from fs-walker nil))) + ;; process files in this dir + (fsu:map-directory #'queue-file dir + :type ':file) + ;; go through sub-folders + (fsu:map-directory #'fs-walker dir + :type ':directory)) + (error (c) + (lo "Error in walking dir ~a: ~a" dir c)))) ;; Main entrypoint for the grep functionality (defun grep-launcher (str dir) @@ -60,6 +68,7 @@ (workers (loop for i from 0 below numw collect (bt:make-thread #'process-task)))) (fs-walker dir) + (lo "Finished processing target walking!") (loop for i from 0 below numw do (lq:push-queue :done *queue*)) (loop for w in workers do (bt:join-thread w))))