In an e-mail posted on the OpenJDK mailing list, Joe Darcy, JDK Engineer at Oracle, proposed a consolidation of their Mercurial (dubbed “Hg”) source control repositories for JDK 10 OpenJDK into a single repository.
JDK 9 OpenJDK is currently organized into an Hg “forest,” a collection of multiple related Hg repositories. Eight repositories make up the JDK 9 forest:
The motivation behind this proposed consolidation, as stated in JEP 296, is to eliminate the disadvantages of maintaining multiple repositories. For example, it is not possible to propagate a single bug fix that spans multiple repositories with the current forest arrangement. One advantage of a single repository provides the benefit of tracking changes to sets of files as opposed to individual files.
Alternatives proposed in the JEP were (a) staying with the current Hg forest, and (b) consolidating only a core subset of the repositories, but the latter was rejected. It was also decided to not include JavaFX into the Hg forest.
Despite posting anticipated Q&A in the proposal, a debate over scalability, performance, and other difficulties emerged from various contributors especially in this response in which a litany of concerns was presented. In an apparent attempt to bring the focus back to the “big picture,” Oracle language architect Brian Goetz, explained:
OpenJDK developers are not the only stakeholders here. By aligning more with the way the rest of the world develops -- all code in one linearized, transactionally updated repo -- it increases the feasibility / reduces the cost of tools like 'bisect' to determine where a fault was introduced. This reduces SQE costs and increases product quality -- something we all have a stake in. David Lloyd has pointed out other tooling-related benefits, such as making it easier to maintain a git mirror.
Most of the objections raised so far have been "(I think they will) make my life harder." Fair enough; people should be their own advocates. But let's not forget the significant benefits that accrue to *everyone* as a result, and keep those in mind when judging the pros and cons.
This isn’t Oracle’s first attempt to clean up the OpenJDK Hg forest. In November 2013, Darcy proposed to “use an alternate forest arrangement for JDK 9 that will dramatically reduce the propagation time of fixes across the set of forests.”
Resources
A prototype was created to test consolidation of an Hg forest, and the supporting Python scripts (detailed below) are available for download.
convert.py
: prepares for the unification by converting each repository in the forest into the appropriate format.unify.py
: unifies all the converted repositories from a forest into one repository.verify.py
: verifies that the file contents of the forest and the unified repository are equal at every tag in the history. This is done with the help of the diff(1) program.
The prototype contains eight repositories that will be combined into a single repository using the Python scripts. History, changeset comments, and original creation dates are preserved. The single repository will contain single top-level src
directory. For example:
$ROOT/jdk/src/java.base
$ROOT/langtools/src/java.compiler
becomes:
$ROOT/src/java.base
$ROOT/src/java.compiler