diff --git a/modules/migrations/gitlab.go b/modules/migrations/gitlab.go index d4b725b5bea..06f4a4ba7fe 100644 --- a/modules/migrations/gitlab.go +++ b/modules/migrations/gitlab.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "net/url" + "path" "strings" "time" @@ -87,6 +88,23 @@ func NewGitlabDownloader(ctx context.Context, baseURL, repoPath, username, passw return nil, err } + // split namespace and subdirectory + pathParts := strings.Split(strings.Trim(repoPath, "/"), "/") + for len(pathParts) > 2 { + if _, _, err = gitlabClient.Version.GetVersion(); err == nil { + break + } + + baseURL = path.Join(baseURL, pathParts[0]) + pathParts = pathParts[1:] + _ = gitlab.WithBaseURL(baseURL)(gitlabClient) + repoPath = strings.Join(pathParts, "/") + } + if err != nil { + log.Trace("Error could not get gitlab version: %v", err) + return nil, err + } + // Grab and store project/repo ID here, due to issues using the URL escaped path gr, _, err := gitlabClient.Projects.GetProject(repoPath, nil, nil, gitlab.WithContext(ctx)) if err != nil {