borkdude / grasp

Grep Clojure code using clojure.spec regexes
Eclipse Public License 1.0
242 stars 7 forks source link

Should not fail when classpath dir doesn't exist #22

Closed mk closed 2 years ago

mk commented 2 years ago

Trying this on our project with

(g/grasp (System/getProperty "java.class.path") #{:pre :post})

Fails with

Unhandled java.io.FileNotFoundException
   /Users/mk/.gitlibs/libs/applied-science/waqi/a738123afae999656d7a0ff77edb431c97ebb341/resources
   (No such file or directory)

      FileInputStream.java:   -2  java.io.FileInputStream/open0
      FileInputStream.java:  216  java.io.FileInputStream/open
      FileInputStream.java:  157  java.io.FileInputStream/<init>
                    io.clj:  229  clojure.java.io/fn
                    io.clj:  229  clojure.java.io/fn
                    io.clj:   69  clojure.java.io/fn/G
                    io.clj:  165  clojure.java.io/fn
                    io.clj:  165  clojure.java.io/fn
                    io.clj:   69  clojure.java.io/fn/G
                    io.clj:  102  clojure.java.io/reader
                    io.clj:   86  clojure.java.io/reader
               RestFn.java:  410  clojure.lang.RestFn/invoke
                  AFn.java:  154  clojure.lang.AFn/applyToHelper
               RestFn.java:  132  clojure.lang.RestFn/applyTo
                  core.clj:  669  clojure.core/apply
                  core.clj: 7009  clojure.core/slurp
                  core.clj: 7009  clojure.core/slurp
               RestFn.java:  410  clojure.lang.RestFn/invoke
                  impl.clj:  251  grasp.impl/grasp
                  impl.clj:  235  grasp.impl/grasp
                  impl.clj:  239  grasp.impl/grasp/fn
                  core.clj: 2770  clojure.core/map/fn
              LazySeq.java:   42  clojure.lang.LazySeq/sval
              LazySeq.java:   51  clojure.lang.LazySeq/seq
                   RT.java:  535  clojure.lang.RT/seq
                  core.clj:  139  clojure.core/seq
                  core.clj:  662  clojure.core/apply
                  core.clj: 2800  clojure.core/mapcat
                  core.clj: 2800  clojure.core/mapcat
               RestFn.java:  423  clojure.lang.RestFn/invoke
                  impl.clj:  239  grasp.impl/grasp
                  impl.clj:  235  grasp.impl/grasp
                   api.clj:    9  grasp.api/grasp
                   api.clj:    6  grasp.api/grasp
                   api.clj:    7  grasp.api/grasp
                   api.clj:    6  grasp.api/grasp
                      REPL:   14  ductile.insights.clojure-pre-post/eval75485
                      REPL:   14  ductile.insights.clojure-pre-post/eval75485
             Compiler.java: 7194  clojure.lang.Compiler/eval
             Compiler.java: 7149  clojure.lang.Compiler/eval
                  core.clj: 3215  clojure.core/eval
                  core.clj: 3211  clojure.core/eval
    interruptible_eval.clj:   87  nrepl.middleware.interruptible-eval/evaluate/fn/fn
                  AFn.java:  152  clojure.lang.AFn/applyToHelper
                  AFn.java:  144  clojure.lang.AFn/applyTo
                  core.clj:  667  clojure.core/apply
                  core.clj: 1990  clojure.core/with-bindings*
                  core.clj: 1990  clojure.core/with-bindings*
               RestFn.java:  425  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   87  nrepl.middleware.interruptible-eval/evaluate/fn
                  main.clj:  437  clojure.main/repl/read-eval-print/fn
                  main.clj:  437  clojure.main/repl/read-eval-print
                  main.clj:  458  clojure.main/repl/fn
                  main.clj:  458  clojure.main/repl
                  main.clj:  368  clojure.main/repl
               RestFn.java: 1523  clojure.lang.RestFn/invoke
    interruptible_eval.clj:   84  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:   56  nrepl.middleware.interruptible-eval/evaluate
    interruptible_eval.clj:  152  nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
                  AFn.java:   22  clojure.lang.AFn/run
               session.clj:  218  nrepl.middleware.session/session-exec/main-loop/fn
               session.clj:  217  nrepl.middleware.session/session-exec/main-loop
                  AFn.java:   22  clojure.lang.AFn/run
               Thread.java:  833  java.lang.Thread/run

Creating that dir makes it fail on the next path. I think it should not assume that every dir on the classpath needs to exist.

borkdude commented 2 years ago

A workaround for now could be to filter the non-existing dirs manually using fs/exists?. PR welcome.

mk commented 2 years ago

Yep, that's what I'm doing, just wanted to file this first and will look at a fix later.