News
****

Release 2.6.5
=============

   * Fix file's executable bit check, which may lead to inadmissible
     '/bin/sh' run in case of symbolic links presence.
   * Fix proper 'mtime''s nanoseconds storage.

Release 2.6.4
=============

   * Fix possible NFS locking issue.
   * Updated dependant libraries.

Release 2.6.3
=============

   * Updated dependant libraries.  Should fix workability on modern
     OpenBSD.

Release 2.6.2
=============

   * Integration tests do not depend on non-portable 'stat' command.

Release 2.6.1
=============

   * Integration tests do not depend on Python or Git.

Release 2.6.0
=============

   * Omit possible obtrusive error of non-existent '.dep' file opening
     of the failed target.

Release 2.5.0
=============

   * Prevent rare race in the code, where externally modified target may
     panic the program.

Release 2.4.0
=============

   * Continue regression fixing of 'redo-whichdo'.

Release 2.3.0
=============

   * Fix regressions in 'redo-whichdo' happened after huge refactoring.

Release 2.2.0
=============

   * Prefix target's output lines with the name of the target.

Release 2.1.0
=============

   * Mistakenly path to '.do' file was not absolute and OS can refuse to
     run it because it is not in '$PATH'.

Release 2.0.0
=============

   * Huge quantity of performance optimisations.

   * Fixed possible unexpected lock file closing.

   * When resulting target has the same contents, it does not replace
     already existing one.  That was done previously.  But now it also
     copies the file's mode flags to the target (for example making it
     executable).

   * If 'redo-*' command runs under control of another (top-level) redo,
     then it does not parse the flags as options and treat each argument
     as a target, allowing passing the targets with dashes in the
     beginning.

   * Prevented possible concurrent stderr writing by multiple running
     targets.

   * 'redo-depfix' command now always rewrites dependency files and
     calculates checksums of the files.

   * Own binary format is used for dependency files ('.dep'), instead of
     recfile ('.rec') one.  It is several times smaller and much faster
     to parse.  You must run 'redo-depfix' to convert all existing
     '.redo/*.rec' files to that binary format.

   * 'redo-dep2rec' command appeared, that can convert '.dep' to recfile
     on stdout.

Release 1.32.0
==============

   * Omit printing of the 'resource deadlock avoided' warning when
     trying to take the lock.

Release 1.31.0
==============

   * Fixed possible race when target can be built more than once.
   * Print out finished targets much more quickly.

Release 1.30.0
==============

   * Fixed wrong OOD-cache value of source file dependency.  Targets
     could be rebuilt without any reason.

Release 1.29.0
==============

   * Fix possible error when two always-ed targets are run
     simultaneously.
   * Updated dependant libraries.

Release 1.28.0
==============

   * Do not remove '.lock' files, that leads to possible races between
     running targets.  Although 'nncp-cleanup lock' can be used to
     cleanup.
   * Updated dependant libraries.

Release 1.27.1
==============

   * Fixed lack of '.redo.'-prefix in temporary file names.

Release 1.27.0
==============

   * Improved out-of-date check and '.do' files search performance,
     because of caching their results.

Release 1.26.0
==============

   * Debug output contained colour-related attribute even if
     '$NO_COLOR=1' was set.
   * Updated dependant libraries.

Release 1.25.0
==============

   * Target's lock file requires a token from the jobserver now.  So
     amount of simultaneously opened lock files depends on job slots
     available.

Release 1.24.0
==============

   * 'redo-cleanup tmp' also removes temporarily ('$3') created
     directories.

Release 1.23.0
==============

   * 'redo-ifchange''s '-f' option forces each target rebuilding.
     Comparing to 'redo', it will parallelize the process.
   * Inode's number is also stored as dependency information, just to
     prevent possible 'ctime' collision of two files.
   * Performance optimization: do not use target's temporary output file
     at all, if its hash equals to already existing target's one.  Just
     touch existing target file instead.

Release 1.22.0
==============

   * 'flock' locks replaced with POSIX 'fcntl' ones.  They could be more
     portable.
   * 'redo-depfix' command appeared, that traverses through all '.redo'
     directories and their dependency files, checks if corresponding
     targets has the same content but different 'ctime'/'mtime' values
     and rewrites dependencies with that updated inode information.
   * With '$REDO_STOP_IF_MODIFIED=1' environment variable redo will stop
     and fail if it meet externally modified file.  By default user is
     only warned about it, but building continues for convenience.

Release 1.21.0
==============

   * '$REDO_INODE_NO_TRUST' is replaced with '$REDO_INODE_TRUST'
     environment variable, that takes either 'none', or 'ctime' (the
     default one), or 'mtime' (new one).  Check documentation's separate
     page about that option.

Release 1.20.0
==============

   * Print warning message if both ifcreate and ifchange records were
     discovered after the target is done.

Release 1.19.0
==============

   * Skip target itself, when searching for corresponding '.do' file.
     For example 'default.do' must use '../default.do' instead of the
     self.

Release 1.18.0
==============

   * Fix regression of known OODs passing since 1.3.0, that leads to
     rebuilding of already built targets.

Release 1.17.0
==============

   * If 'redo*' process is killed, then it sends 'SIGTERM' to all his
     children too, properly terminating the whole job queue.

Release 1.16.0
==============

   * Unexistent targets are considered always out-of-date, as it should
     be.
   * Do not panic if '$REDO_LOGS=1' and we were unable to start the
     command.

Release 1.15.0
==============

   * Explicitly check if '$1' target is touched and then fail.
     Previously we check if '$1' was only altered.

Release 1.14.0
==============

   * Fixed 'redo-ifcreate''s targets proper relative paths to the
     target.

Release 1.13.0
==============

   * Use '.log-rec' extension, instead of '.log.rec', that won't collide
     with already existing '.log' and '.rec' in '.redo' directory.

Release 1.12.0
==============

   * Fix possible lack of success finish message printing if any of
     targets fail.

Release 1.11.0
==============

   * Fix nasty bug with incorrect '.redo/tgt.rec' files renaming.

Release 1.10.0
==============

   * 'redo-cleanup' now also cleans '.redo/tgt.log.rec' files.
   * Recursive logs do not require '.redo/tgt.rec' existence anymore.

Release 1.9.0
=============

   * Do not enable command line options not applicable to the command.
     For example '-j' option is only applicable to 'redo' and
     'redo-ifchange' commands.
   *    * '-dry-run' option is renamed to '-n'
        * '-logs' option is renamed to '-k'
        * '-silent' option is renamed to '-s'
   * When 'stderr' logs are kept, all environment variables, working
     directory, command line arguments, start/finish times, duration,
     participated PIDs, return codes are saved in corresponding
     '.redo/tgt.log.rec' file.  Some of them can be viewed with '-c'
     option to 'redo-log'.
   * 'redo-log''s '-r' option allows recursive, indented viewing of the
     whole redo commands invocations for the given target in serialized
     way.

Release 1.8.0
=============

   * Fixed possibly wrong relative path record of the dependency, when
     redo commands are run in different directory from the '.do'.
   * Fixed possible failing in 'redo-sources' if no '.dep' is found.

Release 1.7.0
=============

   * Optional compatibility (through '$REDO_MAKE={bmake|gmake}') with
     either NetBSD's bmake or GNU Make jobserver protocols, being able
     to tightly integrate 'goredo' with the 'make'.

Release 1.6.0
=============

   * 'redo-affects' command appeared, that shows all targets that will
     be affected by changing the specified ones.

Release 1.5.0
=============

   * 'redo-ood', 'redo-sources' and 'redo-targets' can optionally take
     list of targets to apply the command on, to narrow the result.
   * 'redo-sources' mistakenly missed '.do' files in the output.
   * 'redo-sources' now recursively searches for all source files, not
     the "first" depth level ones.

Release 1.4.1
=============

   * Even more simpler statusline cleaning function.

Release 1.4.0
=============

   * Fixed proper '-xx' and '$REDO_TRACE' workability, that previously
     was not applied to all targets.
   * Simpler statusline cleaning function, does not leading to
     whitespace junk after long lines.
   * Updated dependant libraries.

Release 1.3.0
=============

   * Experimental 'redo-sources', 'redo-targets' and 'redo-ood'
     commands.
   * Repetitive OOD determination optimization: pass all already known
     to be OOD targets to redoing targets.

Release 1.2.0
=============

   * Dependency files '.dep' extension changed to '.rec', to reflect its
     recfile format nature and editors file type better determination.
   * Reduce number of file descriptors kept open (1 instead of 4) while
     waiting for job slot token.

Release 1.1.0
=============

   * 'redo-cleanup' has '-dry-run' option.

Release 1.0.0
=============

   * 'Size' is stored in the state, for faster OOD detection.  Previous
     'goredo' state files won't work.
   * Setting of '$REDO_INODE_NO_TRUST' environment variable brings no
     trust to file inode's information (except for its size), forcing
     its checksum checking.
   * 'redo-whichdo' resembles 'apenwarr/redo''s one behaviour more.

Release 0.12.3
==============

   * Use an updated 'lukechampine.com/blake3' with possibly working
     arm64 macOS fix.

Release 0.12.2
==============

   * Try to fix failing 'lukechampine.com/blake3' on arm64 macOS.
   * Fixed tests permissions in the tarball.

Release 0.12.1
==============

   * Tarball uses 'vendor' directory without '$GOPATH' overriding.
     'goredo' and its dependencies anyway uses Go 1.12+ versions, that
     have 'vendor'-ing support.

Release 0.12.0
==============

   * Do not forget to save even output-less target as a dependency.
   * '-debug' option renamed to shorter '-d'.

Release 0.11.0
==============

   * Previously '$REDO_JOBS' overrided even explicitly specified '-j'
     option.  Fix that behaviour - command line options must precede
     environment variables.
   * BLAKE3 (https://github.com/BLAKE3-team/BLAKE3) replaces BLAKE2b
     hashing algorithm for even better performance.

Release 0.10.0
==============

   * Initial tarballed release.
