public WorkItem CreateWorkItem(Tfs tfs, Issue issue) { var tfsConfig = ConfigurationManager.GetSection("tfs") as TfsConfigSection; var workItem = new WorkItem(tfs.TeamProject.WorkItemTypes["Bug"]); SyncFields(workItem, issue); workItem.IterationPath = tfsConfig.DefaultIterationPath; workItem.Fields["Repro steps"].Value = "См. Исходное замечание"; workItem.Save(SaveFlags.MergeAll); tfs.SyncFields(workItem, this); var correspondings = _store.AddBug(workItem.Id, issue.Key); logger.WriteInfo(p => p.JMessage(Site.Tfs, Operation.Create, Artifact.WorkItem, workItem.Id.ToString(), workItem.Id.ToString(), issue.Key)); return(workItem); }
public void TranslateIssueToTfs(Issue issue, Tfs tfs, Session session) { issue = GetIssue(issue.Key); WorkItem workItem = tfs.GetWorkItemByIssueKey(issue.Key); Bug correspondings = GetCorrespondings(issue); if (workItem == null) { workItem = CreateWorkItem(tfs, issue); //Если появились при создании var attachments = LoadAttachments(issue.Key); foreach (var attachment in attachments) { var path = global.AttachmentsFolder + attachment.Filename; tfs.AttachFileTo(path, workItem); } AddChangeAtCurrentSession(workItem, issue, session, string.Format("Создан элемент {0}. Количество вложений {1}", workItem.Id, workItem.AttachedFileCount)); } if (!workItem.IsOpen) { workItem.Open(); } //SyncFields(workItem, issue); TraslateChangelogToTfs(issue, tfs, session); if (workItem.IsDirty) { workItem.Save(SaveFlags.MergeAll); AddChangeAtCurrentSession(workItem, issue, session, string.Format("Перемещены поля из Jira в TFS ({0} - {1})", issue.Key, workItem.Id)); } //todo: Подписывать, что комментарий изменен var issueComments = GetComments(issue).Where(comment => !comment.body.StartsWith("TFS")); var tfsComments = workItem.GetHistory(); foreach (var issueComment in issueComments) { if (!_store.IsJiraLogInChanges(issueComment.body) && !tfsComments.Any(comment => issueComment.renderedBody.RemakeBadTags().EqualToComment(comment))) { issueComment.renderedBody = string.Format("Jira |[{3}] {0} пишет:{1}{2}", issueComment.Author.DisplayName, Environment.NewLine, issueComment.renderedBody, issueComment.UpdatedTime); workItem.Fields["History"].Value = issueComment.renderedBody; } if (workItem.IsDirty) { workItem.Save(SaveFlags.MergeAll); _store.AddSessionChange( new SessionChange { Bug = correspondings, Session = session, Date = DateTime.Now, Operation = string.Format("Добавлен комментарий элементу {0}", workItem.Id), JiraChangelog = issueComment.body, TFSRevision = workItem.Id + "-" + workItem.GetLastRevision().Index, SyncState = SyncState.Success }); } } tfs.SyncFields(workItem, this); logger.WriteInfo(p => p.JMessage(Site.Tfs, Operation.Sended, Artifact.WorkItem, issue.Key, issue.Key, workItem.Id.ToString())); }