Exemplo n.º 1
0
        //private const string Projects = "ESTAT";
        //private const string DestProject = "ESTAT";

        //private const string Projects = "ATT,ESTAT,GIANO,LRX,SWAT,ZEN";
        //private const string DestProject = "SWAT";

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("User: diego.medici");
                Console.Write("Password: "******"https://studiofarma.atlassian.net", UserName, _password);

                string[]     elencoProject = Projects.Split(',');
                ListIssueCGM issueCgms     = new ListIssueCGM();
                int          epicPosition  = 0; //permette di inserire le epic prima delle issue e di mantenere per lo meno l'ordine tra di loro!
                foreach (var project in elencoProject)
                {
                    IEnumerable <Issue> issues = jiraClient.GetIssues(project).OrderBy(k => k, new MyComparer()).ToList();

                    foreach (var locIssue in issues)
                    {
                        IssueSTF issueStf = GetIssueSTF(locIssue.self);

                        IssueCGM issueCgm = new IssueCGM(issueStf, project, DestProject);

                        if (issueCgm.IssueType.Equals("Epic"))
                        {
                            issueCgms.Insert(epicPosition, issueCgm);
                            epicPosition++;
                        }
                        else
                        {
                            issueCgms.Add(issueCgm);
                        }
                    }

                    foreach (IssueCGM issue in IssueCGM.IssueToDo)
                    {
                        if (IssueCGM.Maps.ContainsKey(issue.OriginalParentIssueKey))
                        {
                            issue.DestinationParentIssueKey = IssueCGM.Maps[issue.OriginalParentIssueKey];
                        }
                    }


                    foreach (IssueCGM issue in IssueCGM.EpicsToLink)
                    {
                        if (IssueCGM.MapsEpics.ContainsKey(issue.EpicLinkKey))
                        {
                            issue.EpicLink = IssueCGM.MapsEpics[issue.EpicLinkKey];
                        }
                    }
                }

                string[] lines = new string[issueCgms.Count + 1];
                lines[0] = issueCgms.FirstLine();
                int i = 1;
                foreach (IssueCGM issueCgm in issueCgms)
                {
                    lines[i++] = issueCgm.ToCSV(issueCgms.MaxCountLabel(), issueCgms.MaxCountAffcectVersion(),
                                                issueCgms.MaxCountComponent(), issueCgms.MaxCountFixVersion(), issueCgms.MaxCountComments(), issueCgms.MaxCountAttachments());
                    Console.WriteLine("Lines {0} Ok", i);
                }
                const string nameFileCsv = @"C:\CGM\" + DestProject + ".csv";
                Console.WriteLine("Writing file {0}", nameFileCsv);
                File.WriteAllLines(nameFileCsv, lines);
                Console.WriteLine("Done!");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }

            Console.ReadLine();
        }
Exemplo n.º 2
0
        public IssueCGM(IssueSTF issue, string project, string destProject)
        {
            string projectWithDash = project + "-";
            string destProjectWithDash = destProject + "-";

            Labels = new List<string>();
            AffectVersion = new List<string>();
            FixVersion = new List<string>();
            Components = new List<string>();
            CommentsBody = new List<CommentCgm>();
            Attachments = new List<string>();
            OriginalIssueKey = issue.key;
            DestinationIssueKey = destProjectWithDash+GetNextCounter();
            Maps.Add(OriginalIssueKey, DestinationIssueKey);

            if (issue.fields.parent != null)
            {
                OriginalParentIssueKey = issue.fields.parent.key;
                if (Maps.ContainsKey(OriginalParentIssueKey))
                {
                    DestinationParentIssueKey = Maps[OriginalParentIssueKey];
                }
                else
                {
                    IssueToDo.Add(this);
                }
            }

            if (issue.fields.customfield_10800 != null)
            {
                EpicLinkKey = issue.fields.customfield_10800.ToString();
                if (MapsEpics.ContainsKey(EpicLinkKey))
                {
                    EpicLink = MapsEpics[EpicLinkKey];
                }
                else
                {
                    EpicsToLink.Add(this);
                }
            }

            switch (issue.fields.issuetype.name)
            {
                case "Non-Dev Task":
                    IssueType = "Task";
                    Labels.Add("Non-Dev Task");
                    break;
                case "Improvement":
                    IssueType = "Task";
                    Labels.Add("Improvement");
                    break;
                default:
                    IssueType = issue.fields.issuetype.name;
                    break;
            }

            if (issue.fields.reporter != null)
            {
                Reporter = EmailChanger(issue.fields.reporter.emailAddress, "reporter");
            }
            DateCreated = issue.fields.created;
            Summary = issue.fields.summary.Replace(projectWithDash, destProjectWithDash);
            if (issue.fields.labels != null)
                foreach (string label in issue.fields.labels)
                {
                    Labels.Add(label);
                }

            if (issue.fields.customfield_11100 != null)
            {
                Labels.Add(issue.fields.customfield_11100.value);
            }

            if (issue.fields.assignee != null)
                Assignee = EmailChanger(issue.fields.assignee.emailAddress, "assignee");

            if (issue.fields.description != null)
            {
                Descripton = issue.fields.description.Replace(projectWithDash, destProjectWithDash);
            }

            if (issue.fields.customfield_11500 != null)
            {
                CostUnit = issue.fields.customfield_11500.value;
            }
            else
            {
                CostUnit = "Order external Customer";
            }

            if (issue.fields.priority != null)
            {
                Priority = issue.fields.priority.name;
            }

            EpicName = issue.fields.customfield_10801;
            if (!string.IsNullOrEmpty(EpicName))
            {
                MapsEpics.Add(OriginalIssueKey, EpicName);
            }

            AcceptanceCriteria = issue.fields.customfield_10503;
            ChangeLog = issue.fields.customfield_11000;
            Resolution = issue.fields.resolution == null ? "Unresolved" : issue.fields.resolution.name;
            if (issue.fields.fixVersions != null)
            {
                foreach (Version version in issue.fields.fixVersions)
                {
                    FixVersion.Add(version.name);
                }
            }

            if (issue.fields.components != null)
            {
                foreach (Component component in issue.fields.components)
                {
                    Components.Add(component.name);
                }
            }

            if (!project.Equals(destProject))
            {
                Labels.Add(project);
            }

            CommentCgm oldLink = new CommentCgm();
            oldLink.Author = "*****@*****.**";
            oldLink.Created = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss+0000");
            oldLink.Body = "Link issue originale su JIRA Studiofarma: https://studiofarma.atlassian.net/browse/" + OriginalIssueKey;
            CommentsBody.Add(oldLink);


            if (!string.IsNullOrEmpty(AcceptanceCriteria))
            {
                CommentCgm acceptCriteria = new CommentCgm();
                acceptCriteria.Author = Reporter;
                acceptCriteria.Created = DateTime.Now.ToString("yyyy-MM-ddThh:mm:ss+0000");
                acceptCriteria.Body = "AcceptanceCriteria\\r\\n" + AcceptanceCriteria;
                CommentsBody.Add(acceptCriteria);
            }
          

            if (issue.fields.comment.comments != null)
            {
                foreach (CommentDetail commentDetail in issue.fields.comment.comments)
                {
                    CommentsBody.Add(new CommentCgm(commentDetail, projectWithDash, destProjectWithDash));
                }
            }

            if (issue.fields.attachment != null)
            {
                foreach (var attach in issue.fields.attachment)
                {
                    var fullPathDesintationName = CopyFile(project, destProject, attach);
                    if (!string.IsNullOrEmpty(fullPathDesintationName))
                    {
                        Attachments.Add(fullPathDesintationName.Replace(DestinationDir, ""));                        
                    }
                }
            }

            try
            {
                Status = StatusDictionary[issue.fields.status.name];
                if (issue.fields.status.name.Equals("Graveyard"))
                {
                    Resolution = "Rejected";
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Status key not found: " + issue.fields.status.name);
            }
            Console.WriteLine("{0} -> {1} Res: {2} Status: {3} -> {4} ", issue.key, DestinationIssueKey, Resolution, issue.fields.status.name, Status);
        }