Skip to content

Commit

Permalink
npm packages: automatically set repository link for package based on …
Browse files Browse the repository at this point in the history
…the repository url present inside package.json; closes go-gitea#20146
  • Loading branch information
Mai-Lapyst committed Mar 28, 2023
1 parent f401337 commit eb798b4
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
1 change: 1 addition & 0 deletions modules/packages/npm/creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ func ParsePackage(r io.Reader) (*Package, error) {
Author: meta.Author.Name,
License: meta.License,
ProjectURL: meta.Homepage,
Repository: meta.Repository,
Keywords: meta.Keywords,
Dependencies: meta.Dependencies,
DevelopmentDependencies: meta.DevDependencies,
Expand Down
1 change: 1 addition & 0 deletions modules/packages/npm/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type Metadata struct {
Author string `json:"author,omitempty"`
License string `json:"license,omitempty"`
ProjectURL string `json:"project_url,omitempty"`
Repository Repository `json:"repository,omitempty"`
Keywords []string `json:"keywords,omitempty"`
Dependencies map[string]string `json:"dependencies,omitempty"`
DevelopmentDependencies map[string]string `json:"development_dependencies,omitempty"`
Expand Down
38 changes: 38 additions & 0 deletions routers/api/packages/npm/npm.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/modules/context"
packages_module "code.gitea.io/gitea/modules/packages"
npm_module "code.gitea.io/gitea/modules/packages/npm"
Expand Down Expand Up @@ -217,6 +218,43 @@ func UploadPackage(ctx *context.Context) {
}
}

if npmPackage.Metadata.Repository.Type == "git" {
repoURL := npmPackage.Metadata.Repository.URL

// possible urls for git:
// https://my.domain/sub-path/<owner>/<repo>.git
// git+ssh://[email protected]/<owner>/<repo>.git
// [email protected]:<owner>/<repo>.git

var pathSegments []string
if strings.HasPrefix(repoURL, setting.AppURL) {
pathSegments = strings.Split(strings.Replace(repoURL, setting.AppURL, "", 1), "/")
} else {
sshURL := setting.SSH.User + "@" + setting.SSH.Domain + ":"
if strings.HasPrefix(repoURL, sshURL) {
pathSegments = strings.Split(strings.Replace(repoURL, sshURL, "", 1), "/")
} else {
sshURL := "git+ssh://" + setting.SSH.User + "@" + setting.SSH.Domain + "/"
if strings.HasPrefix(repoURL, sshURL) {
pathSegments = strings.Split(strings.Replace(repoURL, sshURL, "", 1), "/")
}
}
}

if len(pathSegments) == 2 {
ownerName := pathSegments[0]
repoName := strings.Replace(pathSegments[1], ".git", "", 1)
repository, err := repo.GetRepositoryByOwnerAndName(ownerName, repoName)
if err == nil {
if pv.CreatorID == repository.OwnerID {
if err := packages_model.SetRepositoryLink(ctx, pv.PackageID, repository.ID); err != nil {
ctx.ServerError("SetRepositoryLink", err)
}
}
}
}
}

ctx.Status(http.StatusCreated)
}

Expand Down

0 comments on commit eb798b4

Please sign in to comment.