Log Messages Issue - Committer vs. Owner when using Gated Check-In

Jun 3, 2011 at 9:01 PM
Edited Jun 3, 2011 at 9:02 PM

We're trying out SvnBridge for the project I'm working on and we've run into an annoying issue with how SvnBridge translates change history. The effect is that when viewing the log messages of an item through an SVN client, all of the entries have the same author. The author is always the system user account which is used for the final commit in our gated check-in setup. When the history is viewed through Team Explorer though, it correctly shows the user which initiated the check-in.

Looking through the network traffic shows that the TFS server includes both a "cmtr" and an "owner" attribute as part of the information about each changeset. The "cmtr" attribute contains the system user while the "owner" attribute contains the user who initiated the check-in. SvnBridge seems to read the "cmtr" attribute rather than the "owner" attribute (SvnBridgeLibrary\SourceControl\TFSSourceControlProvider.cs, line 347).

Should this behavior be considered a bug? Is there ever a situation in which it would be better to display the "cmtr" rather than the "owner" of a changset? I would imagine that gated check-ins is pretty commonly used - are we encountering this issue just because of incorrect setup of our TFS server?

Mar 20, 2012 at 3:18 PM

Same here - all entries of an "svn blame" on an SvnBridge setup always show the string of the "user" who carried out the VSS --> TFS migration rather than the original developers of the changeset - clearly the wrong information in the case of svn blame.

Further technical details:

Handling of svn blame requests is done by SvnBridgeLibrary/RequestHandlers/ReportHandler.cs SendBlameResponse() (using history.Username member)

And the history itself probably had been created via

SvnBridgeLibrary/SourceControl/TFSSourceControlProvider.cs ConvertChangesetsToSourceItemHistory():

SourceItemHistory sourceItemHistory = new SourceItemHistory(changeset.Changes[0].Item.cs, changeset.cmtr, changeset.date, changeset.Comment);

 

Links about useful related info:

http://tf4mono.googlecode.com/svn/trunk/class/Microsoft.TeamFoundation.VersionControl.Client/Changeset.cs

https://codeplexclient.svn.codeplex.com/svn/Source/TfsLibrary/ObjectModel/DataObjects/SourceItemHistory.cs

Mar 20, 2012 at 3:28 PM

I believe there are two major ways at going at this:

- simply unconditionally change the parameter passing of changeset.cmtr to owner, thereby losing cmtr information and instead using owner. Adopting owner rather than cmtr might end up incorrect for some uses of SourceItemHistory, though (obviously not for gated checkins and svn blame).

- extend SourceItemHistory to have it support both fields (cmtr and owner) and then decide at each specific use of SourceItemHistory whether cmtr or owner is the field to use in this case.

 

Hmm, if owner always signifies the one who originally did the checkin (as opposed to mechanical system users), then it's quite natural that "owner" should be used unconditionally for history of source items, since it is that user as well who originally wrote the content of SourceItemHistory.Comment member...

Mar 29, 2012 at 2:02 PM

Just created a patch issue at http://svnbridge.codeplex.com/workitem/15329