prow/tide/tide.go
func headContexts(log *logrus.Entry, ghc githubClient, pr *PullRequest) ([]Context, error) {
	for _, node := range pr.Commits.Nodes {
		if node.Commit.OID == pr.HeadRefOID {
			return node.Commit.Status.Contexts, nil
		}
	}
	// We didn't get the head commit from the query (the commits must not be
	// logically ordered) so we need to specifically ask GitHub for the status
	// and coerce it to a graphql type.
	org := string(pr.Repository.Owner.Login)
	repo := string(pr.Repository.Name)
	// Log this event so we can tune the number of commits we list to minimize this.
	log.Warnf("'last' %d commits didn't contain logical last commit. Querying GitHub...", len(pr.Commits.Nodes))
	combined, err := ghc.GetCombinedStatus(org, repo, string(pr.HeadRefOID))
	if err != nil {
		return nil, fmt.Errorf("failed to get the combined status: %v", err)
	}
	contexts := make([]Context, 0, len(combined.Statuses))
	for _, status := range combined.Statuses {
		contexts = append(
			contexts,
			Context{
				Context:     githubql.String(status.Context),
				Description: githubql.String(status.Description),
				State:       githubql.StatusState(strings.ToUpper(status.State)),
			},
		)
	}
	// Add a commit with these contexts to pr for future look ups.
	pr.Commits.Nodes = append(pr.Commits.Nodes,
		struct{ Commit Commit }{
			Commit: Commit{
				OID:    pr.HeadRefOID,
				Status: struct{ Contexts []Context }{Contexts: contexts},
			},
		},
	)
	return contexts, nil
}
func headContexts(log *logrus.Entry, ghc githubClient, pr *PullRequest) ([]Context, error) {
	for _, node := range pr.Commits.Nodes {
		if node.Commit.OID == pr.HeadRefOID {
			return node.Commit.Status.Contexts, nil
		}
	}
	// We didn't get the head commit from the query (the commits must not be
	// logically ordered) so we need to specifically ask GitHub for the status
	// and coerce it to a graphql type.
	org := string(pr.Repository.Owner.Login)
	repo := string(pr.Repository.Name)
	// Log this event so we can tune the number of commits we list to minimize this.
	log.Warnf("'last' %d commits didn't contain logical last commit. Querying GitHub...", len(pr.Commits.Nodes))
	combined, err := ghc.GetCombinedStatus(org, repo, string(pr.HeadRefOID))
	if err != nil {
		return nil, fmt.Errorf("failed to get the combined status: %v", err)
	}
	contexts := make([]Context, 0, len(combined.Statuses))
	for _, status := range combined.Statuses {
		contexts = append(
			contexts,
			Context{
				Context:     githubql.String(status.Context),
				Description: githubql.String(status.Description),
				State:       githubql.StatusState(strings.ToUpper(status.State)),
			},
		)
	}
	// Add a commit with these contexts to pr for future look ups.
	pr.Commits.Nodes = append(pr.Commits.Nodes,
		struct{ Commit Commit }{
			Commit: Commit{
				OID:    pr.HeadRefOID,
				Status: struct{ Contexts []Context }{Contexts: contexts},
			},
		},
	)
	return contexts, nil
}
func headContexts ( log * logrus . Entry , ghc githubClient , pr * PullRequest ) ( [ ] Context , error ) { for _ , node := range pr . Commits . Nodes { if node . Commit . OID == pr . HeadRefOID { return node . Commit . Status . Contexts , nil } } // We didn't get the head commit from the query (the commits must not be // logically ordered) so we need to specifically ask GitHub for the status // and coerce it to a graphql type. org := string ( pr . Repository . Owner . Login ) repo := string ( pr . Repository . Name ) // Log this event so we can tune the number of commits we list to minimize this. log . Warnf ( " " , len ( pr . Commits . Nodes ) ) combined , err := ghc . GetCombinedStatus ( org , repo , string ( pr . HeadRefOID ) ) if err != nil { return nil , fmt . Errorf ( " " , err ) } contexts := make ( [ ] Context , 0 , len ( combined . Statuses ) ) for _ , status := range combined . Statuses { contexts = append ( contexts , Context { Context : githubql . String ( status . Context ) , Description : githubql . String ( status . Description ) , State : githubql . StatusState ( strings . ToUpper ( status . State ) ) , } , ) } // Add a commit with these contexts to pr for future look ups. pr . Commits . Nodes = append ( pr . Commits . Nodes , struct { Commit Commit } { Commit : Commit { OID : pr . HeadRefOID , Status : struct { Contexts [ ] Context } { Contexts : contexts } , } , } , ) return contexts , nil }
// headContexts gets the status contexts for the commit with OID == pr.HeadRefOID
//
// First, we try to get this value from the commits we got with the PR query.
// Unfortunately the 'last' commit ordering is determined by author date
// not commit date so if commits are reordered non-chronologically on the PR
// branch the 'last' commit isn't necessarily the logically last commit.
// We list multiple commits with the query to increase our chance of success,
// but if we don't find the head commit we have to ask GitHub for it
// specifically (this costs an API token).
headContexts gets the status contexts for the commit with OID == pr . HeadRefOID First we try to get this value from the commits we got with the PR query . Unfortunately the last commit ordering is determined by author date not commit date so if commits are reordered non - chronologically on the PR branch the last commit isn t necessarily the logically last commit . We list multiple commits with the query to increase our chance of success but if we don t find the head commit we have to ask GitHub for it specifically ( this costs an API token ) .