I've written up a fast-track for integrating mercurial into the Solaris
WOS, and would like some external review. Note that it's supposed to be
pretty simple -- outline the interfaces that are either visible to the user
or ones that should have some stability so that different versions can
interoperate and give a general architectural overview.
I'm using the new stability terminology, so "Committed" means you can only
make incompatible changes at a minor release with notice (and it's
generally frowned upon), and "Volatile" means it can change at any time for
any reason, and is generally expected to track a a quickly-moving
specification (though some semblance of stability would be nice, if
possible).
It's attached. I'd like to submit this to PSARC no later than Wednesday
next week, which should give me enough time to get it integrated for build
44.
Thanks,
Danek
1. Summary
This project proposes to add the source code management (SCM)
system Mercurial[1] to the SFW consolidation for delivery on
Solaris.
This project requests a minor release binding.
2. Background
The OpenSolaris project[2] introduced new requirements on the
development process for the components of Solaris which were
planning on being open-sourced. One set of requirements revolved
around the capabilities of the SCM that would be used[3]. After an
extended evaluation, it was determined that Mercurial would be the
most appropriate distributed SCM for OpenSolaris projects that
needed such a tool.
The version of Mercurial at the time of this writing is 0.9, though
this project is not specific about the version it intends to
integrate. Any architectural changes between 0.9 and future
versions will be ARCed prior to integration.
3. Architecture
Mercurial is a distributed SCM, meaning that development on a
project managed by Mercurial can be done in parallel in different
repositories scattered across different machines, each containing
the full history of the project. As developers wish to create a
release, one such repository may be designated as the "primary",
and changes from other repositories merged into it without loss of
history. All repositories for a project may be considered peers,
though convention may assign a heirarchy to them.
Code sharing can be performed via filesystem access, including NFS,
http/https, and stdio pipes (normally tunnelled by ssh), though the
http support is currently restricted to read-only operations.
Mercurial doesn't provide any native form of access control or
authentication, instead relying on the underlying access mechanisms
(filesystem ACLs, http authentication, etc.) or custom extensions
to do so.
Mercurial is written in Python, with a few core pieces (amounting
to about 5% of the code) written in C for performance. It is
released under version 2 of the GPL.
Mercurial may be extended in two ways. Extensions may be written
to augment core functionality -- adding new commands is the primary
target -- and per-repository or per-user hooks can be written which
Mercurial will run before or after certain transactions on the
repository.
This project depends on PSARC/2005/532[4] to provide Python 2.4
(and to move Python to its final location in /usr/bin), as well as
PSARC/2005/555[5] to provide a standard location and mechanism on
Solaris to find non-core Python extensions.
4. Interfaces
Interface Stability Notes
--------- --------- -----
SUNWmercurial Committed Package name
/usr/bin/hg Committed Executable location
/usr/bin/hgmerge Committed Executable location
hg commandline Volatile
"mercurial" Committed Python package name
for core functionality
"hgext" Committed Python package name
for extensions
/etc/mercurial/hgrc Committed Path to system config
file
/etc/mercurial/hgrc.d/*.rc Committed Pattern of other
system config files
$HOME/.hgrc Committed Path to user config file
hgrc contents Volatile
<repo>/.hgignore Committed List of files to ignore
/usr/demo/mercurial Committed Place to put contributed
files from the hg distro
All other components of Mercurial which appear to be interfaces
(paths, environment variables, hook names, class information, etc.)
are Volatile. In particular, even though the Mercurial community
is committed to maintaining backwards compatibility in its
repository file format (binary) and the http- and stdio-based wire
protocol, these interfaces are also considered Volatile. Future
project maturity may result in the upgrading of the stability of
these interfaces.
5. References
1. http://www.selenic.com/mercurial/
2. http://www.opensolaris.org/os/
3. http://www.opensolaris.org/os/community/tools/scm/
4. PSARC/2005/532 Python migration from /usr/sfw to /usr and upgrade to
v2.4.x
5. PSARC/2005/555 Python "vendor-packages" support
_______________________________________________
tools-discuss mailing list
[email protected]