public bool IsAuthor(DataModelIssue issue) { if ((Name != issue.User.Login) && (Id != issue.User.Id)) { return(false); } return(Interval.Contains(issue.CreatedAt.Value)); }
public IssueEntry( DataModelIssue issue, EntryKind kind, IEnumerable <Label> styledLabels = null, string styleName = null) : base(issue, styledLabels, styleName) { Kind = kind; IsPullRequest = issue.IsPullRequest; IssueNumber = issue.Number; }
// Returns null if the report is empty protected static string GenerateReport( Alert alert, string htmlTemplate, IEnumerable <DataModelIssue> beginIssues, IEnumerable <DataModelIssue> endIssues, IEnumerable <Label> areaLabels) { IEnumerable <DataModelIssue> beginQuery = alert.Query.Evaluate(beginIssues); IEnumerable <DataModelIssue> endQuery = alert.Query.Evaluate(endIssues); IEnumerable <DataModelIssue> goneIssues = beginQuery.Except_ByIssueNumber(endQuery); IEnumerable <DataModelIssue> newIssues = endQuery.Except_ByIssueNumber(beginQuery); if (goneIssues.None() && newIssues.None()) { Console.WriteLine(" No changes to the query, skipping."); Console.WriteLine(); return(null); } string text = htmlTemplate; text = text.Replace("%ISSUES_LINKED_COUNTS%", AlertReport.GetLinkedCount("", newIssues.Concat(goneIssues))); IEnumerable <IssueEntry> newIssueEntries = newIssues .Select(issue => new IssueEntry(issue, IssueEntry.EntryKind.New)); IEnumerable <IssueEntry> goneIssueEntries = goneIssues .Select(issue => { DataModelIssue newIssue = endIssues.FirstOrNull_ByIssueNumber(issue); if (newIssue == null) { // Closed issue return(new IssueEntry(issue, IssueEntry.EntryKind.Closed)); } return(new IssueEntry(newIssue, IssueEntry.EntryKind.Moved, areaLabels, "moved_area")); }); text = text.Replace("%ISSUES_TABLE%", FormatIssueTable(newIssueEntries.Concat(goneIssueEntries) .OrderBy(entry => entry.OrderType) .ThenBy(entry => entry.IssueNumber))); return(text); }
public Flags GetUntriagedFlags(DataModelIssue issue) { Flags triageFlags = 0; // Check if this issue is marked as 'untriaged' if (issue.Labels.Intersect_ByName(_untriagedLabels).Any()) { triageFlags |= Flags.UntriagedLabel; } // check if this issue has a Milestone if (issue.Milestone == null) { triageFlags |= Flags.MissingMilestone; } // Count area labels int areaLabelsCount = issue.Labels.Intersect_ByName(_areaLabels).Count(); if (areaLabelsCount == 0) { triageFlags |= Flags.MissingAreaLabel; } else if (areaLabelsCount > 1) { triageFlags |= Flags.MultipleAreaLabels; } // Count issue labels int issueTypeLabelsCount = issue.Labels.Intersect_ByName(_issueTypeLabels).Count(); if (issueTypeLabelsCount == 0) { triageFlags |= Flags.MissingIssueTypeLabel; } else if (issueTypeLabelsCount > 1) { triageFlags |= Flags.MultipleIssueTypeLabels; } return(triageFlags); }
// assignedToOverride - used for using 'Closed' as AssignedTo value in reports public IssueEntry(DataModelIssue issue, IEnumerable <Label> styledLabels = null, string styleName = null) { string idPrefix = ""; if (issue.IsPullRequest) { idPrefix = "PR "; } IssueId = $"{idPrefix}#<a href=\"{issue.HtmlUrl}\">{issue.Number}</a>"; Title = issue.Title; styledLabels = styledLabels ?? new Label[] { }; LabelsText = string.Join(", ", issue.Labels.Select(l => styledLabels.Contains_ByName(l.Name) ? $"<span class=\"{styleName}\">{l.Name}</span>" : l.Name)); if (issue.Assignee != null) { AssignedToText = $"<a href=\"{issue.Assignee.HtmlUrl}\">@{issue.Assignee.Login}</a>"; } else { AssignedToText = ""; } if (issue.Milestone != null) { MilestoneText = issue.Milestone.Title; } else { MilestoneText = ""; } }
public bool ContainsAuthor(DataModelIssue issue) { return(Categories.Where(category => category.ContainsAuthor(issue)).Any()); }
public bool ContainsAuthor(DataModelIssue issue) { return(Users.Where(user => user.IsAuthor(issue)).Any()); }
public override bool Evaluate(DataModelIssue issue) { return(issue.IsIssueOrComment == _isIssue); }
public override bool Evaluate(DataModelIssue issue) { return(_value); }
public override bool Evaluate(DataModelIssue issue) { return(issue.HasAssignee(_assigneeName)); }
public override bool Evaluate(DataModelIssue issue) { return((issue.Milestone != null) && _milestoneRegex.IsMatch(issue.Milestone.Title)); }
public override bool Evaluate(DataModelIssue issue) { return(issue.IsMilestone(_milestoneName)); }
public override bool Evaluate(DataModelIssue issue) { return(issue.IsOpen == _isOpen); }
public override bool Evaluate(DataModelIssue issue) { return(issue.HasLabel(_labelName)); }
public override bool Evaluate(DataModelIssue issue) { return(GetUntriagedFlags(issue) != 0); }
public abstract bool Evaluate(DataModelIssue issue);
public override bool Evaluate(DataModelIssue issue) { return(issue.Labels.Where(label => _labelRegex.IsMatch(label.Name)).Any()); }