Updates the copyright to 2021 for all files that have a copyright. Files in our source code without the copyright header still do not receive one automatically. Additionally, backlisted files are also excluded.
Previously the copyright of chiliproject which references redmine stated a copyright of redmine up to and including 2017 which is not true for the code we have in here. Because of that I changed that to 2013
Instead of having the tree/hierarchy information for work packages and
the relations between the work packages separated into two tables all
the information is now stored in the relations table.
To support this, the typed_dag plugin is used.
Notable changes:
* relations_to and relations_from are swapped. relations_to has all
relations that point to another work package (from_id = work_package.id)
and relations_from contains all relations that lead to the work package
from another one (to_id = work_package.id). This change is merely in the
code. The db information is left untouched.
* For follows/precedes to_id and from_id are swapped in the db. Because
of that, "follows" is now the canonical name instead of "precedes". This is
done so that hierarchy relations and follows relations point into the
same direction which allows to easily detect cyclic relationships that
would lead to infinit scheduling.
* the columns `root_id`, `lft`, `rgt` do no longer exist in the wp
table.
* the column `relation_type` does no longer exist in the relations
table.
* For every type of relation a column (integer) does now exist in the
relations table (e.g. hierarchy, block, follow)
* Separate associations exist for every type of relation into two
directions. E.g. Work packages following the current one can be accessed
via `work_package.precedes`
save
The original nested_set implementation uses save on each node (issue,
project). With the callbacks defined on issues, this can lead to stale
object errors when an issues has been loaded by the rebuilding method
but changed by a callback.
The rebuild_silently! method can also take root nodes as their
parameter. With such provided the method will only fix their trees.
This is build upon by the selectively_rebuild_silently! method which
first looks for invalid nodes, determines their root node and then calls
rebuild_silently! with those root nodes. This should speed up rebuilding
on large trees.
Additionally, methods where added as a byproduct to retreive nodes
who's tree attributes are invalid.