Here's a second draft of the proposal, incorporating the comments I've
gotten so far, as well as the results of a discussion with Bryan about the
stability of the hg subcommands and the hgrc contents.

In general, I've chosen Committed over Uncommitted because I want people to
be able to write scripts without contracts, and because (at least at the
moment) it's not too hard to preserve compatibility if the external tree
does something weird.

The release binding is still up in the air given my message from earlier
today, though the proposal would be fine with either Patch or Minor.

Thanks for your review!

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 Patch 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 a byte-stream protocol (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

        Exported Interface              Stability       Notes
        ------------------              ---------       -----
        SUNWmercurial                   Committed       Package name
        /usr/bin/hg                     Committed       Executable location
        /usr/bin/hgmerge                Committed       Executable location
        hg commandline                  Committed       options, subcommands
                                                        and their options
        hg backout                      Volatile
        hg clone                        Volatile
        hg copy                         Volatile
        hg locate                       Volatile
        hg manifest                     Volatile
        hg merge                        Volatile
        hg parents                      Volatile
        hg pull                         Volatile
        hg rename                       Volatile
        hg revert                       Volatile
        hg status                       Volatile
        hg update                       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                   Committed       Core commands config 
only
        <repo>/.hgignore                Committed       List of files to ignore
        HGEDITOR                        Committed       Environment variable
        HGMERGE                         Committed       Environment variable
        HGRCPATH                        Committed       Environment variable
        HGUSER                          Committed       Environment variable
        /usr/demo/mercurial             Committed       Place to put contributed
                                                        files from the hg distro
        revlog/index                    Committed       File formats
                                        Private 
        wire protocol                   Committed
                                        Private 

        All programmatic components of Mercurial which appear to be
        interfaces (i.e., class names, variables, methods, etc.) are
        Volatile.  Future project maturity may result in the upgrading of
        the stability of these interfaces.

        Note that some of the hg subcommands are marked as Volatile which
        appear to be (and are) critical to daily operation.  There is some
        work being done here to clean up the UI (such as using -r
        consistently as an argument taking a revision option, which is not
        what, say, "status" and "update" do), and the various "undo"-like
        operations are still undergoing some semantic and name changes.
        The authors expect that this will settle down by version 1.0, at
        which point we can revise the stability levels to Committed.

        Note that despite the declaration of /etc/mercurial as an
        interface, this project does not intend to deliver any files
        beneath it; hence no separate package to do so.

        Imported Interface              Specified in?
        ------------------              -------------
        ssh                             PSARC/2001/212
        python 2.4                      PSARC/2005/534
        vendor-packages                 PSARC/2005/555

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]

Reply via email to