public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <TeamMembersWidgetSettings>(widget.settings); if (_sourceTeamList == null) { _sourceTeamList = TfsStatic.GetTeams(true, TfsStatic.GetTeamProjectId(true)); } if (_targetTeamList == null) { _targetTeamList = TfsStatic.GetTeams(false, TfsStatic.GetTeamProjectId(false)); } var sourceTeam = _sourceTeamList.value.FirstOrDefault(o => o.id == settings.teamId); var sourceTeamName = sourceTeam?.name; if (string.IsNullOrEmpty(sourceTeamName)) { WriteWarning($"Skipped: Can't find a team in the source project with an id of '{settings.teamId}'."); return; } var targetTeamId = _targetTeamList.value.FirstOrDefault(o => o.name == sourceTeamName)?.id; if (string.IsNullOrEmpty(targetTeamId)) { if (sourceTeam.name.Equals($"{sourceTeam.projectName} Team")) { var targetDefaultTeam = $"{TfsStatic.GetTeamProjectName(false)} Team"; var targetTeam = _targetTeamList.value.FirstOrDefault(o => o.name.Equals(targetDefaultTeam, System.StringComparison.InvariantCultureIgnoreCase)); if (targetTeam == null) { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{sourceTeamName}'."); return; } WriteWarning($"Default team detected in the source, using default team in target: '{targetTeam.name}'."); targetTeamId = targetTeam.id; } else { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{sourceTeamName}'."); return; } } settings.teamId = targetTeamId; widget.settings = JsonConvert.SerializeObject(settings); }
private static TargetQueryInfo GetTargetQueryFolderId(WorkItemQuery sourceQuery, QueryReplacementParameters replacementParameters) { TargetQueryInfo targetQueryFolder = new TargetQueryInfo(); targetQueryFolder.FolderPath = sourceQuery.path; if (!string.IsNullOrEmpty(replacementParameters.PathFind) && !string.IsNullOrEmpty(replacementParameters.PathReplace) && !replacementParameters.PathFind.Equals(replacementParameters.PathReplace, StringComparison.InvariantCultureIgnoreCase)) { var findIndex = targetQueryFolder.FolderPath.IndexOf(replacementParameters.PathFind, StringComparison.InvariantCultureIgnoreCase); while (findIndex > -1) { targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Remove(findIndex, replacementParameters.PathFind.Length); targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Insert(findIndex, replacementParameters.PathReplace); findIndex = targetQueryFolder.FolderPath.IndexOf(replacementParameters.PathFind, findIndex + replacementParameters.PathReplace.Length, StringComparison.InvariantCultureIgnoreCase); } } targetQueryFolder.QueryName = targetQueryFolder.FolderPath.Remove(0, targetQueryFolder.FolderPath.LastIndexOf('/') + 1); targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Remove(targetQueryFolder.FolderPath.LastIndexOf('/')); try { targetQueryFolder.FolderId = TfsStatic.GetWorkItemQuery(false, targetQueryFolder.FolderPath, QueryExpand.minimal, 0).id; } catch { string pathLeft = targetQueryFolder.FolderPath; do { pathLeft = pathLeft.Remove(pathLeft.LastIndexOf('/')); try { targetQueryFolder.FolderId = TfsStatic.GetWorkItemQuery(false, pathLeft, QueryExpand.minimal, 0).id; break; } catch { } }while (string.IsNullOrEmpty(targetQueryFolder.FolderId)); do { var nextFolder = targetQueryFolder.FolderPath.Remove(0, pathLeft.Length + 1); if (nextFolder.IndexOf('/') > -1) { nextFolder = nextFolder.Remove(nextFolder.IndexOf('/')); } targetQueryFolder.FolderId = TfsStatic.CreateWorkItemQueryFolder(false, pathLeft, nextFolder).id; pathLeft = $"{pathLeft}/{nextFolder}"; }while (targetQueryFolder.FolderPath.Length != pathLeft.Length); } return(targetQueryFolder); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <CodeScalarWidgetSettings>(widget.settings); if (_sourceRepositoryList == null) { _sourceRepositoryList = TfsStatic.GetGitRepos(true); } if (_targetRepositoryList == null) { _targetRepositoryList = TfsStatic.GetGitRepos(false); } var sourceRepo = _sourceRepositoryList.value.FirstOrDefault(o => o.id == settings.repositoryId); var sourceRepoName = sourceRepo?.name; if (string.IsNullOrEmpty(sourceRepoName)) { WriteWarning($"Skipped: Can't find a repository in the source project with an id of '{settings.repositoryId}'."); return; } var targetRepoName = sourceRepoName; if (appConfig.Repos.Mapping.Keys.Any(o => o.Equals(targetRepoName, StringComparison.InvariantCultureIgnoreCase))) { targetRepoName = appConfig.Builds.Mapping[appConfig.Repos.Mapping.Keys.First(o => o.Equals(targetRepoName, StringComparison.InvariantCultureIgnoreCase))]; } var targetRepoId = _targetRepositoryList.value.FirstOrDefault(o => o.name == sourceRepoName)?.id; if (string.IsNullOrEmpty(targetRepoId)) { WriteWarning($"Skipped: Can't find a repository in the target project with the name of '{sourceRepoName}'."); return; } settings.repositoryId = targetRepoId; widget.settings = JsonConvert.SerializeObject(settings); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <BuildHistogramWidgetSettings>(widget.settings); if (_targetBuildList == null) { _targetBuildList = TfsStatic.GetBuilds(false); } var targetBuildName = settings.buildDefinition.name; if (appConfig.Builds.Mapping.Keys.Any(o => o.Equals(targetBuildName, StringComparison.InvariantCultureIgnoreCase))) { targetBuildName = appConfig.Builds.Mapping[appConfig.Builds.Mapping.Keys.First(o => o.Equals(targetBuildName, StringComparison.InvariantCultureIgnoreCase))]; } var targetBuild = _targetBuildList.value.FirstOrDefault(o => o.definition.name.Equals(targetBuildName, StringComparison.InvariantCultureIgnoreCase)); if (targetBuild == null) { WriteWarning($"Skipped: Build named '{targetBuildName}' does not exist in target project"); return; } if (widget.name.Equals(settings.buildDefinition.name, StringComparison.InvariantCultureIgnoreCase)) { widget.name = targetBuildName; } settings.buildDefinition.id = targetBuild.definition.id; settings.buildDefinition.name = targetBuild.definition.name; settings.buildDefinition.projectId = targetBuild.definition.project.id; settings.buildDefinition.uri = targetBuild.definition.uri; widget.settings = JsonConvert.SerializeObject(settings); }
private static WorkItemQuery TryWriteQuery(WorkItemQuery sourceQuery, TargetQueryInfo targetQueryInfo) { WorkItemQuery targetQuery; var queryExistsAlready = false; try { var targetFolder = TfsStatic.GetWorkItemQuery(true, targetQueryInfo.FolderId, QueryExpand.minimal, 1); if (targetFolder.hasChildren) { targetQuery = targetFolder.children.FirstOrDefault(o => o.name.Equals(targetQueryInfo.QueryName, StringComparison.InvariantCultureIgnoreCase)); if (targetQuery != null) { queryExistsAlready = true; sourceQuery.id = targetQuery.id; targetQuery = TfsStatic.UpdateWorkItemQuery(false, sourceQuery); } else { targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery); } } else { targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery); } } catch { if (queryExistsAlready) { throw; } targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery); } return(targetQuery); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } string sourceProjectName = TfsStatic.GetTeamProjectName(true); string sourceTeamName = appConfig.SourceTeamName; string targetProjectName = TfsStatic.GetTeamProjectName(false); string targetTeamName = appConfig.TargetTeamName; WorkItemQuery targetQuery; var settings = JsonConvert.DeserializeObject <WitChartWidgetSettings>(widget.settings); targetQuery = QueryTools.CopyQuery(new CopyQueryParameters { QueryId = settings.groupKey, QueryReplacements = appConfig.Queries, }, sourceProjectName, sourceTeamName, targetProjectName, targetTeamName); settings.groupKey = targetQuery.id; settings.transformOptions.filter = targetQuery.id; widget.settings = JsonConvert.SerializeObject(settings); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <CumulativeFlowDiagramWidgetSettings>(widget.settings); if (_sourceTeamList == null) { _sourceTeamList = TfsStatic.GetTeams(true, TfsStatic.GetTeamProjectId(true)); } if (_targetTeamList == null) { _targetTeamList = TfsStatic.GetTeams(false, TfsStatic.GetTeamProjectId(false)); } var sourceTeam = _sourceTeamList.value.FirstOrDefault(o => o.id == settings.chartDataSettings.team); var sourceTeamName = sourceTeam?.name; if (string.IsNullOrEmpty(sourceTeamName)) { WriteWarning($"Skipped: Can't find a team in the source project with an id of '{settings.chartDataSettings.team}'."); return; } var targetTeamName = sourceTeamName; var sourceIsMigratingTeam = sourceTeamName.Equals(appConfig.SourceTeamName, StringComparison.OrdinalIgnoreCase); if (sourceIsMigratingTeam) { targetTeamName = appConfig.TargetTeamName; } var targetTeamId = _targetTeamList.value.FirstOrDefault(o => o.name == targetTeamName)?.id; if (string.IsNullOrEmpty(targetTeamId)) { if (sourceTeam.name.Equals($"{sourceTeam.projectName} Team")) { var targetDefaultTeam = $"{TfsStatic.GetTeamProjectName(false)} Team"; var targetTeam = _targetTeamList.value.FirstOrDefault(o => o.name.Equals(targetDefaultTeam, System.StringComparison.InvariantCultureIgnoreCase)); if (targetTeam == null) { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetDefaultTeam}'."); return; } WriteWarning($"Default team detected in the source, using default team in target: '{targetTeam.name}'."); targetTeamId = targetTeam.id; } else { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetTeamName}'."); return; } } var sourceBoards = TfsStatic.GetTeamBoards(true, sourceTeam.id); var sourceBoard = sourceBoards.value.FirstOrDefault(o => o.id.Equals(settings.chartDataSettings.board, StringComparison.OrdinalIgnoreCase)); if (sourceBoard == null) { WriteWarning($"Can't find source board id '{settings.chartDataSettings.board}'."); } else { var targetBoards = TfsStatic.GetTeamBoards(false, targetTeamId); var targetBoard = targetBoards.value.FirstOrDefault(o => o.name.Equals(sourceBoard.name, StringComparison.OrdinalIgnoreCase)); if (targetBoard == null) { WriteWarning($"Can't find target board named '{sourceBoard.name}'."); } else { settings.chartDataSettings.board = targetBoard.id; var sourceFullBoard = TfsStatic.GetTeamBoard(true, sourceTeam.id, sourceBoard.id); var targetFullBoard = TfsStatic.GetTeamBoard(false, targetTeamId, targetBoard.id); var desiredBoardColumnIds = new List <string>(); foreach (var desiredBoardColumnId in settings.chartDataSettings.desiredBoardColumnIds) { var sourceColumn = sourceFullBoard.columns.FirstOrDefault(o => o.id.Equals(desiredBoardColumnId, StringComparison.OrdinalIgnoreCase)); if (sourceColumn == null) { WriteWarning($"Can't find source column id '{desiredBoardColumnId}'."); continue; } var targetColumn = targetFullBoard.columns.FirstOrDefault(o => o.name.Equals(sourceColumn.name, StringComparison.OrdinalIgnoreCase)); if (targetColumn == null) { WriteWarning($"Can't find target column named '{sourceColumn.name}'."); continue; } desiredBoardColumnIds.Add(targetColumn.id); } settings.chartDataSettings.desiredBoardColumnIds = desiredBoardColumnIds; } } settings.chartDataSettings.project = TfsStatic.GetTeamProjectId(false); settings.chartDataSettings.team = targetTeamId; settings.lastArtifactName?.Replace(appConfig.SourceTeamName, appConfig.TargetTeamName); widget.settings = JsonConvert.SerializeObject(settings); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <AnalyticsSprintBurndownWidgetSettings>(widget.settings); if (_sourceTeamList == null) { _sourceTeamList = TfsStatic.GetTeams(true, TfsStatic.GetTeamProjectId(true)); } if (_targetTeamList == null) { _targetTeamList = TfsStatic.GetTeams(false, TfsStatic.GetTeamProjectId(false)); } var sourceTeam = _sourceTeamList.value.FirstOrDefault(o => o.id == settings.team.teamId); var sourceTeamName = sourceTeam?.name; var sourceIsMigratingTeam = sourceTeamName.Equals(appConfig.SourceTeamName, StringComparison.OrdinalIgnoreCase); if (string.IsNullOrEmpty(sourceTeamName)) { WriteWarning($"Skipped: Can't find a team in the source project with an id of '{settings.team.teamId}'."); return; } var targetTeamName = sourceTeamName; if (sourceIsMigratingTeam) { targetTeamName = appConfig.TargetTeamName; } var targetTeamId = _targetTeamList.value.FirstOrDefault(o => o.name == targetTeamName)?.id; if (string.IsNullOrEmpty(targetTeamId)) { if (sourceTeam.name.Equals($"{sourceTeam.projectName} Team")) { var targetDefaultTeam = $"{TfsStatic.GetTeamProjectName(false)} Team"; var targetTeam = _targetTeamList.value.FirstOrDefault(o => o.name.Equals(targetDefaultTeam, System.StringComparison.InvariantCultureIgnoreCase)); if (targetTeam == null) { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetDefaultTeam}'."); return; } WriteWarning($"Default team detected in the source, using default team in target: '{targetTeam.name}'."); targetTeamId = targetTeam.id; } else { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetTeamName}'."); return; } } settings.team.projectId = TfsStatic.GetTeamProjectId(false); settings.team.teamId = targetTeamId; var teamIterations = TfsStatic.GetTeamIterations(false, settings.team.teamId, true); if (teamIterations.count == 0) { WriteWarning($"Can't find any current iterations for '{targetTeamName}', please configure this manually."); } else { settings.iterationPath = teamIterations.value[0].path; settings.timePeriodConfiguration.startDate = teamIterations.value[0].attributes.startDate; if (!settings.timePeriodConfiguration.startDate.HasValue) { WriteWarning($"startDate == null, please check @currentIteration for '{targetTeamName}'."); } settings.timePeriodConfiguration.endDate = teamIterations.value[0].attributes.finishDate; if (!settings.timePeriodConfiguration.endDate.HasValue) { WriteWarning($"startDate == null, please check @currentIteration for '{targetTeamName}'."); } } widget.settings = JsonConvert.SerializeObject(settings); }
public override void Run(DashboardInfo_Widget1 widget, AppConfig appConfig) { if (widget.settings == null) { WriteWarning("Skipped: settings == null"); return; } var settings = JsonConvert.DeserializeObject <CycleTimeWidgetSettings>(widget.settings); if (_sourceTeamList == null) { _sourceTeamList = TfsStatic.GetTeams(true, TfsStatic.GetTeamProjectId(true)); } if (_targetTeamList == null) { _targetTeamList = TfsStatic.GetTeams(false, TfsStatic.GetTeamProjectId(false)); } var newTeamIds = new List <string>(); foreach (var teamId in settings.dataSettings.teamIds) { var sourceTeam = _sourceTeamList.value.FirstOrDefault(o => o.id == teamId); var sourceTeamName = sourceTeam?.name; if (string.IsNullOrEmpty(sourceTeamName)) { WriteWarning($"Skipped: Can't find a team in the source project with an id of '{teamId}'."); return; } var targetTeamName = sourceTeamName; var sourceIsMigratingTeam = sourceTeamName.Equals(appConfig.SourceTeamName, StringComparison.OrdinalIgnoreCase); if (sourceIsMigratingTeam) { targetTeamName = appConfig.TargetTeamName; } var targetTeamId = _targetTeamList.value.FirstOrDefault(o => o.name == targetTeamName)?.id; if (string.IsNullOrEmpty(targetTeamId)) { if (sourceTeam.name.Equals($"{sourceTeam.projectName} Team")) { var targetDefaultTeam = $"{TfsStatic.GetTeamProjectName(false)} Team"; var targetTeam = _targetTeamList.value.FirstOrDefault(o => o.name.Equals(targetDefaultTeam, System.StringComparison.InvariantCultureIgnoreCase)); if (targetTeam == null) { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetDefaultTeam}'."); return; } WriteWarning($"Default team detected in the source, using default team in target: '{targetTeam.name}'."); targetTeamId = targetTeam.id; } else { WriteWarning($"Skipped: Can't find a team in the target project with the name of '{targetTeamName}'."); return; } } newTeamIds.Add(targetTeamId); } // Need support still for // - swimLane // - fieldFilters largely with mappings per field name settings.dataSettings.project = TfsStatic.GetTeamProjectId(false); settings.dataSettings.teamIds = newTeamIds; settings.lastArtifactName?.Replace(appConfig.SourceTeamName, appConfig.TargetTeamName); widget.settings = JsonConvert.SerializeObject(settings); }
public static WorkItemQuery CopyQuery(CopyQueryParameters parameters, string sourceProjectName, string sourceTeamName, string targetProjectName, string targetTeamName) { var sourceQuery = TfsStatic.GetWorkItemQuery(true, parameters.QueryId, QueryExpand.minimal, 0); var targetQueryInfo = GetTargetQueryFolderId(sourceQuery, parameters.QueryReplacements); if (TfsStatic.SourceTeamProjectBaseUri.Equals(TfsStatic.TargetTeamProjectBaseUri, StringComparison.InvariantCultureIgnoreCase) && sourceQuery.path.Equals($"{targetQueryInfo.FolderPath}/{targetQueryInfo.QueryName}", StringComparison.InvariantCultureIgnoreCase)) { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine($"Skipped: Target query path matches source query ({targetQueryInfo.FolderPath}/{targetQueryInfo.QueryName})"); Console.ForegroundColor = ConsoleColor.White; return(sourceQuery); } sourceQuery.name = targetQueryInfo.QueryName; sourceQuery.path = targetQueryInfo.FolderPath; RemoveTeamAreaId(sourceQuery); if (!string.IsNullOrEmpty(sourceProjectName) || !string.IsNullOrEmpty(sourceTeamName) || !string.IsNullOrEmpty(targetProjectName) || !string.IsNullOrEmpty(targetTeamName)) { if (parameters.QueryReplacements == null) { parameters.QueryReplacements = new QueryReplacementParameters(); } if (parameters.QueryReplacements.QueryFindAndReplace == null) { parameters.QueryReplacements.QueryFindAndReplace = new(); } if (!parameters.QueryReplacements.QueryFindAndReplace.Any(o => o.Find.Equals($"[{sourceProjectName}]\\{sourceTeamName}"))) { parameters.QueryReplacements.QueryFindAndReplace.Add(new FindAndReplace { Find = $"[{sourceProjectName}]\\{sourceTeamName}", Replace = $"[{targetProjectName}]\\{targetTeamName}", }); } if (!parameters.QueryReplacements.QueryFindAndReplace.Any(o => o.Find.Equals($"[{sourceProjectName}]"))) { parameters.QueryReplacements.QueryFindAndReplace.Add(new FindAndReplace { Find = $"[{sourceProjectName}]", Replace = $"[{targetProjectName}]", }); } } FindAndReplaceInWiql(parameters, sourceQuery); WorkItemQuery result; int tryCount = 0; while (true) { try { result = TryWriteQuery(sourceQuery, targetQueryInfo); break; } catch { tryCount++; if (tryCount >= 5) { Program.WriteFileProgress($"Query creation failed from source query {sourceQuery.path}"); throw; } } Thread.Sleep(2500); } return(result); }