
- 2.18 released -

Fix incorrect relese_root in bracket.conf.sample.

Add more hg support contributed by wiz.

Add DESTDIR support contributed by wiz.

Actually fix the repeated branch name in the title of the HTML report.

Fix the "bracket upgrade" command.

- 2.17 released -

Improve the documenation.

Don't repeat the branch name in the title of the HTML report
main page, as in "NetBSD-9/amd64-9".

When searching for error messages in the build log, recognize
"undefined reference" as an error message.

New meta-test "repeat".

New test "kgdb_remote".

Deal with patches containing non-ASCII characters.

When removing old build directories, deal with subdirectories lacking
read permission.

- 2.16 released -

When using the separate release directories introduced in 2.13,
limit their number according to a new configuration option
"keep_release_dirs", or if that is not present, "keep_test_dirs".

Avoid a module name conflict involving the name "html", affecting
matplotlib.dates via pyparsing.

Look back up to 1000 lines in the build log for errors (was 500).

New configuration option "build_from", the oldest source date the
"bracket refine" command should consider for building.  This is useful
for avoiding doomed attempts to build versions that are so old that
they no longer build on a modern build host.

- 2.15 released -

Add dark mode support.

When reporting a build error, look further back in the build log for
possible compiler error messages.

- 2.14 released -

Add CHANGES updates missing in 2.13.

- 2.13 released -

Miscellaneous bug fixes and documentation updates.

Separate the directory storing the built release from the
one where the test are run, and add a configuration variable
"release_root" to specify it.

Record the values of the configuration variables config_enable and
config_disable in the database.

Fix multiple bugs in "bracket setup" introduced in 2.12.

- 2.12 released -

Add a framework for using other version control systems besides CVS,
integrate some initial hg support code contributed by coypu, and add
some initial git support code.  The hg and git support are works in
progress and not yet functional.

- 2.11 released -

Add mkrepro test.

Don't abort when "report_noncompletion_reason" is enabled and a log
file is missing.

- 2.10 released -

Replace the use of "col -b" for stripping of non-printable characters
in console logs published on the web by native Python code, as the
Debian "col" will fail with "Invalid or incomplete multibyte or wide
character" on some inputs.

- 2.9 released -

Do not send email notifications for ATF test failures that are not the
most recent result or are older than a week.

Support running multiple builds in parallel, controlled by the new
configuration option "build_slots".

- 2.8 released -

Ignored malformed lines in the .db files, so that we can still generate
reports for other builds even if the .db file of one build has had
NULs appended due to a crash.

In cronjob.sh, do not attempt to raise the limit on the number of
processes, as the default is now sufficient and the attempt to raise
the limit could actually end up lowering it.

Fix failure to install the cronjob.sh script.

The build time reports from "bracket update-resource-reports" now show
separate traces by "njobs", the number of make jobs used in the build.

Include the variant in the HTML report title.

Increase the timeout of the pkgsrc test to 1 day.

Fix bugs in "bisect --auto", and support "bisect --auto atf_test ..."

Do not send email notifications for failures that are not the most
recent result.

- 2.7 released -

Add new command "print-lock-state".

Fix bisect without --auto broken in 2.6.

- 2.6 released -

You can now use "bisect --auto build" to find and bisect the latest
instance of build breakage/fixage, and similarly for "install" or any
other test that caches its result.

New configuration option "report_noncompletion_reason".

Fix broken suppression of duplicate ATF test failure notification
emails.

- 2.5 released -

Fix bug that could cause multiple source trees to be checked out
simultaneously despite a setting of keep_build_dirs="0".

Fix multiple Python 3 incompatibilities in "bracket schedule" command.

Look for the pattern 'make.*stopped' in the build log when deciding
what part to include in the email summary, as the pattern 'Error code
[0-9]+' no longer occurs since 2020.06.19.21.17.48.

Make cronjob.sh work when the bracket binary directory is not in the
default PATH.

- 2.4 released -

Fail if patches don't apply successfully.

Revert the change in 2.3 to only send build breakage/fixage email
notifications for the newest build.

Add some more tests and commands.

- 2.3 released -

Only send build breakage/fixage email notifications for the
newest build.

Require 4 ATF test failures in a row rather than 3 before sending
email notification.

Fix unicode issues in tb_size and accel keying in resource plots.

- 2.2 released -

Fixed multiple bugs in the "bracket schedule" command.

- 2.1 released -

Miscellaneous bug fixes and cleanups.

The "bracket run-external-test" command can now pass arguments to the
test.  For example, to test that the editors/emacs package builds on
-current, you can use "bracket run-external-test current pkgsrc
editors/emacs".

Add some rudimentary awareness of the CVS vendor branch.

Moved internals documentation from README to a new file INTERNALS.

The CPU model name is now stored in the database on Linux, too.

Support email notifications about failures to install and failures
to run the ATF tests to completion.  Enable by specifying the
configuration options notify_build_to and/or notify_install_to.
The notify_to configuration option is deprecated in favor of 
notify_build_to.

Providing the CVS date of a build as an URL fragment on the index page
now jumps directly to that build (assuming JavaScript is enabled).

- 2.0 released -

Python 3 is now supported (and preferred).

There is now experimental support for CVS branches.

Bracket now has a configure script and a "make install" target.  All
bracket commands should now be invoked via the installed "bracket"
driver script rather than by running individual Python scripts, e.g.,
"bracket notify" instead of "python2.7 bracket.py notify".

Removed timeplots.sh; use "bracket update-resource-reports" instead.

The default of the report_test_changes configuration option is now
true.

- 1.35 released -

Fix "cronjob.sh schedule" which was broken since 1.33.

Rename the extra_qemu_args configuration options to extra_vmm_args,
still accepting the old form for backwards compatibility.

Increase the number of build log lines archived from 1000
to 2000, for failed builds only.

- 1.34 released -

Add support for evbarm-aarch64 and sparc64.

Make test failures eligible for email reporting again once
the test has passed.

- 1.33 released -

Support xz compressed distribution sets.

Support ". file" to include another file in the configuration file.

Highlight the build identified by an URL fragment (if any)
in the on the commits (aka details) page.

Make the markers in the SVG build status graphs clickable.

The bracket version number is now stored in the file "version".

- 1.32 released -

When reporting changes in the ATF test status, report up to
100 individual results (increased from 10).

Python 2.5 and 2.6 are no longer supported.

Recover gracefully from failed evbarm builds.

Deal better with missing data when generating performance plots.

- 1.31 released -

Add support for evbarm-earmv7hf

In bracket.conf, shell-like variable expansion is now supported.

Fix parsing of dates like "3 months ago".

- 1.30 released -

More improvements to timeplot.py; added timeplots.sh.

Adjust rsync options to work reliably even when file sizes do not
change.

- 1.29 released -

Generate email headers to make failure and success notifications
form a thread.

Store schedule and cvs-update log files in a directory per year to
avoid running into host OS limits on the number of files per
directory.

- 1.28 released -

Send email notifications about broken ATF tests as part of running
notify.py.

Send an email notification when a broken build starts working again.

- 1.27 released -

More improvements to timeplot.py.

Added testcasetimes.py, tests/gdb_pie.py.

- 1.26 released -

Store build.sh environment in database

Improve timeplot.py

Add more tests

Reduce the maximum number of commits lines to include in a
notification email from 500 to 250, to avoid having the emails
moderated.

- 1.25 released -

In timeplot.py, add support for splitting the plot by qemu version.

Fix typos in schedule.py.

- 1.24 released -

Store the number and brand of CPUs used for the build in the
database, if available via sysctl.  The sysctl Python module
is now required.

Include a new script "timeplot.py" for plotting the CPU time used
for the build, install, or test phase.

Run the builds under "nice" in an attempt to reduce the number
of test failures caused by unpredictable CPU performance.

When grouping commits into clusters, take the committer name into
account.

You can now ask a running schedule.py to stop using schedule.py --stop.

In the test result graphs, show both expected and unexpected failures.

If a failure notification email would list more than 500 file
revisions, show just a list of committers instead to keep the
size of the email reasonable.

Don't fail with 'file exists' when archive_dir is set and we do more
than one successful build of the same version.

Save the full build.sh command in bracket.db as build_sh_cmd.

Fix yet another notify_envelope_to bug.

- 1.23 released -

Change the format of the date string argument to "cvs checkout -D" to
one that recent non-NetBSD versions of CVS accept; ironically enough,
they no longer accept the format CVS itself uses in the respository.

Make notify_envelope_to optional as documented.

- 1.22 released -

If build_target is not specified in the configuration, use
a default of "release iso-image".

Take the notification envelope address from the configuration
variable notify_envelope_to as documented, not envelope_to.
This fixes a lack of email notifications in 1.21, which
had introduced a check that the variable was set, and was
checking the wrong variable.

Add another blacklist entry.

- 1.21 released -

A range of CVS dates can now be blacklisted for building by creating
a .bl file in the blacklists/ directory.  Use this to avoid building
recent versions that create directories that cannot be removed using
rm -rf.

- 1.20 released -

Fixed issue where getdates.sh would try to do an incremental update
on the first run and fail.

In atf-summary.py, distinguish between failures and tests that did not
run.

- 1.19 released -

Replaced checkout.sh by python code in bracket.py.

New configuration option "debug_build".

Replaced do-build.sh and choose-patches.py by python code in bracket.py.

Size graph Y axis dynamically to deal with the sudden increase in the
number of build log lines due to recent make(1) changes.

Fix error "global name 'ts2py' is not defined" when attempting to send
email notification.

Fix another source of broken links in use_subdir_per_year="0" mode.

Fix bugs that made all locks exclusive (write) locks.

- 1.18 released -

Fix syntax error in refine.py.

- 1.17 released -

New command line option for report.py: --full

Use a read-write lock for repository access.

The lists of new ATF test failures now link to the HTML
reports.

Fix incorrect HTML file names and URLs causing broken links
in use_subdir_per_year="0" mode.

- 1.16 released -

Fix bug introduced in 1.15 where a report could not be updated if it
did not already exist.

- 1.15 released -

New configuration option "report_test_changes" to enable the
summaries of changes in ATF test results; they reports are now
disabled by default.

To speed up report generation, only regenerate montly summary pages
when there have been changes,

- 1.14 released -

Include summaries of changes in the ATF test results in the per-build
results in the details pages.

Fix bug that caused the HTML output to lack the status of the latest
build until its tests finished.

Plot graphs using py-matplotlib instead of gnuplot.

Split the result and html directories into one subdirectory per year
by default.  To keep the old directory structure, set
use_subdir_per_year="1" in the configuration.

- 1.13 released -

Enable plotting of test failure counts.

Eliminate the global lock.

Add some more bisection example scripts.

Add schedule.py, a work-in-progress implmentation of priority
scheduling of build and test jobs.

Fix some visual nits in the gnuplot output.

Maintain an index mapping commit numbers to offsets into the "commits"
file in $db_dir/offsets.hex to speed up the get_commits() function.

Find the name of the SPARC install ISO by globbing, since it is
no longer fixed.

- 1.12 released -

The "archive_root" configuration option is now superseded by
"golden_archive_root", and will hold only releases that pass all
tests.  Use "keep_golden_archive_dirs" to specify how many to keep.
Also, if the tests panic the kernel, save the evidence under
"panic_archive_root", up to "keep_panic_archive_dirs" copies.

New configuration option max_interval, specifying the maximum amount
of time refine.py allows between two adjacent builds without deciding
to do an additional build near the midpoint of the interval (assuming
there are commits between the builds).  The default is 57600 seconds
(16 hours).

New configuration options extra_qemu_install_args,
extra_qemu_test_args, extra_anita_install_args, and
extra_anita_test_args.

New configuration option "build_target", specifying the target argument
passed to build.sh.  The default is "release iso-image".

Split the work directory into separate "build" and "test" directories,
to enable building on a ramdisk without having to also keep the
releases being tested on it, thereby drastically reducing the amount
of RAM needed.  This change is not backwards compatible with existing
configuration files: the new configration option "test_root" is
required, the "build_root" can now be shared between architectures,
and "keep_work_dirs" has been split into two options,
"keep_build_dirs" and "keep_test_dirs".

New configuration setting "hints_file".  When pointed at an events.dat
file produced by another bracket installation, this helps refine.py
choose its bisection points more intelligently by taking advantage of
the work already done by that other installation.

A machine-readable list of "eventful" CVS dates is now published in
the file events.dat at the root of the HTML tree.

- 1.11 released -

Tweak the heuristics for extracing the relevant part of the build log.

In notify.py, ignore commits from after or just before the start of
the repository rsync, to reduce the risk of getting partial commits.

Provide more detailed logging of how long the various stages take.

- 1.10 released -

Remove inadvertantly committed test code from getdates.sh.

Rephrase the subject line of email notifications.

New configuration setting "notify_reply_to".

- 1.9 released -

Fix bug that caused the host_cppflags configuration option to be ignored.

Add support for archiving successfully built releases, enabled by setting
"archive_root" in bracket.conf.

Notification emails can now contain a link to the web site, enabled
by setting "url_base" in bracket.conf.

Really don't send multiple email notifications when notify.py is run
multiple times after a build failure without any commits having been
made between runs.

- 1.8 released -

In the HTML ATF output, fix links to PRs whose category contains a dash,
like port-amd64.

- 1.7 released -

Don't remove work directories prematurely when running with a low
value for keep_work_dirs.

Don't send multiple email notifications when notify.py is run multiple
times after a build failure without any commits having been made between
runs.

New configuration setting "variant".

Log the amount of time spent waiting for locks, updating the
repository, etc.

Rephrase the notification emails.

- 1.6 released -

Support running builds, installs and tests of different versions
in parallel, to better take advantage of multicore machines.

Postprocess HTML reports as they are put in the html directory instead
of just hardlinking them as-is, reducing or eliminating the need for
CGI processing on the web server.  Also, ship the .svg and
commits-*.html files to the web server compressed.  Existing web
server configurations need to be updated to accommodate these changes.

New configuration setting "update_frequency".

Miscellaneous cleanups and bug fixes.

- 1.5 released -

Don't generate gnuplot output for the time between the first build in
the database and report_from_year/report_from_month.

Fix trylock() on NetBSD hosts, where flock returns EAGAIN (35) rather
than EWOULDBLOCK (11) when the lock is already held.

New optional configuration option update_repo.  Set to "0" to suppress
the repository update step in notify.py; this is useful when running
tests on multiple architectures, in which case one of them can do the
updates and the others will then do builds from the same source dates.

Fix plot-breaks.sh to use "$python" from bracket.conf instead of just
"python".

- 1.4 released -

Support running tests in parallel as long as they are for different
ports.

New mandatory configuration option arch_root.

- 1.3 released -

Support the disk usage reporting of still-unreleased anita 1.20.

Add anchors to the monthly summary HTML to support links to specific
CVS dates.

Miscellaneous minor fixes.

- 1.2 released -

The refine.py script now pinpoints changes in the boot, install,
and test completion status, not just build status.

Fixed incorrect references to __name__.

- 1.1 released -

Fixed non-working email notification code.

- 1.0 released -
