Comments (5)
I've seen another variation of find-up
recently which had slightly other requirements than the proposed version. That confirmed me in my feelings that this function shouldn't yet be in fs itself, but just implemented in user space since there is no commonly agreed understanding of what this function should do.
from fs.
Another approach could just be to split this function into multiple smaller primitives, like fs/parents
after which it's pretty easy to find matching files in each directory above:
(require '[babashka.fs :as fs])
(defn absolute-parent [x]
(some-> x fs/absolutize fs/parent str))
(def parent-dirs (take-while some? (iterate absolute-parent (absolute-parent "."))))
(def git-ignores (keep #(let [git-ignore (fs/path % ".gitignore")]
(when (fs/exists? git-ignore) (str git-ignore))) parent-dirs))
(prn git-ignores)
from fs.
What about passing an explicit directory from where to search up?
I have a function in clj-kondo where I needed that: https://github.com/clj-kondo/clj-kondo/blob/8d1531b23485815ab26a7da10eac9950ecc2338d/src/clj_kondo/impl/core.clj#L199-L218
Some alternatives: lazy sequence of all matches going up, could also be another function find-up-all
or so.
from fs.
What about passing an explicit directory from where to search up?
Indeed. Will draft something, also to see the edgecases...
Some alternatives: lazy sequence of all matches going up, could also be another function find-up-all or so.
Could be possible with (iterate #(fs/find-up "foo" %) (fs/cwd))
but otherwise dedicated fn indeed.
from fs.
This kind of feels like an inverse to fs/glob
to me.
Perhaps something like this could do the trick:
(fs/glob-up "." "**/deps.edn" {:max-depth 3})
;; "." => start at the current directory
;; "**/deps.edn" => match deps.edn files in all directories searched
;; {:max-depth 3} => go a maximum of 3 levels up
I'd expect fs/glob-up
to only match in parent directories. So
(fs/glob-up (fs/path (fs/expand-home "~") "dev" "babashka" "fs") "**/*.edn" {:max-depth 2})
should match all EDN files in ~/dev/babashka/fs
, ~/dev/babashka
and ~/dev
.
I'm not quite sure about the name :max-depth
, but I don't have any other options.
from fs.
Related Issues (20)
- Allow for more declarative use of `xdg-*-home` HOT 1
- Consider allowing non-relative paths for fs/which HOT 4
- Add function to see file-owner
- add gzip and gunzip functions
- `babashka.fs/glob` does not find directories with `.` in the name HOT 3
- Efficiently read part of a file by seek offsets HOT 3
- UnsupportedOperationException when using `copy-tree` with zip file path as source HOT 5
- Links in API.md don't work HOT 6
- comment inconsistent: fs/parent returns file no matter if it exist or not
- Paths can have FileSystem that have different separators than the OS-specific one HOT 7
- glob: hidden-option based on pattern HOT 2
- fs/match won't find things in root-folder HOT 1
- `with-temp-dir` can raise a `AccessDeniedException` exception HOT 3
- weird behaviour fs/match, fs/glob HOT 8
- copy-tree fail when some non-leaf directories in the tree are not writable HOT 3
- unzip doesn't work if source is a resource from a jar HOT 1
- Potential regression HOT 4
- Inconsistent documentation for the `:posix-file-permissions` options HOT 1
- Unclear from `fs/glob`docs that it supports a `:max-depth` option HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fs.