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); }
private DatabasePullRequest FindOrCreatePullRequestState(int number) { DatabasePullRequest pr; if (!PullRequests.ContainsKey(number)) { pr = new DatabasePullRequest(); pr.Number = number; PullRequests[number] = pr; } return(PullRequests[number]); }
/// <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); }
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); }
public void SetFetchedReviews(int number) { DatabasePullRequest pr = FindOrCreatePullRequestState(number); pr.FetchedReviews = true; }
public string GetPullRequestUpdatedAt(int number) { DatabasePullRequest pr = FindOrCreatePullRequestState(number); return(pr.UpdatedAt); }
public void UpdateReviewState(int number, string login, string state) { DatabasePullRequest pr = FindOrCreatePullRequestState(number); pr.ReviewerState[login] = state; }