3 ms·
Hi! Consider trying redo[0]. It's an idea of D. J. Bernstein (a.k.a. djb) what could already be a good advertising. Your problem can be solved with make as it
by igoose1 6y ago
Hi!
Consider trying redo[0]. It's an idea of D. J. Bernstein (a.k.a. djb) what could already be a good advertising.
Your problem can be solved with make as it pointed by others but I see a wonderful example where redo's target files are pretty clear describing what redo can do.
redo's target files are usually SHELL-scripts but they can be whatever you want if it can be executed by a kernel. `redo-ifchange file1` is a command which waits until file1 have been rebuilt or, by other words, waits until a file1's target file have been executed if it requires.
There are 4 target files to show how to solve your problem --- downloading and merging two files:
all.do file is
DEPS="foo.json bar.json"
redo-ifchange $DEPS
jq -s '.[0] * .[1]' $DEPS
foo.json.do file is
curl "http://example.com/foo.json" # redo guarantees that any errors won't update foo.json as it can happen in make world.
bar.json.do file is
curl "http://example.com/bar.json"
After creating these files you could write `redo all` (or just `redo`) and it will create a graph of deps and will execute them in parallel --- foo.json and bar.json will be downloading at the same time.
I'd recommend getting started with a Go version of redo --- goredo[1] by stargrave. There is also a link to documentations, FAQ and other implementations on the web-site.
[0] http://cr.yp.to/redo.html http://cr.yp.to/redo.html
[1] http://www.goredo.cypherpunks.ru http://www.goredo.cypherpunks.ru
- JNRowe 6y agoI'll note that nq's author also has a redo implementation¹. Being generally redo curious I've wondered a few times why their other projects(nq/mblaze/etc) don't use redo, but never actually asked. ¹ https://github.com/leahneukirchen/redo-c https://github.com/leahneukirchen/redo-c