From 65c62e987f3ba8a0413bd1ea264a9e841967e272 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 21 Dec 2023 00:55:16 +0100 Subject: [PATCH] gitlab: support nested repos (#2981) close #2311 --- server/forge/gitlab/gitlab.go | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/server/forge/gitlab/gitlab.go b/server/forge/gitlab/gitlab.go index 3f450af3a..4562ee140 100644 --- a/server/forge/gitlab/gitlab.go +++ b/server/forge/gitlab/gitlab.go @@ -226,8 +226,16 @@ func (g *GitLab) Teams(ctx context.Context, user *model.User) ([]*model.Team, er } // getProject fetches the named repository from the forge. -func (g *GitLab) getProject(ctx context.Context, client *gitlab.Client, owner, name string) (*gitlab.Project, error) { - repo, _, err := client.Projects.GetProject(fmt.Sprintf("%s/%s", owner, name), nil, gitlab.WithContext(ctx)) +func (g *GitLab) getProject(ctx context.Context, client *gitlab.Client, mr *model.Repo, owner, name string) (*gitlab.Project, error) { + var ( + repo *gitlab.Project + err error + ) + if mr != nil && mr.ForgeRemoteID.IsValid() { + repo, _, err = client.Projects.GetProject(mr.ForgeRemoteID, nil, gitlab.WithContext(ctx)) + } else { + repo, _, err = client.Projects.GetProject(fmt.Sprintf("%s/%s", owner, name), nil, gitlab.WithContext(ctx)) + } if err != nil { return nil, err } @@ -254,7 +262,7 @@ func (g *GitLab) Repo(ctx context.Context, user *model.User, remoteID model.Forg return g.convertGitLabRepo(_repo) } - _repo, err := g.getProject(ctx, client, owner, name) + _repo, err := g.getProject(ctx, client, nil, owner, name) if err != nil { return nil, err } @@ -309,7 +317,7 @@ func (g *GitLab) PullRequests(ctx context.Context, u *model.User, r *model.Repo, return nil, err } - _repo, err := g.getProject(ctx, client, r.Owner, r.Name) + _repo, err := g.getProject(ctx, client, r, r.Owner, r.Name) if err != nil { return nil, err } @@ -339,7 +347,7 @@ func (g *GitLab) File(ctx context.Context, user *model.User, repo *model.Repo, p if err != nil { return nil, err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return nil, err } @@ -355,10 +363,11 @@ func (g *GitLab) Dir(ctx context.Context, user *model.User, repo *model.Repo, pi } files := make([]*forge_types.FileMeta, 0, perPage) - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return nil, err } + opts := &gitlab.ListTreeOptions{ ListOptions: gitlab.ListOptions{PerPage: perPage}, Path: &path, @@ -402,7 +411,7 @@ func (g *GitLab) Status(ctx context.Context, user *model.User, repo *model.Repo, return err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return err } @@ -459,7 +468,7 @@ func (g *GitLab) Activate(ctx context.Context, user *model.User, repo *model.Rep return err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return err } @@ -494,7 +503,7 @@ func (g *GitLab) Deactivate(ctx context.Context, user *model.User, repo *model.R return err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return err } @@ -548,7 +557,7 @@ func (g *GitLab) Branches(ctx context.Context, user *model.User, repo *model.Rep return nil, err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return nil, err } @@ -575,7 +584,7 @@ func (g *GitLab) BranchHead(ctx context.Context, u *model.User, r *model.Repo, b return "", err } - _repo, err := g.getProject(ctx, client, r.Owner, r.Name) + _repo, err := g.getProject(ctx, client, r, r.Owner, r.Name) if err != nil { return "", err } @@ -744,7 +753,7 @@ func (g *GitLab) loadChangedFilesFromMergeRequest(ctx context.Context, tmpRepo * return nil, err } - _repo, err := g.getProject(ctx, client, repo.Owner, repo.Name) + _repo, err := g.getProject(ctx, client, repo, repo.Owner, repo.Name) if err != nil { return nil, err }