mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00:00 
			
		
		
		
	user, topic, project, label, milestone, repository, pull_request, release, asset, comment, reaction, review providers Signed-off-by: Earl Warren <contact@earl-warren.org> Preserve file size when creating attachments Introduced inc6f5029708repoList.LoadAttributes has a ctx argument now Rename `repo.GetOwner` to `repo.LoadOwner`bd66fa586aupgrade to the latest gof3 (cherry picked from commitc770713656) [F3] ID remapping logic is in place, remove workaround (cherry picked from commitd0fee30167) [F3] it is experimental, do not enable by default (cherry picked from commitde325b21d0) (cherry picked from commit547e7b3c40)
		
			
				
	
	
		
			126 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package driver
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	issues_model "code.gitea.io/gitea/models/issues"
 | |
| 
 | |
| 	"lab.forgefriends.org/friendlyforgeformat/gof3/format"
 | |
| 	"lab.forgefriends.org/friendlyforgeformat/gof3/util"
 | |
| )
 | |
| 
 | |
| type Label struct {
 | |
| 	issues_model.Label
 | |
| }
 | |
| 
 | |
| func LabelConverter(f *issues_model.Label) *Label {
 | |
| 	return &Label{
 | |
| 		Label: *f,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (o Label) GetID() int64 {
 | |
| 	return o.ID
 | |
| }
 | |
| 
 | |
| func (o Label) GetName() string {
 | |
| 	return o.Name
 | |
| }
 | |
| 
 | |
| func (o *Label) SetID(id int64) {
 | |
| 	o.ID = id
 | |
| }
 | |
| 
 | |
| func (o *Label) IsNil() bool {
 | |
| 	return o.ID == 0
 | |
| }
 | |
| 
 | |
| func (o *Label) Equals(other *Label) bool {
 | |
| 	return o.Name == other.Name
 | |
| }
 | |
| 
 | |
| func (o *Label) ToFormat() *format.Label {
 | |
| 	return &format.Label{
 | |
| 		Common:      format.NewCommon(o.ID),
 | |
| 		Name:        o.Name,
 | |
| 		Color:       o.Color,
 | |
| 		Description: o.Description,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (o *Label) FromFormat(label *format.Label) {
 | |
| 	*o = Label{
 | |
| 		Label: issues_model.Label{
 | |
| 			ID:          label.GetID(),
 | |
| 			Name:        label.Name,
 | |
| 			Description: label.Description,
 | |
| 			Color:       label.Color,
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type LabelProvider struct {
 | |
| 	g       *Forgejo
 | |
| 	project *ProjectProvider
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) ToFormat(ctx context.Context, label *Label) *format.Label {
 | |
| 	return label.ToFormat()
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) FromFormat(ctx context.Context, m *format.Label) *Label {
 | |
| 	var label Label
 | |
| 	label.FromFormat(m)
 | |
| 	return &label
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) GetObjects(ctx context.Context, user *User, project *Project, page int) []*Label {
 | |
| 	labels, err := issues_model.GetLabelsByRepoID(ctx, project.GetID(), "", db.ListOptions{Page: page, PageSize: o.g.perPage})
 | |
| 	if err != nil {
 | |
| 		panic(fmt.Errorf("error while listing labels: %v", err))
 | |
| 	}
 | |
| 
 | |
| 	r := util.ConvertMap[*issues_model.Label, *Label](labels, LabelConverter)
 | |
| 	if o.project != nil {
 | |
| 		o.project.labels = util.NewNameIDMap[*Label](r)
 | |
| 	}
 | |
| 	return r
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) ProcessObject(ctx context.Context, user *User, project *Project, label *Label) {
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) Get(ctx context.Context, user *User, project *Project, exemplar *Label) *Label {
 | |
| 	id := exemplar.GetID()
 | |
| 	label, err := issues_model.GetLabelInRepoByID(ctx, project.GetID(), id)
 | |
| 	if issues_model.IsErrRepoLabelNotExist(err) {
 | |
| 		return &Label{}
 | |
| 	}
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	return LabelConverter(label)
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) Put(ctx context.Context, user *User, project *Project, label *Label) *Label {
 | |
| 	l := label.Label
 | |
| 	l.RepoID = project.GetID()
 | |
| 	if err := issues_model.NewLabel(ctx, &l); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	return o.Get(ctx, user, project, LabelConverter(&l))
 | |
| }
 | |
| 
 | |
| func (o *LabelProvider) Delete(ctx context.Context, user *User, project *Project, label *Label) *Label {
 | |
| 	l := o.Get(ctx, user, project, label)
 | |
| 	if !l.IsNil() {
 | |
| 		if err := issues_model.DeleteLabel(project.GetID(), l.GetID()); err != nil {
 | |
| 			panic(err)
 | |
| 		}
 | |
| 	}
 | |
| 	return l
 | |
| }
 |