You are viewing a plain text version of this content. The canonical link for it is here.
Posted to repository@apache.org by Tim Anderson <tm...@netspace.net.au> on 2003/11/15 04:21:17 UTC
[proposal] common build version specifier - v0.1
Overview
========
This proposal extends the URI Syntax proposal, v0.2:
http://nagoya.apache.org/eyebrowse/ReadMsg?listName=repository@apache.org&ms
gNo=367
The key aims of this proposal are to:
. formalise version-specifier for projects which
provide formal and interim builds;
. provide a set of best practices for such projects; and
. enable tools to construct a URI to unambigously locate a
particular project version using a set of known criteria
URI Components
==============
An absolute repository URI is written as follows:
repository-uri = access-specifier "/" product-specifier "/"
version-specifier "/" artifact-specifier
This proposal defines version-specifier as follows:
version-specifier = build
build = formal-build | interim-build
formal-build = [formal-build-designation "/"] version
interim-build = interim-build-designation "/" version
[ "/" interim-version ]
interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
formal-build-designation = "release" | ...
interim-build-designation = "interim" | "nightly" | "snapshot" | ...
version = "latest" | *pchar
(pchar is per http://www.ietf.org/rfc/rfc2396.txt)
Build
-----
Builds are separated into formal and interim builds.
A formal build may be a final or milestone release. e.g:
"1.0", "release/1.0", "1.0-beta1", "release/1.0-rc1"
An interim build is an informal release, produced by
a nightly build or an ad-hoc snapshot. e.g:
"nightly/1.0/20031113", "snapshot/1.2beta1".
Version
-------
Version is either "latest" or arbitrary, determined by the
project or deployment tool.
"latest" always refers to the latest version of a particular
build, and may be supported using symbolic links, or via http
redirection.
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
Interim version
---------------
The interim version is either a timestamp, or "latest".
"latest" always refers to the latest interim version and
may be supported using symbolic links, or via http
redirection.
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
Rationale
=========
Optional build designation for formal builds
--------------------------------------------
<formal-build> is defined as:
formal-build = [formal-build-designation "/"] version
formal-build-designation = "release" | ...
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/...
http://repo.apache.org/apache/commons-cli/l.1/...
Mandatory version in interim builds
-----------------------------------
<interim-build> is defined as:
interim-build = interim-build-designation "/" version
[ "/" interim-version ]
interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
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/...
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
Build designation naming conventions
------------------------------------
<formal-build-designation> and <interim-build-designation> are
defined as:
formal-build-designation = "release" | ...
interim-build-designation = "interim" | "nightly" | "snapshot" | ...
In other words, tools may use "release", "interim" etc, but may also
extend them to define their own.
Tool support
============
Tools can unambigously locate a project version given the following
criteria:
. formal or interim build-designation
Optional. If not specified, assume formal build.
. version
Mandatory.
. interim-version
Optional. If specified, build designation must also be specified.
Example 1.
----------
Given:
organisation = "apache"
project = "commons-cli"
version = "1.0"
build-designation =
interim-version =
The URI would be:
http://repo.apache.org/apache/commons-cli/1.0
Example 2.
----------
Given:
organisation = "apache"
project = "commons-cli"
version = "latest"
build-designation =
interim-version =
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"
project = "commons-cli"
version = "1.1"
build-designation = "snapshot"
interim-version = 20031113
The URI would be:
http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113
Example 4.
----------
Given:
organisation = "apache"
project = "commons-cli"
version = "1.1"
build-designation = "snapshot"
interim-version = "latest"
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"
project = "commons-cli"
version = "latest"
build-designation = "snapshot"
interim-version = "latest"
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
RE: [proposal] common build version specifier - v0.1
Posted by Tim Anderson <tm...@netspace.net.au>.
> From: Adam R. B. Jack [mailto:ajack@trysybase.com]
> Sent: Saturday, 15 November 2003 2:54 PM
> To: repository@apache.org
> Subject: Re: [proposal] common build version specifier - v0.1
>
>
> Tim,
>
> I *love* your specifications, I really appreciate the
> clear/concise/explicit
> nature of them. I only wish you'd use Wiki not EyeBrowse as your
> persistent
> documentation tool. Wiki has versioning (so we can see older copies should
> we need to refer back) and such, and allows other to make (respectful)
> changes, and allows a view not cluttered throughout mail threads.
>
> I'm game to be your cut-n-paste-wallah if you really need one, but please
> (at least) refer to your proposals in the Wiki.
>
> regards
>
OK. I'm not particularly wiki literate (the formatting is a bit
off), but I've added/updated the proposals at:
http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/Proposals
Regards,
Tim
Re: [proposal] common build version specifier - v0.1
Posted by "Adam R. B. Jack" <aj...@trysybase.com>.
Tim,
I *love* your specifications, I really appreciate the clear/concise/explicit
nature of them. I only wish you'd use Wiki not EyeBrowse as your persistent
documentation tool. Wiki has versioning (so we can see older copies should
we need to refer back) and such, and allows other to make (respectful)
changes, and allows a view not cluttered throughout mail threads.
I'm game to be your cut-n-paste-wallah if you really need one, but please
(at least) refer to your proposals in the Wiki.
regards
Adam
----- Original Message -----
From: "Tim Anderson" <tm...@netspace.net.au>
To: <re...@apache.org>
Sent: Friday, November 14, 2003 8:21 PM
Subject: [proposal] common build version specifier - v0.1
> Overview
> ========
>
> This proposal extends the URI Syntax proposal, v0.2:
>
http://nagoya.apache.org/eyebrowse/ReadMsg?listName=repository@apache.org&ms
> gNo=367
>
> The key aims of this proposal are to:
>
> . formalise version-specifier for projects which
> provide formal and interim builds;
>
> . provide a set of best practices for such projects; and
>
> . enable tools to construct a URI to unambigously locate a
> particular project version using a set of known criteria
>
>
> URI Components
> ==============
>
> An absolute repository URI is written as follows:
>
> repository-uri = access-specifier "/" product-specifier "/"
> version-specifier "/" artifact-specifier
>
> This proposal defines version-specifier as follows:
>
> version-specifier = build
> build = formal-build | interim-build
> formal-build = [formal-build-designation "/"] version
> interim-build = interim-build-designation "/" version
> [ "/" interim-version ]
> interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
> formal-build-designation = "release" | ...
> interim-build-designation = "interim" | "nightly" | "snapshot" | ...
> version = "latest" | *pchar
>
> (pchar is per http://www.ietf.org/rfc/rfc2396.txt)
>
> Build
> -----
> Builds are separated into formal and interim builds.
>
> A formal build may be a final or milestone release. e.g:
> "1.0", "release/1.0", "1.0-beta1", "release/1.0-rc1"
>
> An interim build is an informal release, produced by
> a nightly build or an ad-hoc snapshot. e.g:
> "nightly/1.0/20031113", "snapshot/1.2beta1".
>
> Version
> -------
> Version is either "latest" or arbitrary, determined by the
> project or deployment tool.
> "latest" always refers to the latest version of a particular
> build, and may be supported using symbolic links, or via http
> redirection.
>
> 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
>
> Interim version
> ---------------
> The interim version is either a timestamp, or "latest".
> "latest" always refers to the latest interim version and
> may be supported using symbolic links, or via http
> redirection.
>
> 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
>
> Rationale
> =========
>
> Optional build designation for formal builds
> --------------------------------------------
>
> <formal-build> is defined as:
> formal-build = [formal-build-designation "/"] version
> formal-build-designation = "release" | ...
>
> 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/...
> http://repo.apache.org/apache/commons-cli/l.1/...
>
>
> Mandatory version in interim builds
> -----------------------------------
>
> <interim-build> is defined as:
>
> interim-build = interim-build-designation "/" version
> [ "/" interim-version ]
> interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
>
> 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/...
> 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
>
>
> Build designation naming conventions
> ------------------------------------
>
> <formal-build-designation> and <interim-build-designation> are
> defined as:
>
> formal-build-designation = "release" | ...
> interim-build-designation = "interim" | "nightly" | "snapshot" | ...
>
> In other words, tools may use "release", "interim" etc, but may also
> extend them to define their own.
>
>
> Tool support
> ============
>
> Tools can unambigously locate a project version given the following
> criteria:
> . formal or interim build-designation
> Optional. If not specified, assume formal build.
> . version
> Mandatory.
> . interim-version
> Optional. If specified, build designation must also be specified.
>
> Example 1.
> ----------
>
> Given:
> organisation = "apache"
> project = "commons-cli"
> version = "1.0"
> build-designation =
> interim-version =
>
> The URI would be:
> http://repo.apache.org/apache/commons-cli/1.0
>
> Example 2.
> ----------
>
> Given:
> organisation = "apache"
> project = "commons-cli"
> version = "latest"
> build-designation =
> interim-version =
>
> 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"
> project = "commons-cli"
> version = "1.1"
> build-designation = "snapshot"
> interim-version = 20031113
>
> The URI would be:
> http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113
>
> Example 4.
> ----------
>
> Given:
> organisation = "apache"
> project = "commons-cli"
> version = "1.1"
> build-designation = "snapshot"
> interim-version = "latest"
>
> 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"
> project = "commons-cli"
> version = "latest"
> build-designation = "snapshot"
> interim-version = "latest"
>
> 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
>
>
RE: [proposal] common build version specifier - v0.1
Posted by Tim Anderson <tm...@netspace.net.au>.
> From: Nick Chalko [mailto:nick@chalko.com]
>
> http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/CommonB
> uildVersionSpecifier
> Currently has
> version-specifier = build
> build = formal-build | interim-build
> formal-build = [formal-build-designation "/"] version
> interim-build = interim-build-designation "/" version [ "/"
> interim-version ]
> interim-version = timestamp | latest
> formal-build-designation = "release" | ...
> interim-build-designation = "interim" | "nightly" | "snapshot" | ...
> version = version-name | latest
> version-name = pchar+
> timestamp = YYYYMMDD ["." HHMM [SS]]
> latest = "latest"
>
>
> I think we need (not sure of syntax)
>
> version-name = (~ formal-build-designation & ~
> interim-build-designation & ~ latest ) & pchar+
>
> In other words if formal-build-designation is optional then we can't
> name a version "release", "latest","snapshot" etc.
>
> Seems a reasonable restriction but we must annotate it.
>
Not sure either. Yours could be simplified to:
version-name = pchar+ & ~(formal-build-designation |
interim-build-designation | latest)
Also, formal-build-designation and interim-build-designation
could be tightened to remove "...", although this prevents
extension.
-Tim
(off till Thursday. No more noise from me till then :)
Re: [proposal] common build version specifier - v0.1
Posted by Nick Chalko <ni...@chalko.com>.
http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/CommonBuildVersionSpecifier
Currently has
version-specifier = build
build = formal-build | interim-build
formal-build = [formal-build-designation "/"] version
interim-build = interim-build-designation "/" version [ "/"
interim-version ]
interim-version = timestamp | latest
formal-build-designation = "release" | ...
interim-build-designation = "interim" | "nightly" | "snapshot" | ...
version = version-name | latest
version-name = pchar+
timestamp = YYYYMMDD ["." HHMM [SS]]
latest = "latest"
I think we need (not sure of syntax)
version-name = (~ formal-build-designation & ~
interim-build-designation & ~ latest ) & pchar+
In other words if formal-build-designation is optional then we can't
name a version "release", "latest","snapshot" etc.
Seems a reasonable restriction but we must annotate it.