示例#1
0
        public bool UpdateDatabase(int maxPages)
        {
            // In the first stage, fetch new pages of pull requests.
            if (this.SnapshotComplete)
            {
                if (!GithubApi.GetGithubDeltas(this, maxPages))
                {
                    return(false);
                }
            }
            else
            {
                if (!GithubApi.GetGithubSnapshot(this, maxPages))
                {
                    return(false);
                }
            }

            // In the second stage, fetch review data for each updated PR.
            foreach (var entry in this.PullRequests.Where(entry => !entry.Value.FetchedReviews))
            {
                DatabasePullRequest pr = entry.Value;
                if (!GithubApi.GetGithubReview(this, pr.Number))
                {
                    Save();
                    return(false);
                }
            }
            Save();
            return(true);
        }
示例#2
0
        private DatabasePullRequest FindOrCreatePullRequestState(int number)
        {
            DatabasePullRequest pr;

            if (!PullRequests.ContainsKey(number))
            {
                pr                   = new DatabasePullRequest();
                pr.Number            = number;
                PullRequests[number] = pr;
            }
            return(PullRequests[number]);
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="number"></param>
        /// <param name="state"></param>
        /// <param name="updatedAt"></param>
        /// <returns>true if changed, false if unchanged</returns>
        public bool UpdatePullRequestState(int number, string state, string updatedAt)
        {
            DatabasePullRequest pr = FindOrCreatePullRequestState(number);

            pr.State = state;
            if (pr.UpdatedAt == updatedAt)
            {
                return(false);
            }
            pr.UpdatedAt      = updatedAt;
            pr.FetchedReviews = false;
            return(true);
        }
示例#4
0
        public Dictionary <string, UserStats> ComputeStats(string stateLimit, DateTime updatedSince)
        {
            var stats = new Dictionary <string, UserStats>();

            foreach (var entry in this.PullRequests)
            {
                int number             = entry.Key;
                DatabasePullRequest pr = entry.Value;
                if ((stateLimit != "all") && (pr.State != stateLimit))
                {
                    continue;
                }
                DateTime updatedAt = DateTime.Parse(pr.UpdatedAt);
                if (DateTime.Compare(updatedAt, updatedSince) < 0)
                {
                    continue;
                }
                foreach (var review in pr.ReviewerState)
                {
                    string    login       = review.Key;
                    string    reviewState = review.Value;
                    UserStats userStats   = UserStats.FindOrCreateStats(stats, login);
                    userStats.ReviewRequests++;
                    switch (reviewState)
                    {
                    case "Waiting": userStats.WaitingCount++; break;

                    case "Unreviewed": userStats.UnreviewedCount++; break;

                    case "APPROVED": userStats.ApprovedCount++; break;

                    case "COMMENTED": userStats.CommentedCount++; break;

                    case "CHANGES_REQUESTED": userStats.OtherCount++; break;

                    case "DISMISSED": userStats.UnreviewedCount++; break;

                    default: userStats.OtherCount++; break;
                    }
                }
            }
            return(stats);
        }
示例#5
0
        public void SetFetchedReviews(int number)
        {
            DatabasePullRequest pr = FindOrCreatePullRequestState(number);

            pr.FetchedReviews = true;
        }
示例#6
0
        public string GetPullRequestUpdatedAt(int number)
        {
            DatabasePullRequest pr = FindOrCreatePullRequestState(number);

            return(pr.UpdatedAt);
        }
示例#7
0
        public void UpdateReviewState(int number, string login, string state)
        {
            DatabasePullRequest pr = FindOrCreatePullRequestState(number);

            pr.ReviewerState[login] = state;
        }