/// <summary> /// Performs execution of the command /// </summary> protected override void DoProcessRecord() { var member = GetItem <Models.Identity>(new { Identity = Member }); ErrorUtil.ThrowIfNotFound(member, nameof(member), Member); var(_, _, t) = GetCollectionProjectAndTeam(); var group = GetItem <Models.Identity>(new { Identity = t.Id }); ErrorUtil.ThrowIfNotFound(group, nameof(group), Team); var client = GetClient <IdentityHttpClient>(); if (!ShouldProcess($"Team '{t.Name}'", $"Remove member '{member.DisplayName} ({member.UniqueName})'")) { return; } this.Log($"Removing '{member.DisplayName} ({member.UniqueName}))' from team '{t.Name}'"); client.RemoveMemberFromGroupAsync(group.Descriptor, member.Descriptor) .GetResult($"Error removing '{member.DisplayName} ({member.UniqueName}))' from group '{group.DisplayName}'"); }
protected override ClassificationNode DoSetItem() { var nodeToSet = GetItem <ClassificationNode>(); var startDate = GetParameter <DateTime?>(nameof(SetIteration.StartDate)); var finishDate = GetParameter <DateTime?>(nameof(SetIteration.FinishDate)); var structureGroup = GetParameter <TreeStructureGroup>("StructureGroup"); ErrorUtil.ThrowIfNotFound(nodeToSet, nameof(SetIteration.Node), GetParameter <string>(nameof(SetIteration.Node))); var(_, tp) = GetCollectionAndProject(); var client = GetClient <WorkItemTrackingHttpClient>(); if (!ShouldProcess(tp, $"Set dates on iteration '{nodeToSet.RelativePath}'")) { return(null); } var patch = new WorkItemClassificationNode() { Attributes = new Dictionary <string, object>() { ["startDate"] = startDate, ["finishDate"] = finishDate } }; var result = client.UpdateClassificationNodeAsync(patch, tp.Name, structureGroup, nodeToSet.RelativePath.Substring(1)) .GetResult($"Error setting dates on iteration '{nodeToSet.FullPath}'"); return(new ClassificationNode(result, tp.Name, client)); }
/// <summary> /// Performs execution of the command /// </summary> protected override void DoProcessRecord() { var(_, tp) = GetCollectionAndProject(); var sourceNodes = GetItems <ClassificationNode>(); if (sourceNodes == null) { return; } var destinationNode = GetItem <ClassificationNode>(new { Node = Destination }); if (destinationNode == null && !Force) { ErrorUtil.ThrowIfNotFound(destinationNode, nameof(MoveClassificationNode.Destination), Destination); } this.Log($"Destination node: '{destinationNode.FullPath}'"); foreach (var sourceNode in sourceNodes) { this.Log($"Source node: '{sourceNode.FullPath}'"); var moveTo = $@"{destinationNode.Path}\{sourceNode.Name}"; if (!ShouldProcess($"Team Project '{sourceNode.TeamProject}'", $"Move {StructureGroup} '{sourceNode.FullPath}'")) { return; } var patch = new WorkItemClassificationNode() { Id = sourceNode.Id }; var client = GetClient <WorkItemTrackingHttpClient>(); var result = client.CreateOrUpdateClassificationNodeAsync(patch, tp.Name, StructureGroup, destinationNode.RelativePath.Substring(1)) .GetResult($"Error moving node {sourceNode.RelativePath} to {destinationNode.RelativePath}"); if (Passthru.IsPresent) { WriteObject(result); } } }
protected override System.Collections.Generic.IEnumerable <TfsTeamAdmin> DoGetItems() { var admin = GetParameter <string>(nameof(GetTeamAdmin.Admin)); var team = GetItem <Models.Team>(new { QueryMembership = true }); ErrorUtil.ThrowIfNotFound(team, nameof(team), GetParameter <object>(nameof(GetTeamAdmin.Team))); foreach (var member in team.TeamMembers.Where(m => m.IsTeamAdmin)) { var a = new TeamAdmin(GetItem <Models.Identity>(new { Identity = member.Identity.Id }), team); if (a.DisplayName.IsLike(admin) || a.UniqueName.IsLike(admin)) { yield return(a); } } }
protected override WebApiTeamProject DoNewItem() { var tpc = GetCollection(); var project = GetParameter <string>(nameof(NewTeamProject.Project)); if (!ShouldProcess(tpc, $"Create team project '{project}'")) { return(null); } var processTemplate = GetParameter <object>(nameof(NewTeamProject.ProcessTemplate)); var description = GetParameter <string>(nameof(NewTeamProject.Description)); var sourceControl = GetParameter <string>(nameof(NewTeamProject.SourceControl)); var done = false; WebApiProcess template = null; while (!done) { switch (processTemplate) { case WebApiProcess p: { template = p; done = true; break; } case string s: { template = GetItem <WebApiProcess>(); ErrorUtil.ThrowIfNotFound(template, nameof(NewTeamProject.ProcessTemplate), processTemplate); done = true; break; } default: { throw new ArgumentException($"Invalid or non-existent process template '{processTemplate}'"); } } } var client = GetClient <Microsoft.TeamFoundation.Core.WebApi.ProjectHttpClient>(); var tpInfo = new WebApiTeamProject() { Name = project, Description = description, Capabilities = new Dictionary <string, Dictionary <string, string> >() { ["versioncontrol"] = new Dictionary <string, string>() { ["sourceControlType"] = sourceControl }, ["processTemplate"] = new Dictionary <string, string>() { ["templateTypeId"] = template.Id.ToString() } } }; // Trigger the project creation var token = client.QueueCreateProject(tpInfo) .GetResult("Error queueing project creation"); // Wait for the operation to complete var opsClient = GetClient <OperationsHttpClient>(); var opsToken = opsClient.GetOperation(token.Id) .GetResult("Error getting operation status"); while ( (opsToken.Status != OperationStatus.Succeeded) && (opsToken.Status != OperationStatus.Failed) && (opsToken.Status != OperationStatus.Cancelled)) { Thread.Sleep(2); opsToken = opsClient.GetOperation(token.Id) .GetResult("Error getting operation status"); } if (opsToken.Status != OperationStatus.Succeeded) { throw new Exception($"Error creating team project {project}: {opsToken.ResultMessage}"); } return(GetItem <WebApiTeamProject>()); }