The URISyntax proposal is silent on how to handle
nightly, release, snapshot, and latest builds.
This should be formalised. 

The current proposal has:
  product-specifier = organisation "/" project "/" version
where: 
  version = *pchar

To support nightlies etc, this leads to the possibility of 
artifacts named:
  http://repo.apache.org/apache/commons-cli/1.0/...
  http://repo.apache.org/apache/commons-cli/1.1/...
  http://repo.apache.org/apache/commons-cli/latest/...
    -> link to ../1.1
  http://repo.apache.org/apache/commons-cli/nightly-20031112/...
  http://repo.apache.org/apache/commons-cli/nightly-20031113/...
  http://repo.apache.org/apache/commons-cli/nightly-latest/...
    -> link to ../nightly-latest

Where *latest is a symlink to the latest version, to aid navigation.

Option 1. Specify version format
--------------------------------

To formalise the above, product-specifier could be changed to:
  product-specifier = organisation "/" project "/" [rtype "-"] version
  rtype = "nightly" | "snapshot"
  version = "latest" | YYYYMMDD ["-" HHMM [SS]] | *pchar

Cons:
. clutters the repository
. doesn't follow existing conventions, e.g:
  http://cvs.apache.org/builds/jakarta-commons/nightly/commons-cli/
. no facility to indicate snapshots or nightlies of a particular
  version, if two or more versions are being developed concurrently.

Option 2. Add build directory
-----------------------------

To reduce clutter, a new directory could be introduced to separate
releases from nightly and snapshot builds i.e:

  product-specifier = organisation "/" project "/" rtype "/" version
  rtype = "release" | "nightly" | "snapshot"
  version = "latest" | YYYYMMDD ["-" HHMM [SS]] | *pchar

E.g:
  http://repo.apache.org/apache/commons-cli/release/l.0/...
  http://repo.apache.org/apache/commons-cli/release/l.1/...
  http://repo.apache.org/apache/commons-cli/release/latest/... 
    -> symlink to ../1.1
  http://repo.apache.org/apache/commons-cli/nightly/20031112/...
  http://repo.apache.org/apache/commons-cli/nightly/20031113/... 
    -> symlink to ../20031113
  http://repo.apache.org/apache/commons-cli/snapshot/20030901-1032/...
  http://repo.apache.org/apache/commons-cli/snapshot/latest/...
    -> symlink to ../20030901-1032

Cons:
. no facility to indicate snapshots or nightlies of a particular
  version, if two or more versions are being developed concurrently.

Option 3. Concurrent version nightly/snapshot builds
----------------------------------------------------

To allow nightlies and snapshots of multiple versions, product-specifier
could be changed to:
  product-specifier = organisation "/" project "/" build
  build = release-build | interim-build
  release-build = "release" "/" version
  interim-build = itype "/" version "/" YYYYMMDD ["-" HHMM [SS]]
  itype = "nightly" | "snapshot"
  version = "latest" | *pchar

E.g:
  http://repo.apache.org/apache/commons-cli/release/l.0/...
  http://repo.apache.org/apache/commons-cli/release/l.1/...
  http://repo.apache.org/apache/commons-cli/release/latest/... 
    -> symlink to ../1.1
  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/latest/... 
    -> symlink to ../20031113
  http://repo.apache.org/apache/commons-cli/nightly/2.0/20031112/... 
  http://repo.apache.org/apache/commons-cli/nightly/2.0/20031113/... 
  http://repo.apache.org/apache/commons-cli/nightly/2.0/latest/... 
    -> symlink to ../20031113
  http://repo.apache.org/apache/commons-cli/snapshot/1.0/20030901-1032/...
  http://repo.apache.org/apache/commons-cli/snapshot/1.0/latest/...
    -> symlink to ../20030901-1032
  http://repo.apache.org/apache/commons-cli/snapshot/2.0/20031101-1452/...
  http://repo.apache.org/apache/commons-cli/snapshot/2.0/latest/...
    -> symlink to ../20031101-1452

Option 4. Concurrent version interim builds
----------------------------------------------------

An alternative to Option 3 would be to remove any  distinction 
from nightly and snapshot builds, as the difference 
IMO is only cosmetic:
  product-specifier = organisation "/" project "/" build
  build = release-build | interim-build
  release-build = "release" "/" version
  interim-build = "interim" "/" version "/" YYYYMMDD ["-" HHMM [SS]]
  version = "latest" | *pchar

E.g:
  http://repo.apache.org/apache/commons-cli/release/l.0/...
  http://repo.apache.org/apache/commons-cli/release/l.1/...
  http://repo.apache.org/apache/commons-cli/release/latest/... 
    -> symlink to ../1.1
  http://repo.apache.org/apache/commons-cli/interim/1.0/20031112/...
  http://repo.apache.org/apache/commons-cli/interim/1.0/20031113/...
  http://repo.apache.org/apache/commons-cli/interim/1.0/latest/... 
    -> symlink to ../20031113
  http://repo.apache.org/apache/commons-cli/interim/2.0/20031112/... 
  http://repo.apache.org/apache/commons-cli/interim/2.0/20031113/... 
  http://repo.apache.org/apache/commons-cli/interim/2.0/latest/... 
    -> symlink to ../20031113

Comments?

-Tim

Reply via email to