From: Sergey Matveev Date: Sat, 9 Jan 2021 19:03:37 +0000 (+0300) Subject: Texinfo-ed documentation and tarballs preparation X-Git-Tag: v0.10.0^0 X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff_plain;h=ab0f45138762d5fdf412926f0582b3a70534b1b6 Texinfo-ed documentation and tarballs preparation --- diff --git a/.gitignore b/.gitignore index 99bbf7d..28fac26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /goredo +/goredo.info +/module-name /redo /redo-always /redo-cleanup @@ -9,3 +11,4 @@ /redo-stamp /redo-whichdo /tai64nlocal +/VERSION diff --git a/PUBKEY.asc b/PUBKEY.asc new file mode 100644 index 0000000..6d0e134 --- /dev/null +++ b/PUBKEY.asc @@ -0,0 +1,12 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEX/ntHhYJKwYBBAHaRw8BAQdAXZRNXi8Lu6nd171jQnrZyLNQoU07VL7Ly2fi +u28HdoS0J2dvcmVkbyByZWxlYXNlcyA8Z29yZWRvQGN5cGhlcnB1bmtzLnJ1PoiZ +BBMWCgBBFiEEdTG7hPrwvzWWDGO5OlKN3pUsfpMFAl/57R4CGwMMCwoJDQgMBwsD +BAECBxUKCQgLAwIFFgIBAwACHgECF4AACgkQOlKN3pUsfpMETQD/XfwWgd4tReIu +XdcrpZUsWaiTHR6hUY+HXNOpRpGevyIA/04VXYUha9RAJ/xtNMqUvsdV+TS9rFE/ +j2OEwxgRyqIOiHUEEBEKAB0WIQTPYOiaWSMeduJjZCKuGoEJ5JhX7wUCX/ntoAAK +CRCuGoEJ5JhX70VpAP9VFGudn2x3GdmaGP7SJV1Yvdq9n6VvirLwTdwIOtoAzgD/ +axpOol/Mek0/ERCrlqrh1iQpHCy0ULty+EwnSNBtFQ8= +=FWA1 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/README b/README index d7bae44..f64ff9d 100644 --- a/README +++ b/README @@ -1,216 +1,4 @@ -*goredo* redo implementation on pure Go - -OVERVIEW *goredo-overview* - -This is pure Go implementation of DJB's redo (http://cr.yp.to/redo.html) -build system proposal. Originally it was just a rewrite of redo-c -(https://github.com/leahneukirchen/redo-c), but later most features of -apenwarr/redo (https://redo.readthedocs.io/en/latest/) were also -implemented. Why yet another implementation? It is feature full and has -better performance comparing to shell and Python implementation. - -It passes tests from dieweltistgarnichtso.net's redo-sh.tests and -implementation-neutral from apenwarr/redo. - +goredo -- redo implementation on pure Go. +See goredo.info and INSTALL for more information. goredo is free software: see the file COPYING for copying conditions. Home page: http://www.goredo.cypherpunks.ru/ - -INSTALL *goredo-install* - -Hopefully it should work on all POSIX systems. - > - $ go get go.cypherpunks.ru/goredo - $ goredo -symlinks - $ export PATH=`pwd`:$PATH - -If you have problems with *.golang.org's inability to verify -authenticity of go.cypherpunks.ru TLS connection, then you can disable -their usage by setting GOPRIVATE=go.cypherpunks.ru. If you still have -problems with the authenticity on your side, then build it manually: > - - $ git clone git://git.cypherpunks.ru/goredo.git - $ cd goredo - $ git tag -v v0.9.0 - $ git clone git://git.cypherpunks.ru/gorecfile.git - $ ( cd gorecfile ; git tag -v v0.4.0 ) - $ echo "replace go.cypherpunks.ru/recfile => `pwd`/gorecfile" >> go.mod - $ git clone git://git.cypherpunks.ru/gotai64n.git - $ ( cd gotai64n ; git tag -v v0.2.0 ) - $ echo "replace go.cypherpunks.ru/tai64n => `pwd`/gotai64n" >> go.mod - $ go build - $ ./goredo -symlinks - $ export PATH=`pwd`:$PATH - -NOTES *goredo-notes* - -* "all" target is default -* stdout is always captured, but no target is created if it was empty -* empty targets are considered always out of date -* .do's $3 is relative path to the file in target directory -* .do search goes up to / by default, but can be limited with either - $REDO_TOP_DIR environment variable, or by having .redo/top file in it -* target's completion messages are written after they finish -* executable .do is run as is, non-executable is run with /bin/sh -e[x] -* tracing (-x) can be obviously done only for non-executable .do -* parallizable build is done only during redo-ifchange for human - convenience: you can globally enable REDO_JOBS, but still do for - example: redo htmls infos index upload - -FEATURES *goredo-features* - -* explicit useful and convenient checks from apenwarr/redo: - * check that $1 was not touched during .do execution - * check that stdout and $3 are not written simultaneously - * check that generated target was not modified "externally" outside - the redo, preventing its overwriting, but continuing the build -* targets, dependency information and their directories are explicitly - synced (can be disabled, should work faster) -* file's change is detected by comparing its ctime and BLAKE2b hash -* files creation is umask-friendly (unlike mkstemp() used in redo-c) -* parallel build with jobs limit, optionally in infinite mode -* coloured messages (can be disabled) -* verbose debug messages, including out-of-date determination, PIDs, - lock and jobserver acquirings/releases -* displaying of each target's execution time -* each target's stderr can be prefixed with the PID -* optional statusline with currently running/waiting/done jobs -* target's stderr can be stored on the disk with TAI64N timestamp - prefixes for each line. To convert them to localtime you can use either - tai64nlocal utility from daemontools (http://cr.yp.to/daemontools.html), - or similar one: > - $ go get go.cypherpunks.ru/tai64n/cmd/tai64nlocal - -COMMANDS *goredo-commands* - -* redo-ifchange, redo-ifcreate, redo-always -* redo -- same as redo-ifchange, but forcefully and sequentially run - specified targets -* redo-log -- display TAI64N timestamped last stderr of the target -* redo-stamp -- record stamp dependency. Nothing more, dummy -* redo-cleanup -- removes either temporary, log files, or everything - related to goredo -* redo-whichdo -- .do search paths for specified target (similar to - apenwarr/redo): > - $ redo-whichdo x/y/a.b.o - x/y/a.b.o.do - x/y/default.b.o.do - x/y/default.o.do - x/y/default.do - x/default.b.o.do - x/default.o.do - x/default.do - default.b.o.do - default.o.do - default.do - ../default.b.o.do - ../default.o.do - ../default.do -* redo-dot -- dependency DOT graph generator. For example to visualize - your dependencies with GraphViz: > - $ redo target [...] # to assure that **/.redo/*.dep are filled up - $ redo-dot target [...] > whatever.dot - $ dot -Tpng whatever.dot > whatever.png # possibly add -Gsplines=ortho - -FAQ *goredo-faq* - - Hashing and stamping~ - -All targets are checksummed if their ctime differs from the previous -one. apenwarr/redo gives many reasons why every time checksumming is -bad, but in my opinion in practice all of them do not apply. - -* Aggregate targets and willing to be out-of-date ones just must not - produce empty output files. apenwarr/*, redo-c and goredo - implementations consider non existing file as an out-of-date target -* If you really wish to produce an empty target file, just touch $3 - -DJB's proposal with both stdout and $3 gives that ability to control -your desired behaviour. Those who does not capture stdout -- failed. -Those who creates an empty file if no stdout was written -- failed. - -redo is a tool to help people. Literally all targets can be safely -"redo-stamp < $3"-ed, reducing false positive out-of-dates. Of course, -with the correct stdout/$3 working and placing necessary results in $3, -instead of just silently feeding them in redo-stamp. - -redo implementations are already automatically record -ifchange on .do -files and -ifcreate on non-existing .do files. So why they can not -record redo-stamp the same way implicitly? No, Zen of Python does not -applicable there, because -ifchange/-ifcreate contradict it already. - -Modern cryptographic hash algorithms and CPUs are so fast, that even all -read and writes to or from hard drive arrays can be easily checksummed -and transparently compressed, as ZFS with LZ4 and Skein/BLAKE[23] -algorithms demonstrate us. - -goredo includes redo-stamp, that really records the stamp in the .dep -file, but it does not play any role later. It is stayed just for -compatibility. - - Can removed .do lead to permanent errors of its non existence?~ - -Yes, because dependency on it was recorded previously. Is it safe to -assume that .do-less target now is an ordinary source-file? I have no -confidence in such behaviour. So it is user's decision how to deal with -it, probably it was just his inaccuracy mistake. If you really want to -get rid of that dependency knowledge for foo/bar target, then just -remove foo/.redo/bar.dep. - - Does redo-always always rebuilds target?~ - -goredo, together with apenwarr/redo, rebuilds target once per run. -Always rebuilds during every redo invocation, but only once during it -building. http://news.dieweltistgarnichtso.net/bin/redo-sh.html#why-built-twice -has other opinion, that is why its redo-sh.tests/always_rebuild_1 will -fail. Rebuilding of always-ed targets even during the same build process -ruins any redo's usability in practice. - -For example if my .h file contains source code's version number, that is -git-describe's output and all my other files depends on that header, -then any redo-ifchange of .o will lead to git-describe execution, that -is rather heavy. Of course, because of either hashing or possible -redo-stamp-ing its dependants won't be rebuilt further, but build time -will be already ruined. If you need to rebuild TeX documents (case -mentioned in redo-sh's FAQ) until all references and numbers are ready, -then you must naturally expectedly explicitly use while cycle in your -.do, as apenwarr/redo already suggests. - -STATE *goredo-state* - -Dependency and build state is kept inside .redo subdirectory in each -directory related the build. Each corresponding target has its own, -recreated with every rebuild, .dep file. It is recfile -(https://www.gnu.org/software/recutils/), that could have various -dependency information (dep.rec with the schema included): > - - Build: 80143f04-bfff-4673-950c-081d712f573d - - Type: ifcreate - Target: foo.o.do - - Type: ifchange - Target: default.o.do - Ctime: 1605721341.253305000 - Hash: f4929732f96f11e6d4ebe94536b5edef426d00ed0146853e37a87f4295e18eda - - Type: always - - Type: stamp - Hash: 5bbdf635932cb16b9127e69b6f3872577efed338f0a4ab6f2c7ca3df6ce50cc9 - -USAGE *goredo-usage* - -Run any of the command above with the -help. - -LICENCE~ - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - - vim: filetype=help diff --git a/VERSION.do b/VERSION.do new file mode 100644 index 0000000..38d570c --- /dev/null +++ b/VERSION.do @@ -0,0 +1,2 @@ +redo-ifchange usage.go +perl -ne 'print "$1\n" if /Version.*"(.*)"$/' < usage.go diff --git a/cmds.texi b/cmds.texi new file mode 100644 index 0000000..19cd5f0 --- /dev/null +++ b/cmds.texi @@ -0,0 +1,53 @@ +@node Commands +@unnumbered Commands + +@table @command + +@item redo-ifchange, redo-ifcreate, redo-always + +@item redo + Same as redo-ifchange, but forcefully and sequentially run specified + targets. + +@item redo-log + Display TAI64N timestamped last @command{stderr} of the target. + +@item redo-stamp + Record stamp dependency. Nothing more, dummy. Read about + @ref{Stamping, stamping} in the FAQ. + +@item redo-cleanup + Removes either temporary, log files, or everything related to + @command{goredo}. + +@item redo-whichdo + Display @file{.do} search paths for specified target (similar to + @command{apenwarr/redo}): +@example +$ redo-whichdo x/y/a.b.o +x/y/a.b.o.do +x/y/default.b.o.do +x/y/default.o.do +x/y/default.do +x/default.b.o.do +x/default.o.do +x/default.do +default.b.o.do +default.o.do +default.do +../default.b.o.do +../default.o.do +../default.do +@end example + +@item redo-dot + Dependency + @url{https://en.wikipedia.org/wiki/DOT_(graph_description_language), DOT} + graph generator. For example to visualize your dependencies with GraphViz: +@example +$ redo target [...] # to assure that **/.redo/*.dep are filled up +$ redo-dot target [...] > whatever.dot +$ dot -Tpng whatever.dot > whatever.png # possibly add -Gsplines=ortho +@end example + +@end table diff --git a/download.texi b/download.texi new file mode 100644 index 0000000..16fc87d --- /dev/null +++ b/download.texi @@ -0,0 +1,4 @@ +@multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} +@headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum + +@end multitable diff --git a/faq.texi b/faq.texi new file mode 100644 index 0000000..02ea26b --- /dev/null +++ b/faq.texi @@ -0,0 +1,75 @@ +@node FAQ +@unnumbered FAQ + +@anchor{Stamping} +@section Hashing and stamping + +All targets are checksummed if their @file{ctime} differs from the +previous one. @command{apenwarr/redo} gives many reasons why every time +checksumming is bad, but in my opinion in practice all of them do not +apply. + +@itemize +@item Aggregate targets and willing to be out-of-date ones just must not + produce empty output files. @command{apenwarr/*}, @command{redo-c} and + @command{goredo} implementations consider non existing file as an + out-of-date target +@item If you really wish to produce an empty target file, just touch @file{$3} +@end itemize + +DJB's proposal with both @file{stdout} and @file{$3} gives that ability +to control your desired behaviour. Those who does not capture +@file{stdout} -- failed. Those who creates an empty file if no +@file{stdout} was written -- failed. + +redo is a tool to help people. Literally all targets can be safely +@code{redo-stamp < $3}-ed, reducing false positive out-of-dates. Of +course, with the correct @file{stdout}/@file{$3} working and placing +necessary results in @file{$3}, instead of just silently feeding them in +redo-stamp. + +redo implementations are already automatically record -ifchange on +@file{.do} files and -ifcreate on non-existing @file{.do} files. So why +they can not record redo-stamp the same way implicitly? No, Zen of +Python does not applicable there, because -ifchange/-ifcreate contradict +it already. + +Modern cryptographic hash algorithms and CPUs are so fast, that even all +read and writes to or from hard drive arrays can be easily checksummed +and transparently compressed, as ZFS with LZ4 and Skein/BLAKE[23] +algorithms demonstrate us. + +@command{goredo} includes @command{redo-stamp}, that really records the +stamp in the @file{.dep} file, but it does not play any role later. It +is stayed just for compatibility. + +@section Can removed .do lead to permanent errors of its non existence? + +Yes, because dependency on it was recorded previously. Is it safe to +assume that @file{.do}-less target now is an ordinary source-file? I +have no confidence in such behaviour. So it is user's decision how to +deal with it, probably it was just his inaccuracy mistake. If you really +want to get rid of that dependency knowledge for @file{foo/bar} target, +then just remove @file{foo/.redo/bar.dep}. + +@section Does redo-always always rebuilds target? + +@command{goredo}, together with @command{apenwarr/redo}, rebuilds target +once per @strong{run}. +Always rebuilds during every redo invocation, but only once during it +building. +@url{http://news.dieweltistgarnichtso.net/bin/redo-sh.html#why-built-twice, redo-sh} +has other opinion, that is why its @file{redo-sh.tests/always_rebuild_1} +will fail. Rebuilding of always-ed targets even during the same build +process ruins any redo's usability in practice. + +For example if my @file{.h} file contains source code's version number, +that is @command{git describe}'s output and all my other files depends +on that header, then any @command{redo-ifchange} of @file{.o} will lead +to @command{git describe} execution, that is rather heavy. Of course, +because of either hashing or possible @command{redo-stamp}-ing its +dependants won't be rebuilt further, but build time will be already +ruined. If you need to rebuild TeX documents (case mentioned in +redo-sh's FAQ) until all references and numbers are ready, then you must +naturally expectedly explicitly use while cycle in your @file{.do}, as +@command{apenwarr/redo} already suggests. diff --git a/features.texi b/features.texi new file mode 100644 index 0000000..5d2b634 --- /dev/null +++ b/features.texi @@ -0,0 +1,32 @@ +@node Features +@unnumbered Features + +@itemize + +@item explicit useful and convenient checks from @command{apenwarr/redo}: + @itemize + @item check that @file{$1} was not touched during .do execution + @item check that @file{stdout} and @file{$3} are not written simultaneously + @item check that generated target was not modified "externally" outside + the redo, preventing its overwriting, but continuing the build + @end itemize +@item targets, dependency information and their directories are explicitly + synced (can be disabled, should work faster) +@item file's change is detected by comparing its @code{ctime} and BLAKE3 hash +@item files creation is @code{umask}-friendly (unlike @code{mkstemp()} + used in @command{redo-c}) +@item parallel build with jobs limit, optionally in infinite mode +@item coloured messages (can be disabled) +@item verbose debug messages, including out-of-date determination, PIDs, + lock and jobserver acquirings/releases +@item displaying of each target's execution time +@item each target's @file{stderr} can be prefixed with the PID +@item optional statusline with currently running/waiting/done jobs +@item target's @file{stderr} can be stored on the disk with + @url{http://cr.yp.to/libtai/tai64.html, TAI64N} timestamp prefixes + for each line. To convert them to localtime you can use either + tai64nlocal utility from @url{http://cr.yp.to/daemontools.html, + daemontools}, or similar one: + @code{go get go.cypherpunks.ru/tai64n/cmd/tai64nlocal} + +@end itemize diff --git a/gore.do b/gore.do new file mode 100644 index 0000000..054f15e --- /dev/null +++ b/gore.do @@ -0,0 +1 @@ +echo YOU ARE LIKELY TO BE EATEN BY A GRUE >&2 diff --git a/goredo.info.do b/goredo.info.do new file mode 100644 index 0000000..93ac395 --- /dev/null +++ b/goredo.info.do @@ -0,0 +1,6 @@ +redo-ifchange *.texi VERSION +${MAKEINFO:-makeinfo} \ + -D "VERSION `cat VERSION`" \ + --set-customization-variable CLOSE_QUOTE_SYMBOL=\" \ + --set-customization-variable OPEN_QUOTE_SYMBOL=\" \ + --output $3 goredo.texi diff --git a/goredo.texi b/goredo.texi new file mode 100644 index 0000000..9271075 --- /dev/null +++ b/goredo.texi @@ -0,0 +1,42 @@ +\input texinfo +@documentencoding UTF-8 +@settitle goredo + +@copying +Copyright @copyright{} 2020-2021 @email{stargrave@@stargrave.org, Sergey Matveev} +@end copying + +@node Top +@top + +This is pure Go implementation of @url{http://cr.yp.to/redo.html, DJB's +redo} build system proposal. Originally it was just a rewrite of +@url{https://github.com/leahneukirchen/redo-c, redo-c}, but later most +features of @url{https://redo.readthedocs.io/en/latest/, apenwarr/redo} +were also implemented. Why yet another implementation? It is feature +full and has better performance comparing to shell and Python +implementation. + +It passes tests from +@url{http://news.dieweltistgarnichtso.net/bin/redo-sh.html, redo-sh.tests} +and implementation-neutral ones from @command{apenwarr/redo}. + +goredo is free software, licenced under +@url{https://www.gnu.org/licenses/gpl-3.0.html, GNU GPLv3}: +see the file COPYING for copying conditions. + +Please send questions, bug reports and patches to +@url{https://lists.cypherpunks.ru/mailman/listinfo/goredo-devel, goredo-devel} +maillist. Announcements also go to this mailing list. + +@insertcopying + +@include features.texi +@include notes.texi +@include cmds.texi +@include news.texi +@include install.texi +@include faq.texi +@include state.texi + +@bye diff --git a/install.texi b/install.texi new file mode 100644 index 0000000..f1ac4da --- /dev/null +++ b/install.texi @@ -0,0 +1,63 @@ +@node Install +@unnumbered Install + +Hopefully it should work on all POSIX systems. +Preferable way is to download tarball with the signature from website: + +@example +$ [fetch|wget] http://www.goredo.cypherpunks.ru/download/goredo-@value{VERSION}.tar.zst +$ [fetch|wget] http://www.goredo.cypherpunks.ru/download/goredo-@value{VERSION}.tar.zst.sig +$ gpg --verify goredo-@value{VERSION}.tar.zst.sig goredo-@value{VERSION}.tar.zst +$ zstd -d < goredo-@value{VERSION}.tar.zst | tar xf - +$ cd goredo-@value{VERSION} +$ GOPATH=`pwd` go build go.cypherpunks.ru/goredo +$ ./goredo -symlinks # create redo-* commands symlinks +$ export PATH=`pwd`:$PATH # let your system know about goredo +@end example + +@include download.texi + +You @strong{have to} verify downloaded tarballs integrity and +authenticity to be sure that you retrieved trusted and untampered +software. @url{https://www.gnupg.org/, GNU Privacy Guard} is used +for that purpose. + +For the very first time it is necessary to get signing public key and +import it. It is provided below, but you should check alternative +resources. + +@verbatim +pub ed25519/0x3A528DDE952C7E93 2021-01-09 [SC] + 7531BB84FAF0BF35960C63B93A528DDE952C7E93 +uid goredo releases +@end verbatim + +@itemize + +@item +@example +$ gpg --auto-key-locate dane --locate-keys goredo at cypherpunks dot ru +$ gpg --auto-key-locate wkd --locate-keys goredo at cypherpunks dot ru +@end example + +@item +@verbatiminclude PUBKEY.asc + +@end itemize + +It is also @command{go get}-able: + +@example +$ go get go.cypherpunks.ru/goredo +$ goredo -symlinks +@end example + +If you have problems with @code{*.golang.org}'s inability to verify +authenticity of @code{go.cypherpunks.ru} TLS connection, then you can +disable their usage by setting @env{GOPRIVATE=go.cypherpunks.ru}. You +can override CA certificate file path with @env{SSL_CERT_FILE} and +@env{GIT_SSL_CAINFO} environment variables. + +You can obtain development source code with +@command{git clone git://git.cypherpunks.ru/goredo.git} +(also you can use @url{https://git.cypherpunks.ru/goredo.git}). diff --git a/makedist.sh b/makedist.sh new file mode 100755 index 0000000..b2a1d0f --- /dev/null +++ b/makedist.sh @@ -0,0 +1,151 @@ +#!/bin/sh -ex + +cur=$(pwd) +tmp=$(mktemp -d) +release=$1 +[ -n "$release" ] + +git clone . $tmp/goredo-$release +cd $tmp/goredo-$release +git checkout v$release + +redo-ifchange module-name VERSION +mod_name=`cat module-name` + +######################################################################## +cat > download.texi < $texi < $texi < $tmp/includes <8 ------------------------ + +The main improvements for that release are: + + +------------------------ >8 ------------------------ + +goredo's home page is: http://www.goredo.cypherpunks.ru/ + +Source code and its signature for that version can be found here: + + http://www.goredo.cypherpunks.ru/download/goredo-${release}.tar.zst ($size KiB) + http://www.goredo.cypherpunks.ru/download/goredo-${release}.tar.zst.sig + +SHA256 hash: $hash +GPG key ID: 0x3A528DDE952C7E93 goredo releases +Fingerprint: 7531 BB84 FAF0 BF35 960C 63B9 3A52 8DDE 952C 7E93 + +Please send questions regarding the use of goredo, bug reports and patches +to mailing list: https://lists.cypherpunks.ru/pipermail/goredo-devel/ +EOF diff --git a/module-name.do b/module-name.do new file mode 100644 index 0000000..8284690 --- /dev/null +++ b/module-name.do @@ -0,0 +1,2 @@ +redo-ifchange go.mod +sed -n 's/^module //p' < go.mod diff --git a/news.texi b/news.texi new file mode 100644 index 0000000..5796ba6 --- /dev/null +++ b/news.texi @@ -0,0 +1,10 @@ +@node News +@unnumbered News + +@table @strong + +@anchor{Release 0.10.0} +@item 0.10.0 + Initial tarballed release. + +@end table diff --git a/notes.texi b/notes.texi new file mode 100644 index 0000000..a74a001 --- /dev/null +++ b/notes.texi @@ -0,0 +1,22 @@ +@node Notes +@unnumbered Implementation notes + +@itemize + +@item @file{all} target is default +@item @file{stdout} is always captured, but no target is created if it + was empty +@item empty targets are considered always out of date +@item @file{.do}'s @file{$3} is relative path to the file in target directory +@item @file{.do} search goes up to @file{/} by default, but can be + limited with either @env{$REDO_TOP_DIR} environment variable, or by + having @file{.redo/top} file in it +@item target's completion messages are written after they finish +@item executable @file{.do} is run as is, non-executable is run with + @code{/bin/sh -e[x]} +@item tracing (-x) can be obviously done only for non-executable @file{.do} +@item parallizable build is done only during @command{redo-ifchange} for + human convenience: you can globally enable @env{REDO_JOBS}, but + still do for example: @code{redo htmls infos index upload} + +@end itemize diff --git a/state.texi b/state.texi new file mode 100644 index 0000000..d4fa9db --- /dev/null +++ b/state.texi @@ -0,0 +1,26 @@ +@node State +@unnumbered State + +Dependency and build state is kept inside @file{.redo} subdirectory in +each directory related the build. Each corresponding target has its own, +recreated with every rebuild, @file{.dep} file. It is +@url{https://www.gnu.org/software/recutils/, recfile}, that could have +various dependency information (@file{dep.rec} with the schema +included): + +@example +Build: 80143f04-bfff-4673-950c-081d712f573d + +Type: ifcreate +Target: foo.o.do + +Type: ifchange +Target: default.o.do +Ctime: 1605721341.253305000 +Hash: f4929732f96f11e6d4ebe94536b5edef426d00ed0146853e37a87f4295e18eda + +Type: always + +Type: stamp +Hash: 5bbdf635932cb16b9127e69b6f3872577efed338f0a4ab6f2c7ca3df6ce50cc9 +@end example diff --git a/usage.go b/usage.go index caa905b..5779109 100644 --- a/usage.go +++ b/usage.go @@ -26,7 +26,7 @@ import ( ) const ( - Version = "0.9.0" + Version = "0.10.0" Warranty = `This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.