[F3] add GetLocalMatchingRemote with a default implementation

This commit is contained in:
Earl Warren 2023-06-29 18:54:40 +02:00
parent 39ac5233ff
commit 0a22015039
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
15 changed files with 80 additions and 30 deletions

View file

@ -82,7 +82,7 @@ func (o *Asset) FromFormat(asset *format.ReleaseAsset) {
} }
type AssetProvider struct { type AssetProvider struct {
g *Forgejo BaseProvider
} }
func (o *AssetProvider) ToFormat(ctx context.Context, asset *Asset) *format.ReleaseAsset { func (o *AssetProvider) ToFormat(ctx context.Context, asset *Asset) *format.ReleaseAsset {

View file

@ -0,0 +1,54 @@
// SPDX-License-Identifier: MIT
package driver
import (
"context"
"lab.forgefriends.org/friendlyforgeformat/gof3/forges/common"
"lab.forgefriends.org/friendlyforgeformat/gof3/format"
)
type BaseProvider struct {
g *Forgejo
}
func (o *BaseProvider) SetForgejo(g *Forgejo) {
o.g = g
}
type BaseProviderConstraint[Provider any] interface {
*Provider
SetForgejo(*Forgejo)
}
func NewProvider[T any, TPtr BaseProviderConstraint[T]](g *Forgejo) TPtr {
var p TPtr
p = new(T)
p.SetForgejo(g)
return p
}
func (o *BaseProvider) GetLocalMatchingRemote(ctx context.Context, format format.Interface, parents ...common.ContainerObjectInterface) (string, bool) {
return "", false
}
type BaseProviderWithProjectProvider struct {
BaseProvider
project *ProjectProvider
}
func (o *BaseProviderWithProjectProvider) SetProjectProvider(project *ProjectProvider) {
o.project = project
}
type BaseProviderWithProjectProviderConstraint[Provider any] interface {
BaseProviderConstraint[Provider]
SetProjectProvider(project *ProjectProvider)
}
func NewProviderWithProjectProvider[T any, TPtr BaseProviderWithProjectProviderConstraint[T]](g *Forgejo, project *ProjectProvider) TPtr {
p := NewProvider[T, TPtr](g)
p.SetProjectProvider(project)
return p
}

View file

@ -82,7 +82,7 @@ func (o *Comment) FromFormat(comment *format.Comment) {
} }
type CommentProvider struct { type CommentProvider struct {
g *Forgejo BaseProvider
} }
func (o *CommentProvider) ToFormat(ctx context.Context, comment *Comment) *format.Comment { func (o *CommentProvider) ToFormat(ctx context.Context, comment *Comment) *format.Comment {

View file

@ -74,31 +74,31 @@ func (o *Forgejo) GetProvider(name string, parent common.ProviderInterface) comm
} }
switch name { switch name {
case driver.ProviderUser: case driver.ProviderUser:
return driver.NewProvider[UserProvider, *UserProvider, User, *User, format.User, *format.User](driver.ProviderUser, &UserProvider{g: o}) return driver.NewProvider[UserProvider, *UserProvider, User, *User, format.User, *format.User](driver.ProviderUser, NewProvider[UserProvider](o))
case driver.ProviderProject: case driver.ProviderProject:
return driver.NewProviderWithParentOne[ProjectProvider, *ProjectProvider, Project, *Project, format.Project, *format.Project, User, *User](driver.ProviderProject, &ProjectProvider{g: o}) return driver.NewProviderWithParentOne[ProjectProvider, *ProjectProvider, Project, *Project, format.Project, *format.Project, User, *User](driver.ProviderProject, NewProvider[ProjectProvider, *ProjectProvider](o))
case driver.ProviderMilestone: case driver.ProviderMilestone:
return driver.NewProviderWithParentOneTwo[MilestoneProvider, *MilestoneProvider, Milestone, *Milestone, format.Milestone, *format.Milestone, User, *User, Project, *Project](driver.ProviderMilestone, &MilestoneProvider{g: o, project: parentImpl.(*ProjectProvider)}) return driver.NewProviderWithParentOneTwo[MilestoneProvider, *MilestoneProvider, Milestone, *Milestone, format.Milestone, *format.Milestone, User, *User, Project, *Project](driver.ProviderMilestone, NewProviderWithProjectProvider[MilestoneProvider](o, parentImpl.(*ProjectProvider)))
case driver.ProviderIssue: case driver.ProviderIssue:
return driver.NewProviderWithParentOneTwo[IssueProvider, *IssueProvider, Issue, *Issue, format.Issue, *format.Issue, User, *User, Project, *Project](driver.ProviderIssue, &IssueProvider{g: o, project: parentImpl.(*ProjectProvider)}) return driver.NewProviderWithParentOneTwo[IssueProvider, *IssueProvider, Issue, *Issue, format.Issue, *format.Issue, User, *User, Project, *Project](driver.ProviderIssue, NewProviderWithProjectProvider[IssueProvider](o, parentImpl.(*ProjectProvider)))
case driver.ProviderPullRequest: case driver.ProviderPullRequest:
return driver.NewProviderWithParentOneTwo[PullRequestProvider, *PullRequestProvider, PullRequest, *PullRequest, format.PullRequest, *format.PullRequest, User, *User, Project, *Project](driver.ProviderPullRequest, &PullRequestProvider{g: o, project: parentImpl.(*ProjectProvider)}) return driver.NewProviderWithParentOneTwo[PullRequestProvider, *PullRequestProvider, PullRequest, *PullRequest, format.PullRequest, *format.PullRequest, User, *User, Project, *Project](driver.ProviderPullRequest, NewProviderWithProjectProvider[PullRequestProvider](o, parentImpl.(*ProjectProvider)))
case driver.ProviderReview: case driver.ProviderReview:
return driver.NewProviderWithParentOneTwoThree[ReviewProvider, *ReviewProvider, Review, *Review, format.Review, *format.Review, User, *User, Project, *Project, PullRequest, *PullRequest](driver.ProviderReview, &ReviewProvider{g: o}) return driver.NewProviderWithParentOneTwoThree[ReviewProvider, *ReviewProvider, Review, *Review, format.Review, *format.Review, User, *User, Project, *Project, PullRequest, *PullRequest](driver.ProviderReview, NewProvider[ReviewProvider](o))
case driver.ProviderRepository: case driver.ProviderRepository:
return driver.NewProviderWithParentOneTwo[RepositoryProvider, *RepositoryProvider, Repository, *Repository, format.Repository, *format.Repository, User, *User, Project, *Project](driver.ProviderRepository, &RepositoryProvider{g: o}) return driver.NewProviderWithParentOneTwo[RepositoryProvider, *RepositoryProvider, Repository, *Repository, format.Repository, *format.Repository, User, *User, Project, *Project](driver.ProviderRepository, NewProvider[RepositoryProvider](o))
case driver.ProviderTopic: case driver.ProviderTopic:
return driver.NewProviderWithParentOneTwo[TopicProvider, *TopicProvider, Topic, *Topic, format.Topic, *format.Topic, User, *User, Project, *Project](driver.ProviderTopic, &TopicProvider{g: o}) return driver.NewProviderWithParentOneTwo[TopicProvider, *TopicProvider, Topic, *Topic, format.Topic, *format.Topic, User, *User, Project, *Project](driver.ProviderTopic, NewProvider[TopicProvider](o))
case driver.ProviderLabel: case driver.ProviderLabel:
return driver.NewProviderWithParentOneTwo[LabelProvider, *LabelProvider, Label, *Label, format.Label, *format.Label, User, *User, Project, *Project](driver.ProviderLabel, &LabelProvider{g: o, project: parentImpl.(*ProjectProvider)}) return driver.NewProviderWithParentOneTwo[LabelProvider, *LabelProvider, Label, *Label, format.Label, *format.Label, User, *User, Project, *Project](driver.ProviderLabel, NewProviderWithProjectProvider[LabelProvider](o, parentImpl.(*ProjectProvider)))
case driver.ProviderRelease: case driver.ProviderRelease:
return driver.NewProviderWithParentOneTwo[ReleaseProvider, *ReleaseProvider, Release, *Release, format.Release, *format.Release, User, *User, Project, *Project](driver.ProviderRelease, &ReleaseProvider{g: o}) return driver.NewProviderWithParentOneTwo[ReleaseProvider, *ReleaseProvider, Release, *Release, format.Release, *format.Release, User, *User, Project, *Project](driver.ProviderRelease, NewProvider[ReleaseProvider](o))
case driver.ProviderAsset: case driver.ProviderAsset:
return driver.NewProviderWithParentOneTwoThree[AssetProvider, *AssetProvider, Asset, *Asset, format.ReleaseAsset, *format.ReleaseAsset, User, *User, Project, *Project, Release, *Release](driver.ProviderAsset, &AssetProvider{g: o}) return driver.NewProviderWithParentOneTwoThree[AssetProvider, *AssetProvider, Asset, *Asset, format.ReleaseAsset, *format.ReleaseAsset, User, *User, Project, *Project, Release, *Release](driver.ProviderAsset, NewProvider[AssetProvider](o))
case driver.ProviderComment: case driver.ProviderComment:
return driver.NewProviderWithParentOneTwoThreeInterface[CommentProvider, *CommentProvider, Comment, *Comment, format.Comment, *format.Comment, User, *User, Project, *Project](driver.ProviderComment, &CommentProvider{g: o}) return driver.NewProviderWithParentOneTwoThreeInterface[CommentProvider, *CommentProvider, Comment, *Comment, format.Comment, *format.Comment, User, *User, Project, *Project](driver.ProviderComment, NewProvider[CommentProvider](o))
case driver.ProviderReaction: case driver.ProviderReaction:
return driver.NewProviderWithParentOneTwoRest[ReactionProvider, *ReactionProvider, Reaction, *Reaction, format.Reaction, *format.Reaction, User, *User, Project, *Project](driver.ProviderReaction, &ReactionProvider{g: o}) return driver.NewProviderWithParentOneTwoRest[ReactionProvider, *ReactionProvider, Reaction, *Reaction, format.Reaction, *format.Reaction, User, *User, Project, *Project](driver.ProviderReaction, NewProvider[ReactionProvider](o))
default: default:
panic(fmt.Sprintf("unknown provider name %s", name)) panic(fmt.Sprintf("unknown provider name %s", name))
} }

View file

@ -125,8 +125,7 @@ func (o *Issue) FromFormat(issue *format.Issue) {
} }
type IssueProvider struct { type IssueProvider struct {
g *Forgejo BaseProviderWithProjectProvider
project *ProjectProvider
} }
func (o *IssueProvider) ToFormat(ctx context.Context, issue *Issue) *format.Issue { func (o *IssueProvider) ToFormat(ctx context.Context, issue *Issue) *format.Issue {

View file

@ -76,8 +76,7 @@ func (o *Label) FromFormat(label *format.Label) {
} }
type LabelProvider struct { type LabelProvider struct {
g *Forgejo BaseProviderWithProjectProvider
project *ProjectProvider
} }
func (o *LabelProvider) ToFormat(ctx context.Context, label *Label) *format.Label { func (o *LabelProvider) ToFormat(ctx context.Context, label *Label) *format.Label {

View file

@ -119,8 +119,7 @@ func (o *Milestone) FromFormat(milestone *format.Milestone) {
} }
type MilestoneProvider struct { type MilestoneProvider struct {
g *Forgejo BaseProviderWithProjectProvider
project *ProjectProvider
} }
func (o *MilestoneProvider) ToFormat(ctx context.Context, milestone *Milestone) *format.Milestone { func (o *MilestoneProvider) ToFormat(ctx context.Context, milestone *Milestone) *format.Milestone {

View file

@ -84,7 +84,7 @@ func (o *Project) FromFormat(project *format.Project) {
} }
type ProjectProvider struct { type ProjectProvider struct {
g *Forgejo BaseProvider
milestones f3_util.NameIDMap milestones f3_util.NameIDMap
labels f3_util.NameIDMap labels f3_util.NameIDMap
} }

View file

@ -210,8 +210,7 @@ func (o *PullRequest) FromFormat(pullRequest *format.PullRequest) {
} }
type PullRequestProvider struct { type PullRequestProvider struct {
g *Forgejo BaseProviderWithProjectProvider
project *ProjectProvider
prHeadCache f3_forgejo.PrHeadCache prHeadCache f3_forgejo.PrHeadCache
} }

View file

@ -76,7 +76,7 @@ func (o *Reaction) FromFormat(reaction *format.Reaction) {
} }
type ReactionProvider struct { type ReactionProvider struct {
g *Forgejo BaseProvider
} }
func (o *ReactionProvider) ToFormat(ctx context.Context, reaction *Reaction) *format.Reaction { func (o *ReactionProvider) ToFormat(ctx context.Context, reaction *Reaction) *format.Reaction {

View file

@ -100,7 +100,7 @@ func (o *Release) FromFormat(release *format.Release) {
} }
type ReleaseProvider struct { type ReleaseProvider struct {
g *Forgejo BaseProvider
} }
func (o *ReleaseProvider) ToFormat(ctx context.Context, release *Release) *format.Release { func (o *ReleaseProvider) ToFormat(ctx context.Context, release *Release) *format.Release {

View file

@ -35,7 +35,7 @@ func (o *Repository) FromFormat(repository *format.Repository) {
} }
type RepositoryProvider struct { type RepositoryProvider struct {
g *Forgejo BaseProvider
} }
func (o *RepositoryProvider) ToFormat(ctx context.Context, repository *Repository) *format.Repository { func (o *RepositoryProvider) ToFormat(ctx context.Context, repository *Repository) *format.Repository {

View file

@ -151,7 +151,7 @@ func (o *Review) FromFormat(review *format.Review) {
} }
type ReviewProvider struct { type ReviewProvider struct {
g *Forgejo BaseProvider
} }
func (o *ReviewProvider) ToFormat(ctx context.Context, review *Review) *format.Review { func (o *ReviewProvider) ToFormat(ctx context.Context, review *Review) *format.Review {

View file

@ -68,7 +68,7 @@ func (o *Topic) FromFormat(topic *format.Topic) {
} }
type TopicProvider struct { type TopicProvider struct {
g *Forgejo BaseProvider
} }
func (o *TopicProvider) ToFormat(ctx context.Context, topic *Topic) *format.Topic { func (o *TopicProvider) ToFormat(ctx context.Context, topic *Topic) *format.Topic {

View file

@ -76,7 +76,7 @@ func (o *User) FromFormat(user *format.User) {
} }
type UserProvider struct { type UserProvider struct {
g *Forgejo BaseProvider
} }
func (o *UserProvider) ToFormat(ctx context.Context, user *User) *format.User { func (o *UserProvider) ToFormat(ctx context.Context, user *User) *format.User {