Home

Awesome

Trac Mercurial Changeset Plugin

Trac plugin that inserts Mercurial repository information into Trac's database, thus integrating Mercurial and Trac to a fuller extend than the default Trac support. It enables ticket search, ticket changelogs, etc. 100% compatible with TracMercurial plugin. It actually solves TracMercurial <a href="http://trac.edgewall.org/ticket/8417">issue #8417</a>. TracMercurial is using this code to solve the issue, till they integrate it, you can use this.

Prerequisites

Installation

You can install this software as a normal Trac plugin.

  1. First uninstall former MercurialChangesetPlugin version, if you have installed it before.

  2. Change directory to Trac's plugin's directory containing setup.py.

  3. Clone this repository:

     git clone git://github.com/maraujop/TracMercurialChangesetPlugin.git
    
  4. Install it:

     python setup.py install
    
  5. If you want to install this plugin to your trac instance only, create the egg from the repo running:

     python setup.py bdist_egg
    

Then, copy the generated egg file to the trac instance's plugin directory:

    cp dist/*.egg /srv/trac/env/plugins

Setup

Enable plugin in config trac.ini:

[components]
mercurialchangeset.* = enabled

Then sync your repository into Trac by running:

trac-admin /srv/trac/env/ mercurial sync repository_name

Now you can keep your repository permanently synchronized in Trac by configuring a post-commit hook. If you are not familiar with Mercurial hooks, you can read <a href="http://www.selenic.com/mercurial/hgrc.5.html#hooks">official docs</a> about them. In the server running Trac and the Mercurial repository, you should add the following to the hooks section of your global or personal hgrc:

[hooks]
changegroup.TracMercurialChangeset = /path/to/hook_script.sh

Your hook_script.sh should at least have something like this (example uses default repository):

trac-admin /srv/trac/env/ mercurial afterRevision $HG_NODE `pwd`

If you rather have a commit hook, you can set it like this:

[hooks]
commit.TracMercurialChangeset = /path/to/hook_script.sh

Your hook_script.sh should then look like this:

trac-admin /srv/trac/env/ mercurial revision $HG_NODE `pwd`

This will keep synced with Trac every Mercurial's repository that you have configured within Trac. Thanks to the way the path is checked, if the repository is NOT controlled by Trac, it will let you commit or push withouth failing. This way you can keep all your Trac's repositories synced with only one hook_script.

How-To use it

This plugin adds five trac-admin commands that will let you synchronize your Mercurial repository with Trac. These are: lastRevision, sync, afterRevision, revision and syncAll

You can access the help for each command by doing:

trac-admin /srv/trac/env/ help mercurial <command> (e.g. lastRevision)

Troubleshooting

Of course this is neither an elegant fix, nor a very secure, but it certainly is a very easy one :)

Contributors

License

Copyright (c) 2011
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
J. Javier Maestro de la Calle <jjmaestro@ieee.org>

GNU General Public Licence (GPL)

This work is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
details.

GNU GPL v2: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
GNU GPL v3: http://www.gnu.org/copyleft/gpl-3.0.html