prow/gerrit/reporter/reporter.go
func (c *Client) ShouldReport(pj *v1.ProwJob) bool {

	if pj.Status.State == v1.TriggeredState || pj.Status.State == v1.PendingState {
		// not done yet
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("PJ not finished")
		return false
	}

	if pj.Status.State == v1.AbortedState {
		// aborted (new patchset)
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("PJ aborted")
		return false
	}

	// has gerrit metadata (scheduled by gerrit adapter)
	if pj.ObjectMeta.Annotations[client.GerritID] == "" ||
		pj.ObjectMeta.Annotations[client.GerritInstance] == "" ||
		pj.ObjectMeta.Labels[client.GerritRevision] == "" {
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("Not a gerrit job")
		return false
	}

	// Only report when all jobs of the same type on the same revision finished
	selector := labels.Set{
		client.GerritRevision: pj.ObjectMeta.Labels[client.GerritRevision],
		kube.ProwJobTypeLabel: pj.ObjectMeta.Labels[kube.ProwJobTypeLabel],
	}

	if pj.ObjectMeta.Labels[client.GerritReportLabel] == "" {
		// Shouldn't happen, adapter should already have defaulted to Code-Review
		logrus.Errorf("Gerrit report label not set for job %s", pj.Spec.Job)
	} else {
		selector[client.GerritReportLabel] = pj.ObjectMeta.Labels[client.GerritReportLabel]
	}

	pjs, err := c.lister.List(selector.AsSelector())
	if err != nil {
		logrus.WithError(err).Errorf("Cannot list prowjob with selector %v", selector)
		return false
	}

	for _, pjob := range pjs {
		if pjob.Status.State == v1.TriggeredState || pjob.Status.State == v1.PendingState {
			// other jobs with same label are still running on this revision, skip report
			logrus.WithField("prowjob", pjob.ObjectMeta.Name).Info("Other jobs with same label are still running on this revision")
			return false
		}
	}

	return true
}
func (c *Client) ShouldReport(pj *v1.ProwJob) bool {

	if pj.Status.State == v1.TriggeredState || pj.Status.State == v1.PendingState {
		// not done yet
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("PJ not finished")
		return false
	}

	if pj.Status.State == v1.AbortedState {
		// aborted (new patchset)
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("PJ aborted")
		return false
	}

	// has gerrit metadata (scheduled by gerrit adapter)
	if pj.ObjectMeta.Annotations[client.GerritID] == "" ||
		pj.ObjectMeta.Annotations[client.GerritInstance] == "" ||
		pj.ObjectMeta.Labels[client.GerritRevision] == "" {
		logrus.WithField("prowjob", pj.ObjectMeta.Name).Info("Not a gerrit job")
		return false
	}

	// Only report when all jobs of the same type on the same revision finished
	selector := labels.Set{
		client.GerritRevision: pj.ObjectMeta.Labels[client.GerritRevision],
		kube.ProwJobTypeLabel: pj.ObjectMeta.Labels[kube.ProwJobTypeLabel],
	}

	if pj.ObjectMeta.Labels[client.GerritReportLabel] == "" {
		// Shouldn't happen, adapter should already have defaulted to Code-Review
		logrus.Errorf("Gerrit report label not set for job %s", pj.Spec.Job)
	} else {
		selector[client.GerritReportLabel] = pj.ObjectMeta.Labels[client.GerritReportLabel]
	}

	pjs, err := c.lister.List(selector.AsSelector())
	if err != nil {
		logrus.WithError(err).Errorf("Cannot list prowjob with selector %v", selector)
		return false
	}

	for _, pjob := range pjs {
		if pjob.Status.State == v1.TriggeredState || pjob.Status.State == v1.PendingState {
			// other jobs with same label are still running on this revision, skip report
			logrus.WithField("prowjob", pjob.ObjectMeta.Name).Info("Other jobs with same label are still running on this revision")
			return false
		}
	}

	return true
}
func ( c * Client ) ShouldReport ( pj * v1 . ProwJob ) bool { if pj . Status . State == v1 . TriggeredState || pj . Status . State == v1 . PendingState { // not done yet logrus . WithField ( " " , pj . ObjectMeta . Name ) . Info ( " " ) return false } if pj . Status . State == v1 . AbortedState { // aborted (new patchset) logrus . WithField ( " " , pj . ObjectMeta . Name ) . Info ( " " ) return false } // has gerrit metadata (scheduled by gerrit adapter) if pj . ObjectMeta . Annotations [ client . GerritID ] == " " || pj . ObjectMeta . Annotations [ client . GerritInstance ] == " " || pj . ObjectMeta . Labels [ client . GerritRevision ] == " " { logrus . WithField ( " " , pj . ObjectMeta . Name ) . Info ( " " ) return false } // Only report when all jobs of the same type on the same revision finished selector := labels . Set { client . GerritRevision : pj . ObjectMeta . Labels [ client . GerritRevision ] , kube . ProwJobTypeLabel : pj . ObjectMeta . Labels [ kube . ProwJobTypeLabel ] , } if pj . ObjectMeta . Labels [ client . GerritReportLabel ] == " " { // Shouldn't happen, adapter should already have defaulted to Code-Review logrus . Errorf ( " " , pj . Spec . Job ) } else { selector [ client . GerritReportLabel ] = pj . ObjectMeta . Labels [ client . GerritReportLabel ] } pjs , err := c . lister . List ( selector . AsSelector ( ) ) if err != nil { logrus . WithError ( err ) . Errorf ( " " , selector ) return false } for _ , pjob := range pjs { if pjob . Status . State == v1 . TriggeredState || pjob . Status . State == v1 . PendingState { // other jobs with same label are still running on this revision, skip report logrus . WithField ( " " , pjob . ObjectMeta . Name ) . Info ( " " ) return false } } return true }
// ShouldReport returns if this prowjob should be reported by the gerrit reporter
ShouldReport returns if this prowjob should be reported by the gerrit reporter