TFS API 二次开发(创建,删除分支,打标签,顺便带上commont)

  因为维护一个项目,需要拉取app,service,client 多个项目,所以自己在空余时间做了个小工具,一次操作,把多个项目同时分支,并打上同一个标签。

      下面帖上,部分比较重要的代码。

  step 1.需要获取TFS的数据源,工作空间,和版本控制

1             Uri targetUri = new Uri(tfsurl);   tfsurl是tfs 里的文件存放地址
2             TfsTeamProjectCollection server = new TfsTeamProjectCollection(targetUri); 
3             WorkItemStore workstore = server.GetService<WorkItemStore>();
4 
5             TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(targetUri);
6             VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>();

  step2.获取itemlist(tfs每个文件的属性)

1        ItemSpec itemSpec = new ItemSpec(targetUrl, RecursionType.OneLevel);
2            ItemSet itemSet = versionControl.GetItems(itemSpec, VersionSpec.Latest, DeletedState.NonDeleted, ItemType.Any,false);
3          List<Item> lstItem = itemSet.Items.ToList();

  step3.创建分支(顺便带上comment,turl 为创建分支的目标地址)      

1                 if (!versionControl.ServerItemExists(tUrl, VersionSpec.Latest, DeletedState.NonDeleted, ItemType.Any))
2                 {
3                     versionControl.CreateBranch(tfsSource, tUrl, VersionSpec.Latest, null, branchComment, null, null, null);                    
4                 }

  step4.打上标签

1 VersionControlLabel versionControlLabel = new VersionControlLabel(versionControl, txtInitLabel.Text, null, lUrl, txtInitLabel.Text);
2 ItemSpec itemSpec = new ItemSpec(lUrl + "/" + item, RecursionType.Full);
3 var labelItemSpec = new LabelItemSpec[1];
4 labelItemSpec[0] = new LabelItemSpec(itemSpec, VersionSpec.Latest, false);
5 versionControl.CreateLabel(versionControlLabel, labelItemSpec, LabelChildOption.Merge)

  step5.删除分支(需要先get文件,然后删除,最后check in)

Uri targetUri = new Uri(tfsurl);
            TfsTeamProjectCollection server = new TfsTeamProjectCollection(targetUri);
            WorkItemStore workstore = server.GetService<WorkItemStore>();

            TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(targetUri);
            VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>();

            String workspaceName = txtwsName.Text.Trim();

            Workspace workspace = versionControl.GetWorkspace(workspaceName, versionControl.AuthorizedUser);

            string filePath = string.Empty;

            string serverFolder = xxxxx;

                    filePath = Path.Combine(txtPath.Text, GetFolderName(serverFolder));
                    if (!Directory.Exists(filePath))
                    {
                        Directory.CreateDirectory(filePath);
                    }
                    GetRequest request = new GetRequest(new ItemSpec(serverFolder, RecursionType.Full), VersionSpec.Latest);

                    WorkingFolder workingFolder = new WorkingFolder(serverFolder, filePath);

                    workspace.CreateMapping(workingFolder);
                    workspace.Get(request, GetOptions.GetAll | GetOptions.Overwrite);


                    VersionSpec versionSpec = new ChangesetVersionSpec(Convert.ToInt32(gvBranchList.Rows[i].Cells["ItemId"].Value));
                    workspace.PendDelete(filePath);
                    var pendingList = new List<PendingChange>(workspace.GetPendingChanges());

                    deletedCount = workspace.CheckIn(pendingList.ToArray(), "BranchTools deleted");
                

            
        }

因为 vs自带的tfs 十分的方便,网上很少有这一份的资料,我就发了些简单的关键代码上来,如果有问题,欢迎大家留言交流。

      

  

posted @ 2014-07-21 21:45  Mark J  阅读(286)  评论(0)    收藏  举报