@@ -66,13 +66,15 @@ type PackageMetadataResponse struct {
6666}
6767
6868// PackageVersionMetadata contains package metadata
69+ // https://getcomposer.org/doc/05-repositories.md#package
6970type PackageVersionMetadata struct {
7071 * composer_module.Metadata
7172 Name string `json:"name"`
7273 Version string `json:"version"`
7374 Type string `json:"type"`
7475 Created time.Time `json:"time"`
7576 Dist Dist `json:"dist"`
77+ Source Source `json:"source"`
7678}
7779
7880// Dist contains package download information
@@ -82,6 +84,13 @@ type Dist struct {
8284 Checksum string `json:"shasum"`
8385}
8486
87+ // Source contains package source information
88+ type Source struct {
89+ URL string `json:"url"`
90+ Type string `json:"type"`
91+ Reference string `json:"reference"`
92+ }
93+
8594func createPackageMetadataResponse (registryURL string , pds []* packages_model.PackageDescriptor ) * PackageMetadataResponse {
8695 versions := make ([]* PackageVersionMetadata , 0 , len (pds ))
8796
@@ -94,7 +103,7 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac
94103 }
95104 }
96105
97- versions = append ( versions , & PackageVersionMetadata {
106+ pkg := PackageVersionMetadata {
98107 Name : pd .Package .Name ,
99108 Version : pd .Version .Version ,
100109 Type : packageType ,
@@ -105,7 +114,16 @@ func createPackageMetadataResponse(registryURL string, pds []*packages_model.Pac
105114 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 )),
106115 Checksum : pd .Files [0 ].Blob .HashSHA1 ,
107116 },
108- })
117+ }
118+ if pd .Repository != nil {
119+ pkg .Source = Source {
120+ URL : pd .Repository .HTMLURL (),
121+ Type : "git" ,
122+ Reference : pd .Version .Version ,
123+ }
124+ }
125+
126+ versions = append (versions , & pkg )
109127 }
110128
111129 return & PackageMetadataResponse {
0 commit comments