Merge Auditing in Subversion 1.5

This article is mirrored with permission from the original location http://blogs.collab.net/subversion/2007/06/merge_auditing_.html. Inactive links have been removed or updated.

Author: Mark Phippard

Posted: 2007-06-13

We had a really nice addition to the Subversion merge tracking feature committed to trunk last week.  Hyrum Wright is a student participating in the Google Summer of Code program.  He has signed up to provide “Merge Auditing” features for merge tracking.  You can see some details on what this means in the functional specifications, but essentially it is about adding intelligence and awareness of the merge tracking information to the svn log and blame output.  In the merge tracking planning, this has been slated as a post-1.5 feature.  It is a feature everyone really wants to see in the code-base, but it was just felt that shipping the release and the core functionality had to be the priority.

Anyway, in this case it appears we will be able to have our cake and eat it too.  Hyrum, whom I should add is already a full Subversion committer, has made great progress on adding this support to the svn log command and has committed those changes to trunk.  Additionally, it turns out that the sample repository we created for our Merge Tracking Early Adopter program really helped to work out the kinks in this feature.  Since we had a nicely documented sample repository, and matching graphic, that Hyrum could refer to, it made it easier for him to refine the feature and get it working properly.

[Images missing as of 2023-03-19:
Original url http://blogs.open.collab.net/photos/uncategorized/2007/06/13/repo.gif and http://blogs.collab.net/subversion/files/2007/06/merge-auditing.gif]

The above picture is the history of our sample repository. If you take a close look, the r14 commit to trunk is an interesting example where this feature comes into play.  This commit is a merge from a branch, and the merge also contains additional merges from another branch.  If I run this command (note the new -g option):

svn log -g -r 14 $REPOS/trunk

Here is the new output:

------------------------------------------------------------------------r14 | merger | 2007-05-30 15:48:11 -0400 (Wed, 30 May 2007) | 3 lines

Merge branch b - product roadmap and update about page

Command executed: svn merge $REPOS/branches/b------------------------------------------------------------------------r13 | buser | 2007-05-30 15:46:48 -0400 (Wed, 30 May 2007) | 1 lineResult of a merge from: r14

Update info about our company------------------------------------------------------------------------r12 | merger | 2007-05-30 15:45:19 -0400 (Wed, 30 May 2007) | 3 linesResult of a merge from: r14

Merge branch a - product roadmap

Command executed: svn merge $REPOS/branches/a------------------------------------------------------------------------r11 | auser | 2007-05-30 15:43:00 -0400 (Wed, 30 May 2007) | 1 lineResult of a merge from: r14, r12

Add product roadmap------------------------------------------------------------------------

Note how it includes information on the revisions that were merged in r14, and additionally how one of those revisions was the result of another merge.  Graphical clients like our CollabNet Desktop – Eclipse Edition and TortoiseSVN should be able to do really useful and interesting presentations of this information in their UI.

This is fantastic work Hyrum.  Keep it up.  I cannot wait to see the blame implementation come together.

About the author

Mark Phippard is an engineering manager for several teams at CollabNet, including CloudForge, Subversion, Subversion Edge, Git and our Desktops and Integrations.

Project owner for the Subclipse project, which provides Subversion support in Eclipse. Also a full committer for the Subversion project.

Product owner for GitEye, Subversion Edge and the CollabNet Desktops and Integrations.