To revisit a concern of mine from late January... My team may switch to mercurial and we'd like our central hg repository to validate a few things on each changeset. We'd like the server to verify the format of the commit message (first line is the CR number, space, CR synopsis, second line is blank,...), and we'd also like to parse the CR number from the commit message and verify that CR number against the approved CRs for that repo, and verify that an extra head isn't created,...and more stuff, I'm sure.
The current list of mercurial hooks does not quite allow the scenario I had envisioned. I thought we'd have one main repo, "P", from which every team member would push and pull. The prechangegroup hook on P sounds good at first glance, but it would have to reach back to the user's repo and rummage round there--nix that idea. The pretxnchangegroup hook on P appears to be the only way to achieve the server-side enforcement. The downside of this hook is that it doesn't fire until the csets have already been applied, and another user can pull those changes before the enforcement mechanism can decide to abort&rollback this changegroup. An alternative is to use cascading repos; one for pulls, "P", and one for pushes, "Q". Use pretxnchangegroup on P, and have P execute a changegroup hook to push to Q. A prechangegroup hook on Q would ensure that only P can push to it. (This is how teamware is used with on/nv, correct?) Dean