Svn structure

Status

The prefered root URL is: http://svn.magnolia-cms.com/svn/ All paths mentioned below are relative to this.

Since August 28-29 2008, our Subversion repository's structure has been changed. Below is the new structure. If you're lost, have a look at the Previous SVN structure.

Along this change come a few side-effects and benefits:

  • Each top-level directory (build, community, enterprise, internal, projects) has its own sandbox and graveyard folders.
  • Simplified maintenance, specifically for permissions: it should now be much easier to have contributors for specific modules.
  • Restructured POM files: we'll have parent POM files for modules, ee-modules, projects, etc, so this will hopefully be the end of problems like deployments to the wrong maven repository, permissions, etc.. and should simplify everyone's poms, since it won't need repositories etc.
  • The 2 above points made setting up Nexus easier.

Scripts

In each top-level directory has a set of scripts: newmodule.sh, checkout.sh and all.sh.

  • newmodule.sh : creates new modules on the svn repo along with their t-t-b directories, and updates checkout.sh and all.sh accordingly. If you don't use that script to add a module, please update the two manually, or be prepared to suffer my wrath.
  • checkout.sh : checks out the content of the trunks from this folder into aptly-named local folders (i.e checks out .../foobar/trunk into foobar/)
  • all.sh : executes a shell command on each of the know modules. Typically usages would be ./all.sh svn status to execute svn status at once on all modules or ./all.sh mvn clean to clean all, eventhough these are not linked through a maven reactor.

So if you're on a *nix system, you're more than welcome to use these files. The general procedure would thus be to checkout the root of a top-level directory in a non-recursive manner, which is typically done with the --depth=files switch if your client supports Subversion 1.5+.

For example:

svn co --depth=files http://svn.magnolia-cms.com/svn/build
cd build
./checkout.sh

/build

This is where all build-related tools, scripts etc end up. These are usually pretty stable, and can be released quickly.

  • magnolia-parent-pom is our supa-dupa-meta-giant-parent pom.
  • magnolia-parent-pom-maven-plugin is the parent pom we share for our custom Maven plugins.
  • the parent poms under poms/ (magnolia-parent-pom-*) have much more stuff defined: plugins, a couple of really basic dependencies (servlet-api, jcr, ...). Since these depend on our custom plugin, they had to be separated from the magnolia-parent-pom: they extend it, but they have a separate lifecycle, are not built together. Obviously, we'll try to keep all versions in synch and release new versions of magnolia-parent-pom and the others within the same shortest unit-of-time possible.

This directory is readable by anyone, and Magnolia committer can, well, commit.

Here's an overview of what's currently in there :

build/
     /magnolia-parent-pom/t-t-b/pom.xml : the general parent pom. Parent of all parents.
     /magnolia-parent-pom/t-t-b/maven-plugin/pom.xml : a parent pom for our plugins.
     /maven-plugins
                   /maven-site-skin/t-t-b
                   /magnolia-build-tools/t-t-b
                   /magnolia-bundle-assembly/t-t-b
                   /maven-bundle-plugin/t-t-b
                   /maven-setproperty-plugin/t-t-b
     /poms
          /t-t-b : reactor project with a different parent pom for each type of project
                /pom.xml
                /ce/pom.xml
                /community-module/pom.xml
                /ee/pom.xml
                /project/pom.xml
                /internal/pom.xml

note: t-t-b stands for /trunk, /tags, /branches.

/community

This contains the core of Magnolia. All the community code is here.

  • magnolia : the main project, contains the base of Magnolia, from magnolia-core to magnolia-empty-webapp and the basic modules.
  • modules : each community module which is not part of the default magnolia-empty-webapp is here. Each has its own lifecycle and thus its own ttb folders.
  • bundle : a reactor project that bundles Magnolia together in final deliverables: a webapp bundled with dms and samples, a Tomcat archive pre-installed with 2 copies of this webapp (magnoliaAuthor and magnoliaPublic). It currently also runs some integration tests, but these are just in their inception (just a proof of concept, really) and will possibly move to another location.
  • archetypes : Maven archetypes for quickstart new Magnolia-related projects. Currently being rewritten, but will provide skeletons for Magnolia-based webapps, 3rd party Magnolia modules and even one for our own modules.

You will notice that the top directory currently only has a checkout.sh script, and only the modules/ subfolder has the famous newmodule.sh, checkout.sh and all.sh threesome. This might change in the future.

This directory is readable by anyone, and Magnolia committers can, well, commit.

Here's an overview of what's currently in there :

community/
          magnolia/t-t-b
          modules/
                  magnolia-module-*/t-t-b
          bundle/t-t-b
                     
          archetypes/t-t-b/
                           maven-archetype-magnolia-module (for external modules / sample)
                           maven-archetype-magnolia-module-internal (for our modules)
                           maven-archetype-magnolia-webapp
          graveyard/
                    magnoliaQT/

note: t-t-b stands for /trunk, /tags, /branches.

/enterprise

This contains all modules and bundles for Magnolia Enteprise Edition.
The access to this directory is restricted.

/internal

This contains all the internal projects of Magnolia International (our website, the registration webapp, the license generator, ...)
The access to this directory is restricted.

/projects

This contains all projects, i.e Magnolia-based projects hosted by us for our customers or partners.
The access to this directory and subdirectories is restricted.

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.