NAME

VCI::VCS::Hg - The Mercurial (aka Hg) implementation of VCI

DESCRIPTION

This is a "driver" for VCI for the Mercurial version-control system. You can find out more about Mercurial at http://www.selenic.com/mercurial/.

For information on how to use VCI::VCS::Hg, see VCI.

Currently VCI::VCS::Hg actually interacts with HgWeb, not directly with Hg repositories. The only supported connections are http:// or https://.

Local repositories are not yet supported.

CONNECTING TO A MERCURIAL REPOSITORY

For the repo argument to "connect" in VCI, choose the actual root of your hgweb installation.

For example, for http://hg.intevation.org/mercurial/stable, the repo would be http://hg.intevation.org/.

REVISION IDENTIFIERS

Mercurial has two revision identifiers on a commit: an integer and a hex string. VCI::VCS::Hg uses the hex string as the revision id for Commit, File, and Directory objects, and does not understand integer revision ids.

LIMITATIONS AND EXTENSIONS

These are limitations of VCI::VCS::Hg compared to the general API specified in the VCI::Abstract modules.

VCI::VCS::Hg

You can only connect to hgweb installations. You cannot use ssh, static-http, or local repositories. In the future we plan to support local repositories, but ssh and static-http repositories will probably never be supported. (Mercurial cannot work with them without cloning them, at which point they are just a local repository.)

VCI::VCS::Hg::Committable

Committable objects without a revision specified (such as those that you get through VCI::Abstract::Project::get_path, get_directory, and get_file) will always have the revision "tip", even if this wasn't the revision they were modified most recently in.

This also means that their time will be the time of the tip revision, not the time they were last modified.

VCI::VCS::Hg::Directory

Specifying a revision for a directory will make contents return the contents of the directory at that time. However, all File and Directory objects in those contents will have the revision identifier of the parent Directory, regardless of whether they were actually modified in that revision.

VCI::VCS::Hg::History

When directories were added/removed is not tracked by Mercurial, so Directory objects never show up in a History.

VCI::VCS::Hg::Commit

  • Although Mercurial supports renames and copies of files, the hgweb interface doesn't track renames and copies. So renames just look like a file was deleted and then a file was added. Copies are simply added files.

  • Mercurial doesn't track when directories were added or removed, so Directory objects never show up in the contents of a Commit.

  • If a File is added but has no content (that is, it's an empty file), it will not show up as "added" in the Commit where it was added. (It will show up in some later commit as "modified" if somebody adds contents, though.)

    Similarly, empty files that are removed will not show up in "removed".

PERFORMANCE

On remote repositories, many operations can be extremely slow. This is because VCI::VCS::Hg makes many calls to the web interface, and any delay between you an the remote server is magnified by the fact that it happens over and over.

Working with the History of a Project involves using the RSS version of the changelog from hgweb. The more items you allow hgweb to display in the RSS version of the changelog, the faster VCI::VCS::Hg will be when working with the history of a Project.

Getting the contents (or added/removed/modified) of a Commit can be slow, as it has to access the web interface.

SEE ALSO

VCI

BUGS

VCI::VCS::Hg is very new, and may have significant bugs. The code is alpha-quality at this point.

AUTHOR

Max Kanat-Alexander <mkanat@cpan.org>

COPYRIGHT AND LICENSE

Copyright 2007 by Everything Solved, Inc.

http://www.everythingsolved.com

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.