Skip to content

FiPyCommitTicketUpdater

Jonathan Guyer edited this page Sep 26, 2014 · 1 revision

We have activated the trac:CommitTicketUpdater, which requires a hook in the repository in order to work. The [trac:TracRepositoryAdmin#ExplicitSync] has a couple of problems:

 * `REV=$(git rev-parse HEAD)` doesn't work at all with a bare repository 
 * even with a working copy, `git rev-parse HEAD` assumes the active branch to be the one the commit was made to.
 * A `post-commit` hook is inappropriate for the [git://code.matforge.org/nist/fipy.git FiPy repository at matforge] because we don't `commit` to it, we `push`. Therefore we need a `post-receive` hook.
 * Only the last revision is recorded, but a push will often bring a whole series of revisions with it

An initial stab at a `post-receive` hook is

This is OK, but it suffers from

 * Repeated shell calls to `trac-admin`
 * If the same revisions are pushed again, they will be recorded in the tickets a second time (for example, a working branch is pushed to the repository for testing and review and, upon acceptance, the same revisions are merged to `develop` and pushed again)

The script linked from http://stackoverflow.com/a/9228844/2019542 has some interesting features, but is obsolete for Trac 1.0. The scripts it was derived from offer a more promising foundation.

 * the Trac 0.11 scripts use a more elegant Python interface to Trac and record which revisions have already been dealt with in the Trac database
 * the Trac 0.12 scripts use the modern `trac-admin changeset added` interface, rather than low-level SQL operations the way the Trac 0.11 scripts do

I merged these features in the [attachment:fipy-trac-post-receive-hook.py], using a `TracAdmin()` object to communicate the `changeset added` actions directly with Trac, and recording the "seen" revisions directly in the SQL database.

Clone this wiki locally