mirror of
https://github.com/go-gitea/gitea.git
synced 2025-02-20 11:43:57 +08:00
Compare commits
8 Commits
765abc7780
...
ae44ac7b68
Author | SHA1 | Date | |
---|---|---|---|
|
ae44ac7b68 | ||
|
ab61e45773 | ||
|
a3aad88542 | ||
|
357080bf67 | ||
|
e0fc681954 | ||
|
d192e8cb6f | ||
|
5c1d4c4f66 | ||
|
00a56ef532 |
@ -110,9 +110,12 @@ func GetPackageDescriptor(ctx context.Context, pv *PackageVersion) (*PackageDesc
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
repository, err := repo_model.GetRepositoryByID(ctx, p.RepoID)
|
var repository *repo_model.Repository
|
||||||
if err != nil && !repo_model.IsErrRepoNotExist(err) {
|
if p.RepoID > 0 {
|
||||||
return nil, err
|
repository, err = repo_model.GetRepositoryByID(ctx, p.RepoID)
|
||||||
|
if err != nil && !repo_model.IsErrRepoNotExist(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
creator, err := user_model.GetUserByID(ctx, pv.CreatorID)
|
creator, err := user_model.GetUserByID(ctx, pv.CreatorID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -66,6 +66,7 @@ type PackageMetadataResponse struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PackageVersionMetadata contains package metadata
|
// PackageVersionMetadata contains package metadata
|
||||||
|
// https://getcomposer.org/doc/05-repositories.md#package
|
||||||
type PackageVersionMetadata struct {
|
type PackageVersionMetadata struct {
|
||||||
*composer_module.Metadata
|
*composer_module.Metadata
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
@ -73,6 +74,7 @@ type PackageVersionMetadata struct {
|
|||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Created time.Time `json:"time"`
|
Created time.Time `json:"time"`
|
||||||
Dist Dist `json:"dist"`
|
Dist Dist `json:"dist"`
|
||||||
|
Source Source `json:"source"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dist contains package download information
|
// Dist contains package download information
|
||||||
@ -82,6 +84,13 @@ type Dist struct {
|
|||||||
Checksum string `json:"shasum"`
|
Checksum string `json:"shasum"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Source contains package source information
|
||||||
|
type Source struct {
|
||||||
|
URL string `json:"url"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Reference string `json:"reference"`
|
||||||
|
}
|
||||||
|
|
||||||
func createPackageMetadataResponse(registryURL string, pds []*packages_model.PackageDescriptor) *PackageMetadataResponse {
|
func createPackageMetadataResponse(registryURL string, pds []*packages_model.PackageDescriptor) *PackageMetadataResponse {
|
||||||
versions := make([]*PackageVersionMetadata, 0, len(pds))
|
versions := make([]*PackageVersionMetadata, 0, len(pds))
|
||||||
|
|
||||||
@ -94,7 +103,7 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
versions = append(versions, &PackageVersionMetadata{
|
pkg := PackageVersionMetadata{
|
||||||
Name: pd.Package.Name,
|
Name: pd.Package.Name,
|
||||||
Version: pd.Version.Version,
|
Version: pd.Version.Version,
|
||||||
Type: packageType,
|
Type: packageType,
|
||||||
@ -105,7 +114,16 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac
|
|||||||
URL: fmt.Sprintf("%s/files/%s/%s/%s", registryURL, url.PathEscape(pd.Package.LowerName), url.PathEscape(pd.Version.LowerVersion), url.PathEscape(pd.Files[0].File.LowerName)),
|
URL: fmt.Sprintf("%s/files/%s/%s/%s", registryURL, url.PathEscape(pd.Package.LowerName), url.PathEscape(pd.Version.LowerVersion), url.PathEscape(pd.Files[0].File.LowerName)),
|
||||||
Checksum: pd.Files[0].Blob.HashSHA1,
|
Checksum: pd.Files[0].Blob.HashSHA1,
|
||||||
},
|
},
|
||||||
})
|
}
|
||||||
|
if pd.Repository != nil {
|
||||||
|
pkg.Source = Source{
|
||||||
|
URL: pd.Repository.HTMLURL(),
|
||||||
|
Type: "git",
|
||||||
|
Reference: pd.Version.Version,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
versions = append(versions, &pkg)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &PackageMetadataResponse{
|
return &PackageMetadataResponse{
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
"code.gitea.io/gitea/models/packages"
|
"code.gitea.io/gitea/models/packages"
|
||||||
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
"code.gitea.io/gitea/models/unittest"
|
"code.gitea.io/gitea/models/unittest"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
composer_module "code.gitea.io/gitea/modules/packages/composer"
|
composer_module "code.gitea.io/gitea/modules/packages/composer"
|
||||||
@ -217,5 +218,38 @@ func TestPackageComposer(t *testing.T) {
|
|||||||
assert.Equal(t, "4f5fa464c3cb808a1df191dbf6cb75363f8b7072", pkgs[0].Dist.Checksum)
|
assert.Equal(t, "4f5fa464c3cb808a1df191dbf6cb75363f8b7072", pkgs[0].Dist.Checksum)
|
||||||
assert.Len(t, pkgs[0].Bin, 1)
|
assert.Len(t, pkgs[0].Bin, 1)
|
||||||
assert.Equal(t, packageBin, pkgs[0].Bin[0])
|
assert.Equal(t, packageBin, pkgs[0].Bin[0])
|
||||||
|
|
||||||
|
// Test package linked to repository
|
||||||
|
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
|
||||||
|
pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeComposer)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, pvs, 1)
|
||||||
|
|
||||||
|
err = packages.SetRepositoryLink(db.DefaultContext, pvs[0].ID, repo1.ID)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
req = NewRequest(t, "GET", fmt.Sprintf("%s/p2/%s/%s.json", url, vendorName, projectName)).
|
||||||
|
AddBasicAuth(user.Name)
|
||||||
|
resp = MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
result = composer.PackageMetadataResponse{}
|
||||||
|
DecodeJSON(t, resp, &result)
|
||||||
|
|
||||||
|
assert.Contains(t, result.Packages, packageName)
|
||||||
|
pkgs = result.Packages[packageName]
|
||||||
|
assert.Len(t, pkgs, 1)
|
||||||
|
assert.Equal(t, packageName, pkgs[0].Name)
|
||||||
|
assert.Equal(t, packageVersion, pkgs[0].Version)
|
||||||
|
assert.Equal(t, packageType, pkgs[0].Type)
|
||||||
|
assert.Equal(t, packageDescription, pkgs[0].Description)
|
||||||
|
assert.Len(t, pkgs[0].Authors, 1)
|
||||||
|
assert.Equal(t, packageAuthor, pkgs[0].Authors[0].Name)
|
||||||
|
assert.Equal(t, "zip", pkgs[0].Dist.Type)
|
||||||
|
assert.Equal(t, "4f5fa464c3cb808a1df191dbf6cb75363f8b7072", pkgs[0].Dist.Checksum)
|
||||||
|
assert.Len(t, pkgs[0].Bin, 1)
|
||||||
|
assert.Equal(t, packageBin, pkgs[0].Bin[0])
|
||||||
|
assert.Equal(t, repo1.HTMLURL(), pkgs[0].Source.URL)
|
||||||
|
assert.Equal(t, "git", pkgs[0].Source.Type)
|
||||||
|
assert.Equal(t, packageVersion, pkgs[0].Source.Reference)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user