EMMA: project information for developers |
EMMA is an open source project hosted on SourceForge.net and released under a very liberal license. This web site section contains documentation for people who are or would like to become EMMA contributors.
EMMA CVS modules | ||
CVS "modules" are separate collections of code and content. At the moment, EMMA project contains the following modules:
-
emma: source code for EMMA core tools and ANT task definitions. Further details on how this module is set up can be found in EMMA codebase structure.
-
docs: source code for EMMA user documentation. This is kept in a separate module to help EMMA developers avoid having to download large amounts of EMMA documentation when setting up developer sandboxes.
-
site: source code for EMMA web site content. Keeping this a separate module allows us to version the site separately from end user documentation.
-
plugins: source code for EMMA plugins. Keeping this a separate module allows us to version plugins separately from the core code.
EMMA CVS structure: trunk and release branches | ||
Regardless of whether you are a committer or just want to contribute a small patch, understanding EMMA CVS organization is required knowledge.
EMMA employs a traditional trunk/branch organization that should be familiar to most software engineers. The goals here are to make any previously publicly released files re-buildable from a known CVS label as well as facilitate bugfixing in released versions independently from ongoing trunk work:
-
EMMA's CVS trunk is used for current work and early release candidates. Official trunk builds are distributed via emma-testing SourceForge file offering and are labeled as STABLE_major_minor_build in CVS;
-
When enough new functionality has been accumulated in the trunk for the next major or minor version, it is moved to a release path in a CVS branch. The branch is created with a BRANCH_major_minor CVS sticky branch tag. Note that the branch is always created at some STABLE_major_minor_build tag point on the trunk and this exact branching point is remembered using a BRANCH_ROOT_major_minor alias tag on the trunk;
-
Typically, the CVS branch undergoes some more release work before an official release branch build is made. Official release branch builds are distributed via emma-release SourceForge file offering and are labeled as RELEASE_major_minor_build in CVS;
-
At any point it is possible to concurrently work on future EMMA versions in the trunk and do bugfix patching in the release branches. As bugs are discovered and fixed, more RELEASE_major_minor_build builds and CVS tags are created as necessary, extending the appropriate branches.
This picture should help visualize EMMA CVS structure and the relevant CVS tags in use by the official build process:
The salient points here are that STABLE_-tags exist only on the trunk and that EMMA RELEASE_-offerings are made only from CVS release branches. Of course, other tags can be (and should be) used for major new feature work, so that it could be merged into the trunk or a release branch as transactionally as possible.
Build numbers | ||
The scheme used for labeling EMMA builds isn't particularly interesting (the numbers are automatically generated by the build). However, it is useful to know that between any two builds the one with a larger build number is more recent, regardless of major or minor versions.
EMMA distribution structure | ||
Just as there are trunk (STABLE_) and release branch (RELEASE_) builds of EMMA, build artifacts are distributed via their respective file offerings:
-
emma-testing: trunk builds made mostly for "early access" users and testers. These are made at STABLE_ CVS label points and may be ahead of the documentation in terms of EMMA features, so only the binary (e.g., *.jar) artifacts are distributed.
Because the official documentation may be out of sync with these early access releases, in general it is necessary to consult EMMA release notes to understand the changes. EMMA release notes are not cumulative (although this might change in the future).
-
emma-release: release branch and bugfix builds made for EMMA end users. These are made at RELEASE_ CVS label points and contain all binary artifacts, buildable sources, and end user documentation. Every effort should be made by the dev team to ensure that the documentation is consistent with the actual EMMA functionality within that point release.