Beispiel #1
0
 public PullRequest(WorkItem fromItem, List<Commit> commits) : base()
 {
     this.Id = fromItem.Id;
     this.Url = fromItem.Url;
     this.Title = fromItem.Title;
     this.Author = fromItem.Author;
     this.CreationDate = fromItem.CreationDate;
     this.RelatedItems = fromItem.RelatedItems;
     this.Commits = commits;
 }
Beispiel #2
0
        private static List<WorkItem> Process(string targetPath)
        {
            var pullPath = Path.Combine(targetPath, "pulls.json");
            var rawPulls = File.ReadAllText(pullPath);
            var issuePath = Path.Combine(targetPath, "issues.json");
            var rawIssues = File.ReadAllText(issuePath);

            var pulls = JsonConvert.DeserializeObject(rawPulls) as JArray;
            var issues = JsonConvert.DeserializeObject(rawIssues) as JArray;

            var allItems = new List<WorkItem>(issues.Count);

            MultiValueDictionary<int, int> issueRelations = new MultiValueDictionary<int, int>();

            foreach (var issue in issues)
            {
                var id = issue.Value<int>("number");
                var rawRelatedItems = issue.Value<JArray>("relatedIssues");
                var relatedItems = rawRelatedItems.Count == 0 ? new List<int>() : rawRelatedItems.Select(n => n.Value<int>()).ToList();
                foreach (var relatedItem in relatedItems)
                {
                    issueRelations.Add(id, relatedItem);
                    issueRelations.Add(relatedItem, id);
                }

                var newItem = new WorkItem()
                {
                    Id = id,
                    Url = issue.Value<string>("htmlUrl"),
                    Title = issue.Value<string>("title"),
                    Body = issue.Value<string>("body"),
                    Author = issue.Value<string>("submitter"),
                    CreationDate = issue.Value<DateTime>("createdAt"),
                };
                allItems.Add(newItem);
            }

            foreach (var item in allItems)
            {
                IReadOnlyCollection<int> knownRelations;
                if (!issueRelations.TryGetValue(item.Id, out knownRelations))
                    continue;
                item.RelatedItems = knownRelations;
            }


            foreach (var pull in pulls)
            {
                var id = pull.Value<int>("number");

                var earliestCommit = DateTime.MaxValue;
                var latestCommit = DateTime.MinValue;
                var commits = new List<Commit>();
                foreach (var commit in pull["commits"] as JArray)
                {
                    var commitDate = commit.Value<DateTime>("createdAt");

                    if (commitDate < earliestCommit)
                        earliestCommit = commitDate;
                    if (commitDate > latestCommit)
                        latestCommit = commitDate;

                    var commitItem = new Commit()
                    {
                        Date = commitDate,
                        Sha = commit.Value<string>("sha"),
                        Message = commit.Value<string>("message"),
                        Author = commit.Value<string>("committer"),
                    };
                    commits.Add(commitItem);
                }

                var closedAtString = pull.Value<string>("closedAt");
                DateTime closedAt;
                if (!(DateTime.TryParse(closedAtString, out closedAt)))
                {
                    closedAt = default(DateTime);
                }

                var originalItem = allItems.Single(n => n.Id == id);
                var pullRequest = new PullRequest(originalItem, commits)
                {
                    FirstCommit = earliestCommit,
                    LastCommit = latestCommit,
                    CloseDate = closedAt,
                    Sha = pull.Value<string>("sha"),
                    Branch = pull.Value<string>("branch"),
                };
                allItems[allItems.IndexOf(originalItem)] = pullRequest;
            }
            return allItems;
        }