Common Build Version Specifier

Version 0.2

Overview

This proposal extends the URI Syntax proposal: /URISyntax

The key aims of this proposal are to:

URI Components

An absolute repository URI is written as follows:

{{{ repository-uri = access-specifier "/" product-specifier "/"

This proposal defines version-specifier as follows:

{{{ version-specifier = build-version-specifier

Build

{{{ Builds are separated into formal and interim builds.

Version

{{{ Version is either "latest" or arbitrary, determined by the

E.g: {{{ http://repo.apache.org/apache/commons-cli/release/l.0/...

Interim version

{{{ The interim version is either a timestamp, or "latest".

E.g: {{{ http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...

Rationale

Optional build designation for formal builds

<formal-build> is defined as: {{{ formal-build = [formal-build-designation "/"] version

The formal-build-designation is optional for those projects which don't produce interim builds, or don't wish to add another directory for formal releases. E.g:

{{{ http://repo.apache.org/apache/commons-cli/l.0/...

Mandatory version in interim builds

<interim-build> is defined as:

{{{ interim-build = interim-build-designation "/" version

This enables support for multiple versions of builds, if there are two or more concurrent development streams.

E.g, to support nightly builds of versions 1.0 and 2.0 of commons-cli:

{{{ http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...

Build designation naming conventions

<formal-build-designation> and <interim-build-designation> are defined as:

{{{ formal-build-designation = "release" | ...

In other words, tools may use "release", "interim" etc, but may also extend them to define their own.

Note: tools which parse repository URIs may not be able to handle custom build designation names.

Tool support

Tools can unambigously locate a project version given the following criteria:

Example 1

Given: {{{ organisation = "apache"

The URI would be:   http://repo.apache.org/apache/commons-cli/1.0 

Example 2

Given: {{{ organisation = "apache"

The URI would be:   http://repo.apache.org/apache/commons-cli/latest 

If two versions of commons-cli are available, "1.0" and "1.1", the URI would resolve to:   http://repo.apache.org/apache/commons-cli/1.1 

Example 3

Given: {{{ organisation = "apache"

The URI would be:   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113 

Example 4

Given: {{{ organisation = "apache"

The URI would be:   http://repo.apache.org/apache/commons-cli/snapshot/1.1/latest 

If two snapshot builds of commons-cli 1.1 are available, "20031112" and "20031113", the URI would resolve to:   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113 

Example 5

Given: {{{ organisation = "apache"

The URI would be:   http://repo.apache.org/apache/commons-cli/snapshot/latest/latest 

If two versions or commons-cli are available, "1.0" and "1.1", and two snapshot builds of commons-cli 1.1 are available, "20031112" and "20031113", the URI would resolve to:   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113 

Appendix

Changes from 0.1

ASFRepository/CommonBuildVersionSpecifier (last edited 2009-09-20 23:33:15 by localhost)