Repo Activity: count new issues that were closed (#31776)
I'm new to go and contributing to gitea, your guidance is much appreciated. This is meant to solve https://github.com/go-gitea/gitea/issues/13309 Previously, closed issues would not be shown under new issues in the activity tab, even if they were newly created. changes: * Split out newlyCreatedIssues from issuesForActivityStatement to count both currently open and closed issues. * Use a seperate function to count active issues to prevent double-counting issues after the above change. Result is that new issues that have been closed are shown both under "new" and "closed". Signed-off-by: Timon van der Berg <tmnvanderberg@gmail.com> (cherry picked from commit ebfde845294cc681de6b1fe1adcf27e35f61b89b)
This commit is contained in:
		
					parent
					
						
							
								526054332a
							
						
					
				
			
			
				commit
				
					
						2675a24649
					
				
			
		
					 1 changed files with 28 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -34,6 +34,7 @@ type ActivityStats struct {
 | 
			
		|||
	OpenedPRAuthorCount         int64
 | 
			
		||||
	MergedPRs                   issues_model.PullRequestList
 | 
			
		||||
	MergedPRAuthorCount         int64
 | 
			
		||||
	ActiveIssues                issues_model.IssueList
 | 
			
		||||
	OpenedIssues                issues_model.IssueList
 | 
			
		||||
	OpenedIssueAuthorCount      int64
 | 
			
		||||
	ClosedIssues                issues_model.IssueList
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +173,7 @@ func (stats *ActivityStats) MergedPRPerc() int {
 | 
			
		|||
 | 
			
		||||
// ActiveIssueCount returns total active issue count
 | 
			
		||||
func (stats *ActivityStats) ActiveIssueCount() int {
 | 
			
		||||
	return stats.OpenedIssueCount() + stats.ClosedIssueCount()
 | 
			
		||||
	return len(stats.ActiveIssues)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OpenedIssueCount returns open issue count
 | 
			
		||||
| 
						 | 
				
			
			@ -285,13 +286,21 @@ func (stats *ActivityStats) FillIssues(ctx context.Context, repoID int64, fromTi
 | 
			
		|||
	stats.ClosedIssueAuthorCount = count
 | 
			
		||||
 | 
			
		||||
	// New issues
 | 
			
		||||
	sess = issuesForActivityStatement(ctx, repoID, fromTime, false, false)
 | 
			
		||||
	sess = newlyCreatedIssues(ctx, repoID, fromTime)
 | 
			
		||||
	sess.OrderBy("issue.created_unix ASC")
 | 
			
		||||
	stats.OpenedIssues = make(issues_model.IssueList, 0)
 | 
			
		||||
	if err = sess.Find(&stats.OpenedIssues); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Active issues
 | 
			
		||||
	sess = activeIssues(ctx, repoID, fromTime)
 | 
			
		||||
	sess.OrderBy("issue.created_unix ASC")
 | 
			
		||||
	stats.ActiveIssues = make(issues_model.IssueList, 0)
 | 
			
		||||
	if err = sess.Find(&stats.ActiveIssues); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Opened issue authors
 | 
			
		||||
	sess = issuesForActivityStatement(ctx, repoID, fromTime, false, false)
 | 
			
		||||
	if _, err = sess.Select("count(distinct issue.poster_id) as `count`").Table("issue").Get(&count); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -317,6 +326,23 @@ func (stats *ActivityStats) FillUnresolvedIssues(ctx context.Context, repoID int
 | 
			
		|||
	return sess.Find(&stats.UnresolvedIssues)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newlyCreatedIssues(ctx context.Context, repoID int64, fromTime time.Time) *xorm.Session {
 | 
			
		||||
	sess := db.GetEngine(ctx).Where("issue.repo_id = ?", repoID).
 | 
			
		||||
		And("issue.is_pull = ?", false).                // Retain the is_pull check to exclude pull requests
 | 
			
		||||
		And("issue.created_unix >= ?", fromTime.Unix()) // Include all issues created after fromTime
 | 
			
		||||
 | 
			
		||||
	return sess
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func activeIssues(ctx context.Context, repoID int64, fromTime time.Time) *xorm.Session {
 | 
			
		||||
	sess := db.GetEngine(ctx).Where("issue.repo_id = ?", repoID).
 | 
			
		||||
		And("issue.is_pull = ?", false).
 | 
			
		||||
		And("issue.created_unix >= ?", fromTime.Unix()).
 | 
			
		||||
		Or("issue.closed_unix >= ?", fromTime.Unix())
 | 
			
		||||
 | 
			
		||||
	return sess
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func issuesForActivityStatement(ctx context.Context, repoID int64, fromTime time.Time, closed, unresolved bool) *xorm.Session {
 | 
			
		||||
	sess := db.GetEngine(ctx).Where("issue.repo_id = ?", repoID).
 | 
			
		||||
		And("issue.is_closed = ?", closed)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue