liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 9dd3cf23b4ce78820e1b65fedc6242a403b2cb15
parent 4e9227dff3d8bfd3cd7f82e99238acff7ceb2f2f
Author: Daniel Barlow <dan@telent.net>
Date:   Fri,  8 Sep 2023 21:17:42 +0100

anoia.fs.mktree replaces mkdir

This uses lfs to make the tree in-process instead of
shelling out to the mkdir command

Diffstat:
Mpkgs/anoia/fs.fnl | 14+++++++++++++-
Mpkgs/anoia/init.fnl | 5+----
Mpkgs/odhcp-script/odhcp6-script.fnl | 9++++-----
3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/pkgs/anoia/fs.fnl b/pkgs/anoia/fs.fnl @@ -1,5 +1,17 @@ (local lfs (require :lfs)) +(fn directory? [pathname] + (= (lfs.symlinkattributes pathname :mode) "directory")) + +(fn mktree [pathname] + (if (or (= pathname "") (= pathname "/")) + (error (.. "can't mkdir " pathname))) + + (or (directory? pathname) + (let [parent (string.gsub pathname "/[^/]+/?$" "")] + (or (directory? parent) (mktree parent)) + (assert (lfs.mkdir pathname))))) + (fn rmtree [pathname] (case (lfs.symlinkattributes pathname) nil true @@ -17,4 +29,4 @@ (error (.. "can't remove " pathname " of kind \"" unknown.mode "\"")))) -{ : rmtree } +{ : mktree : rmtree } diff --git a/pkgs/anoia/init.fnl b/pkgs/anoia/init.fnl @@ -13,7 +13,4 @@ (fn system [s] (assert (os.execute s))) -(fn mkdir [directory] - (os.execute (.. "mkdir -p " directory))) - -{ : merge : split : file-exists? : system : mkdir } +{ : merge : split : file-exists? : system } diff --git a/pkgs/odhcp-script/odhcp6-script.fnl b/pkgs/odhcp-script/odhcp6-script.fnl @@ -1,9 +1,9 @@ -(local { : split : merge : mkdir } (require :anoia)) +(local { : split : merge } (require :anoia)) (local { : view } (require :fennel)) -(local { : rmtree } (require :anoia.fs)) +(local { : mktree : rmtree } (require :anoia.fs)) (local state-directory (assert (os.getenv "SERVICE_STATE"))) -(mkdir state-directory) +(mktree state-directory) (fn write-value [name value] (let [path (.. state-directory "/" name)] @@ -29,11 +29,10 @@ keydir (.. prefix (-> address.address (: :gsub "::$" "") (: :gsub ":" "-")))] - (mkdir (.. state-directory "/" keydir)) + (mktree (.. state-directory "/" keydir)) (each [k v (pairs address)] (write-value (.. keydir "/" k) v))))) - ;; we remove state before updating to ensure that consumers don't get ;; a half-updated snapshot (os.remove (.. state-directory "/state"))