1
0
mirror of https://github.com/woodpecker-ci/woodpecker.git synced 2025-03-11 13:59:36 +02:00

Use forgeID for repo search

This commit is contained in:
Anbraten 2025-02-17 10:42:07 +01:00
parent faa9ea465f
commit f5711af205
No known key found for this signature in database
GPG Key ID: B1222603899C6B25
11 changed files with 33 additions and 27 deletions

View File

@ -47,8 +47,10 @@ func GetBadge(c *gin.Context) {
var repo *model.Repo
var err error
forgeID := int64(1) // TODO: get forge id somehow
if c.Param("repo_name") != "" {
repo, err = _store.GetRepoName(c.Param("repo_id_or_owner") + "/" + c.Param("repo_name"))
repo, err = _store.GetRepoName(c.Param("repo_id_or_owner")+"/"+c.Param("repo_name"), forgeID)
} else {
var repoID int64
repoID, err = strconv.ParseInt(c.Param("repo_id_or_owner"), 10, 64)
@ -101,8 +103,10 @@ func GetCC(c *gin.Context) {
var repo *model.Repo
var err error
forgeID := int64(1) // TODO: get forge id somehow
if c.Param("repo_name") != "" {
repo, err = _store.GetRepoName(c.Param("repo_id_or_owner") + "/" + c.Param("repo_name"))
repo, err = _store.GetRepoName(c.Param("repo_id_or_owner")+"/"+c.Param("repo_name"), forgeID)
} else {
var repoID int64
repoID, err = strconv.ParseInt(c.Param("repo_id_or_owner"), 10, 64)

View File

@ -612,7 +612,7 @@ func (c *Forgejo) getChangedFilesForPR(ctx context.Context, repo *model.Repo, in
return []string{}, nil
}
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName)
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName, repo.ForgeID)
if err != nil {
return nil, err
}

View File

@ -619,7 +619,7 @@ func (c *Gitea) getChangedFilesForPR(ctx context.Context, repo *model.Repo, inde
return []string{}, nil
}
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName)
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName, repo.ForgeID)
if err != nil {
return nil, err
}
@ -656,7 +656,7 @@ func (c *Gitea) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName s
return "", nil
}
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName)
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName, repo.ForgeID)
if err != nil {
return "", err
}

View File

@ -635,7 +635,7 @@ func (c *client) loadChangedFilesFromPullRequest(ctx context.Context, pull *gith
return pipeline, nil
}
repo, err := _store.GetRepoNameFallback(tmpRepo.ForgeRemoteID, tmpRepo.FullName)
repo, err := _store.GetRepoNameFallback(tmpRepo.ForgeRemoteID, tmpRepo.FullName, tmpRepo.ForgeID)
if err != nil {
return nil, err
}
@ -673,7 +673,7 @@ func (c *client) getTagCommitSHA(ctx context.Context, repo *model.Repo, tagName
return "", nil
}
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName)
repo, err := _store.GetRepoNameFallback(repo.ForgeRemoteID, repo.FullName, repo.ForgeID)
if err != nil {
return "", err
}

View File

@ -28,7 +28,7 @@ import (
"time"
"github.com/rs/zerolog/log"
"gitlab.com/gitlab-org/api/client-go"
gitlab "gitlab.com/gitlab-org/api/client-go"
"golang.org/x/oauth2"
"go.woodpecker-ci.org/woodpecker/v3/server"
@ -782,7 +782,7 @@ func (g *GitLab) loadChangedFilesFromMergeRequest(ctx context.Context, tmpRepo *
return pipeline, nil
}
repo, err := _store.GetRepoNameFallback(tmpRepo.ForgeRemoteID, tmpRepo.FullName)
repo, err := _store.GetRepoNameFallback(tmpRepo.ForgeRemoteID, tmpRepo.FullName, tmpRepo.ForgeID)
if err != nil {
return nil, err
}

View File

@ -63,7 +63,7 @@ func SetRepo() gin.HandlerFunc {
}
repo, err = _store.GetRepo(repoID)
} else {
repo, err = _store.GetRepoName(fullName)
repo, err = _store.GetRepoName(fullName, user.ForgeID)
}
if repo != nil && err == nil {

View File

@ -51,7 +51,7 @@ func (s storage) permUpsert(sess *xorm.Session, perm *model.Perm) error {
// lookup repo based on name or forge ID if possible
if perm.RepoID == 0 && perm.Repo != nil {
r, err := s.getRepoNameFallback(sess, perm.Repo.ForgeRemoteID, perm.Repo.FullName)
r, err := s.getRepoNameFallback(sess, perm.Repo.ForgeRemoteID, perm.Repo.FullName, perm.Repo.ForgeID)
if err != nil {
return err
}

View File

@ -21,9 +21,9 @@ import (
"go.woodpecker-ci.org/woodpecker/v3/server/model"
)
func (s storage) getRedirection(e *xorm.Session, fullName string) (*model.Redirection, error) {
func (s storage) getRedirection(e *xorm.Session, fullName string, forgeID int64) (*model.Redirection, error) {
repo := new(model.Redirection)
return repo, wrapGet(e.Where("repo_full_name = ?", fullName).Get(repo))
return repo, wrapGet(e.Where("repo_full_name = ?", fullName).And("forge_id = ?", forgeID).Get(repo))
}
func (s storage) CreateRedirection(redirect *model.Redirection) error {

View File

@ -42,27 +42,27 @@ func (s storage) getRepoForgeID(e *xorm.Session, remoteID model.ForgeRemoteID) (
return repo, wrapGet(e.Where("forge_remote_id = ?", remoteID).Get(repo))
}
func (s storage) GetRepoNameFallback(remoteID model.ForgeRemoteID, fullName string) (*model.Repo, error) {
func (s storage) GetRepoNameFallback(remoteID model.ForgeRemoteID, fullName string, forgeID int64) (*model.Repo, error) {
sess := s.engine.NewSession()
defer sess.Close()
return s.getRepoNameFallback(sess, remoteID, fullName)
return s.getRepoNameFallback(sess, remoteID, fullName, forgeID)
}
func (s storage) getRepoNameFallback(e *xorm.Session, remoteID model.ForgeRemoteID, fullName string) (*model.Repo, error) {
func (s storage) getRepoNameFallback(e *xorm.Session, remoteID model.ForgeRemoteID, fullName string, forgeID int64) (*model.Repo, error) {
repo, err := s.getRepoForgeID(e, remoteID)
if errors.Is(err, types.RecordNotExist) {
return s.getRepoName(e, fullName)
return s.getRepoName(e, fullName, forgeID)
}
return repo, err
}
func (s storage) GetRepoName(fullName string) (*model.Repo, error) {
func (s storage) GetRepoName(fullName string, forgeID int64) (*model.Repo, error) {
sess := s.engine.NewSession()
defer sess.Close()
repo, err := s.getRepoName(sess, fullName)
repo, err := s.getRepoName(sess, fullName, forgeID)
if errors.Is(err, types.RecordNotExist) {
// the repository does not exist, so look for a redirection
redirect, err := s.getRedirection(sess, fullName)
redirect, err := s.getRedirection(sess, fullName, forgeID)
if err != nil {
return nil, err
}
@ -71,9 +71,9 @@ func (s storage) GetRepoName(fullName string) (*model.Repo, error) {
return repo, err
}
func (s storage) getRepoName(e *xorm.Session, fullName string) (*model.Repo, error) {
func (s storage) getRepoName(e *xorm.Session, fullName string, forgeID int64) (*model.Repo, error) {
repo := new(model.Repo)
return repo, wrapGet(e.Where("LOWER(full_name) = ?", strings.ToLower(fullName)).Get(repo))
return repo, wrapGet(e.Where("LOWER(full_name) = ?", strings.ToLower(fullName)).And("forge_id = ?", forgeID).Get(repo))
}
func (s storage) GetRepoCount() (int64, error) {

View File

@ -101,10 +101,11 @@ func TestGetRepoName(t *testing.T) {
FullName: "bradrydzewski/TEST",
Owner: "bradrydzewski",
Name: "TEST",
ForgeID: 1,
}
assert.NoError(t, store.CreateRepo(&repo))
getrepo, err := store.GetRepoName(repo.FullName)
getrepo, err := store.GetRepoName(repo.FullName, repo.ForgeID)
assert.NoError(t, err)
assert.Equal(t, repo.ID, getrepo.ID)
assert.Equal(t, repo.UserID, getrepo.UserID)
@ -320,6 +321,7 @@ func TestRepoRedirection(t *testing.T) {
FullName: "bradrydzewski/test",
Owner: "bradrydzewski",
Name: "test",
ForgeID: 1,
}
assert.NoError(t, store.CreateRepo(&repo))
@ -338,7 +340,7 @@ func TestRepoRedirection(t *testing.T) {
}))
// test redirection from old repo name
repoFromStore, err := store.GetRepoNameFallback("1", "bradrydzewski/test")
repoFromStore, err := store.GetRepoNameFallback("1", "bradrydzewski/test", repo.ForgeID)
assert.NoError(t, err)
assert.Equal(t, repoFromStore.FullName, repoUpdated.FullName)
@ -351,7 +353,7 @@ func TestRepoRedirection(t *testing.T) {
}
assert.NoError(t, store.CreateRepo(&repo))
repoFromStore, err = store.GetRepoNameFallback("", "bradrydzewski/test-no-forge-id")
repoFromStore, err = store.GetRepoNameFallback("", "bradrydzewski/test-no-forge-id", repo.ForgeID)
assert.NoError(t, err)
assert.Equal(t, repoFromStore.FullName, repo.FullName)
}

View File

@ -49,9 +49,9 @@ type Store interface {
// GetRepoForgeID gets a repo by its forge ID.
GetRepoForgeID(model.ForgeRemoteID) (*model.Repo, error)
// GetRepoNameFallback gets the repo by its forge ID and if this doesn't exist by its full name.
GetRepoNameFallback(remoteID model.ForgeRemoteID, fullName string) (*model.Repo, error)
GetRepoNameFallback(remoteID model.ForgeRemoteID, fullName string, forgeID int64) (*model.Repo, error)
// GetRepoName gets a repo by its full name.
GetRepoName(string) (*model.Repo, error)
GetRepoName(string, int64) (*model.Repo, error)
// GetRepoCount gets a count of all repositories in the system.
GetRepoCount() (int64, error)
// CreateRepo creates a new repository.