TFS二次开发06——签入(CheckIn)

一个Item 就是一个文件或文件夹

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.VersionControl.Client;

一:添加Item

//连接到TFS服务器

string tpcURL = "http://127.0.0.1:8080/tfs/";

TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(tpcURL));

VersionControlServer version = tpc.GetService(typeof(VersionControlServer)) as VersionControlServer;

//创建工作区(Worksapce),如果已经存在就不创建

string worksapce = "WorkSpaceTest01";

Workspace ws;

Workspace[] wss = version.QueryWorkspaces(worksapce, Environment.UserName, Environment.MachineName);//查询工作区

if (wss.Length == 0)

{

    ws = version.CreateWorkspace(worksapce);//创建工作区

}

else

{

   ws = wss[0];

}

string serverPath = "$/SYS/Application1/Application1.sln";

string localPath = "E:\\SYS\\Application1\\Application1.sln";

ws.Map(serverPath, localPath);//添加映射

int pend = ws.PendAdd(localPath);//告诉我你是要给“localPath” 做“Add” 操作。 pend==1 表示可以添加,pend==0 表示之前已经添加过了 或者 操作失败        

ItemSpec[] itemSpecs = new ItemSpec[1];

itemSpecs[0] = new ItemSpec(localDir, RecursionType.Full);

WorkspaceCheckInParameters wscip = new WorkspaceCheckInParameters(itemSpecs, "注释内容");

int changeSetId = ws.CheckIn(wscip);//签入。如果签入失败changeSetId==-1;反之,返回变更集,大于0的整数

运行以上代码,效果如下图所示:

 TFS二次开发06——签入(CheckIn)

可以看出不但成功添加了Application1.sln 文件,并且在TFS上建立了相应的文件夹Application1 ,无需我们事先做“添加文件夹”的操作。

 

二 :删除、编辑、重命名等  Item

//删除Item

int pend = ws.PendDelete(localPath);

//编辑Item

int pend = ws.PendEdit(localPath);

//重命名

Int pend= ws.PendRename(oldPath,newPath);

ItemSpec[] itemSpecs = new ItemSpec[1];

itemSpecs[0] = new ItemSpec(localDir, RecursionType.Full);

WorkspaceCheckInParameters wscip = new WorkspaceCheckInParameters(itemSpecs, "注释内容");

int changeSetId = ws.CheckIn(wscip);//签入。如果签入失败changeSetId==-1;反之,返回变更集,大于0的整数 //执行CheckIn也可以:

PendingChange[] pcs = ws.GetPendingChanges();

int changeSetId= ws.CheckIn(pcs,"注释内容");  



//类似的操作还有:

PendBranch(string sourcePath, string targetPath, VersionSpec version);//分支

PendUndelete(string path, int deletionId);//取消删除

 

三:NonFatalError

前面讲到

ws.PendAdd(localPath)

ws.PendDelete(localPath);

ws.PendEdit(localPath);

......

等等 都会 返回一个1或者0,1表示可以执行操作,0表示执行失败或者之前已经执行过该操作了。

那么如果返回0 ,我们想要知道到底为什么失败呢, 

这里我们要使用VersionControlServer 的NonFatalError 事件:

version.NonFatalError += version_NonFatalError;

void version_NonFatalError(object sender, ExceptionEventArgs e)

{

   if (e.Exception == null)

   {

       return;

   }

   string msg = e.Exception.Message;

   msg += "\r\n";

   msg += e.Exception.StackTrace;

   MessageBox.Show(msg);
}

这样,如果因为其中发生了异常而返回0 ,就可以显示出异常信息。

 

四:撤销挂起的变更(Undo)

 PendingChange[] pcs = ws.GetPendingChanges();

 ws.Undo(pcs);//其有重载可以指定RecursionType(递归类型)和updateDisk 是否更新硬盘

你可能感兴趣的:(check)