이전 Team Foundation Server (이하 TFS) 를 이용하여 통합 소스 관리 프로젝트를 수행한 적이 있습니다. TFS Object Model 이 참 잘 되어 있기 때문에 특별한 레퍼런스 없이도 쉽게 API 를 제어할 수 있었습니다. 허나 이상하게 Shelve(보류 기능) 과 관련하여 한참을 삽질을 한 적이 있는데요, 지금에 와서도 왜 이런지 이해할 수 없는 문제이기도 합니다.

다른 TFS Object Model 객체에서도 이러한 도메인 네이밍과 관련된 룰이 모두 통일되어 있다면 그냥 '그런가부다!!!' 할텐데, Shelve 에서만 이러한 문제가 발생한답니다. 이건 뭐~

var vcs                        = GetVersionControlServer();
var sourceController        = ObjectFactory.CreateObject<ISourceController>();
var workspace               = vcs.GetWorkspace(checkoutFilePath);

Shelveset set        = new Shelveset(vcs, title,
owner);
set.Comment        = description;

PendingChange[] pendingChanges = workspace.GetPendingChanges(checkoutFilePath, RecursionType.None);
workspace.Shelve(set, pendingChanges, ShelvingOptions.None);

   

오류 내용은 아래와 같습니다.

테스트 메서드 TestProject.TfsControllerTest.SaveShelvesetTest에서 예외를 throw했습니다. Microsoft.TeamFoundation.VersionControl.Client.VersionControlException: 다른 사용자가 소유한 보류 집합을 만들 수 없습니다.

Microsoft.TeamFoundation.VersionControl.Client.Workspace.ShelveInternal(Shelveset shelveset, PendingChange[] changes, ShelvingOptions options)

Microsoft.TeamFoundation.VersionControl.Client.Workspace.Shelve(Shelveset shelveset, PendingChange[] changes, ShelvingOptions options)

GConfigurationAssistant.SourceControl.TfsController.SaveShelveset(String title, String description, String owner, String checkoutFilePath) : C:\DxTFS2008\GMarket\GConfigurationAssistant\SourceControl\TfsController.cs: 줄 158

TestProject.TfsControllerTest.SaveShelvesetTest() : C:\DxTFS2008\GMarket\GConfigurationAssistant\TestProject\TfsControllerTest.cs: 줄 185

이런 코드가 있을 때, 빨간색의 owner 는 반드시 DOTNETXPERT\XXX 와 같은 계정 형태로 지정해 주어야 합니다. 만약 xxx@dotnetxpert.com 와 같은 사용자 계정은 맥 없이 Shelve 할 수 없다는 오류가 발생한답니다. 뭐 여기까지면 이해하겠습니다만… 쩝...

더 이해할 수 없는 건 dotnetxpert\xxx 처럼 도메인명과 계정명의 대소문자가 틀려도 오류가 난답니다. 줸장~

사소한 문제일 수도 있지만, 풀리지 않는 미스테리인지, 아니면 명백한 TFS Object Model 의 버그인지...

신고
Posted by 땡초 POWERUMC

댓글을 달아 주세요

  1. 2009.10.23 11:47 Address Modify/Delete Reply

    비밀댓글입니다