Tim:
My initial impression is that all the following could be expressed as part of a spec. one-level-up from the artifact spec. Everything below is dealing with the notion of the usage of the repository for a particular purpose - namely the registration of artifacts arising from development processes. It would be nice if we could draw a line between the repository in its role as "artifact retrieval" as distinct from the *usage* of the repository for a particular domain objective.
Personally I figure this can be archived by layering on a usage specific set of rules/best-practices on top of the [version] element.
Cheers, Steve.
Tim Anderson wrote:
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
--
Stephen J. McConnell mailto:[EMAIL PROTECTED]
|------------------------------------------------| | Magic by Merlin | | Production by Avalon | | | | http://avalon.apache.org/merlin | | http://dpml.net/ | |------------------------------------------------|