Package nl.toolforge.karma.core.manifest

The manifest package contains all classes that comprise the manifest domain of Karma.

See:
          Description

Interface Summary
Manifest  
 

Class Summary
AbstractManifest General stuff for a manifest.
DevelopmentManifest  
ManifestCollector Class that collects all manifests for a WorkingContext.
ManifestFactory Creation factory to be able to create Manifest instances.
ManifestHeader Represents the header of a manifest (its name and type).
ManifestLoader Factory class to create ManifestStructure instances.
ManifestStructure Mapping of a manifest file and its included manifest files (any level deep possible).
ReleaseManifest A ReleaseManifest is created when the Release Manager collects all stable versions of modules.
 

Exception Summary
ManifestException Exception thrown by the AbstractManifest Domain.
 

Package nl.toolforge.karma.core.manifest Description

The manifest package contains all classes that comprise the manifest domain of Karma. The Manifest is the entry-point.

Manifest Definition

The structure of a manifest is as follows:


<manifest name="oracle-11i-11.1" version="1-0">

  <modules>
    <module name="framework-services" type="src" location="local-cvs"/>
    <module name="webapp-usermanagement" type="src" location="local-cvs" version="1-0"/>
    <module name="service-spring" type="maven" location="local-subversion" development-line="BUGS"/>
    <module name="service-clientloader" type="src" location="local-cvs" development-line="MAIN" version="3-9"/>

  </modules>

  <include-manifest name="core-logging-4-0"/>
  <include-manifest name="core-utils-4-0"/>

</manifest>

This manifest consists of four modules directly, but also whatever modules (recursively) consist in manifests core-logging-4-0 and core-utils-4-0. The <module>-attributes define three types of characteristics for the module:

The name, type and location-attributes are mandatory. The version and development-line are optional attributes. The version-attribute combined with a development-line-attribute means that the module version is relative to a development line. A version-attribute alone would mean that the module version is relative to the main development line (the MainLine>-pattern, as defined by ... Verder uitwerken).

Software Configuration Management Aspects

Manifest

Versioning of manifests

Naming Conventions

The <manifest>-attribute has a version-attribute. The value of this attribute identifies which version of the manifest definition is used. It has nothing (!) to do with the version of the software component or application that the manifest represents.

The <name>-attribute of the manifest is one of the important versioning aspects. It is an identifier for the software component or application that it represents. Consider the following example: Oracle Corporation plans to release a new version of its database server product. Commercially, they call their product oracle-11i, and their release starts with version 11.1. The name of the manifest thus represents what the manifest represents.

Although an important artifact, the <name>-attribute of the manifest has no mandatory pattern it should match. This is to allow companies to implement their own scheme. When a new major release is coming up, a company may decide to start with a new manifest for that purpose, e.g. oracle-12i-1.0; the 'only' versioning scheme applied on manifests is what is maintained in the version control system where manifest files are stored. But that is not something that should be known

The Process

Types of Manifests

The software logistics process would require different types of manifests. That is, in the logical sense. We will discuss the technical implications later on in this description. When a product is planned, the development department would create a development manifest to collect all modules (and included manifests) for that product. During development, modules are changed, newer versions released and developers can optionally include.

Scenarios :
1. A separate manifest for each 'stage' in the software development cycle. component-1-0-frozen. 2. Have the process managed by Karma. Karma supports a process whereby the release manager can automatically create a stable manifest with the create-release -t [stable|frozen]-command. Verder uitwerken.

Thi

Versioning of modules


Module Creation

A modules' product life cycle starts when the module is created. The creation process is supported by Karma (the create-module command). Karma creates the module (template-driven, whereby the template defines which files and directories will be created) and versions the module 0-1 on the nl.toolforge.karma.core.vc.MainLine.

The module can now be used by developers (or other interested people, why not) and included in a manifest by adding the module definition in the manifest. The way the module is configured in the manifest defines how a developer can work with the module in that manifest. Effectively, the initial nl.toolforge.karma.core.module.Module#State of the module is defined by it. Applying no version-attribute nor a development-line-attribute indicates that the module is in DYNAMIC state and that the module can be set to WORKING state by the start-work-command to indicate that the developer

Promotion Model

Versioning of modules is quite a different ordeal compared to versioning of manifests. Modules are maintained by Karma in the sense that Karma manages the promotion of modules (comparable to what version control systems do).

The following example shows some of the logistics involved in the promotion of a module. Suppose we have the following manifest:



Note that the developer need not know about the intricacies of the version control system that is used as a backend. For the developer (and other roles that

Roles and Procedures


*** Have a good Karma ... ***



Copyright © 2002-2004 Toolforge. All Rights Reserved.