blob: ab1cf70c8bea97bc7d0331318000d26391b1979a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#!/usr/bin/env bb
(require '[clojure.java.io :as io])
(defn dirname [path] (.getParent (io/file path)))
(defn dir-has-file? [dir filenames]
(some
(fn [file] (.exists (io/file (str dir "/" file))))
filenames))
(defn find-closest [dir filenames]
(cond
(= dir "/") nil
(= dir ".") nil
(= dir "") nil
(dir-has-file? dir filenames) dir
:else (find-closest (dirname dir) filenames)))
(defn normalize-dir-path [dir]
(.getAbsolutePath (io/file (if (empty? dir) "." dir))))
(defn cmd-find-closest [[dir & filenames]]
(let [init-dir (normalize-dir-path dir)]
(when-let [found-dir (find-closest init-dir filenames)]
(println found-dir))))
(defn cmd-find-closest-or-dir [[dir & filenames]]
(let [init-dir (normalize-dir-path dir)]
(if-let [found-dir (find-closest init-dir filenames)]
(println found-dir)
(println init-dir))))
(def commands
{"find-closest" cmd-find-closest
"find-closest-or-dir" cmd-find-closest-or-dir})
(let [[cmd & args] *command-line-args*]
(if-let [command-fn (commands cmd)]
(command-fn args)
(binding [*out* *err*]
(println (str "invalid command: " (or cmd "")))
(println (str "Valid commands: " (keys commands))))))
|