mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
feat: wire AppStream support through CLI, API, and publish
This commit is contained in:
committed by
André Roth
parent
f25ba2e6b0
commit
29c37293b9
+11
-1
@@ -102,6 +102,8 @@ type mirrorCreateParams struct {
|
|||||||
DownloadUdebs bool ` json:"DownloadUdebs"`
|
DownloadUdebs bool ` json:"DownloadUdebs"`
|
||||||
// Set "true" to mirror installer files
|
// Set "true" to mirror installer files
|
||||||
DownloadInstaller bool ` json:"DownloadInstaller"`
|
DownloadInstaller bool ` json:"DownloadInstaller"`
|
||||||
|
// Set "true" to mirror AppStream (DEP-11) metadata
|
||||||
|
DownloadAppStream bool ` json:"DownloadAppStream"`
|
||||||
// Set "true" to include dependencies of matching packages when filtering
|
// Set "true" to include dependencies of matching packages when filtering
|
||||||
FilterWithDeps bool ` json:"FilterWithDeps"`
|
FilterWithDeps bool ` json:"FilterWithDeps"`
|
||||||
// Set "true" to skip if the given components are in the Release file
|
// Set "true" to skip if the given components are in the Release file
|
||||||
@@ -153,7 +155,7 @@ func apiMirrorsCreate(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
repo, err := deb.NewRemoteRepo(b.Name, b.ArchiveURL, b.Distribution, b.Components, b.Architectures,
|
repo, err := deb.NewRemoteRepo(b.Name, b.ArchiveURL, b.Distribution, b.Components, b.Architectures,
|
||||||
b.DownloadSources, b.DownloadUdebs, b.DownloadInstaller)
|
b.DownloadSources, b.DownloadUdebs, b.DownloadInstaller, b.DownloadAppStream)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortWithJSONError(c, 400, fmt.Errorf("unable to create mirror: %s", err))
|
AbortWithJSONError(c, 400, fmt.Errorf("unable to create mirror: %s", err))
|
||||||
@@ -573,6 +575,14 @@ func apiMirrorsUpdate(c *gin.Context) {
|
|||||||
return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
|
return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if remote.DownloadAppStream && !remote.IsFlat() {
|
||||||
|
err = remote.DownloadAppStreamFiles(out, downloader,
|
||||||
|
context.PackagePool(), collectionFactory.ChecksumCollection(nil), b.IgnoreChecksums)
|
||||||
|
if err != nil {
|
||||||
|
return &task.ProcessReturnValue{Code: http.StatusInternalServerError, Value: nil}, fmt.Errorf("unable to update: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if remote.Filter != "" {
|
if remote.Filter != "" {
|
||||||
var filterQuery deb.PackageQuery
|
var filterQuery deb.PackageQuery
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error {
|
|||||||
downloadSources := LookupOption(context.Config().DownloadSourcePackages, context.Flags(), "with-sources")
|
downloadSources := LookupOption(context.Config().DownloadSourcePackages, context.Flags(), "with-sources")
|
||||||
downloadUdebs := context.Flags().Lookup("with-udebs").Value.Get().(bool)
|
downloadUdebs := context.Flags().Lookup("with-udebs").Value.Get().(bool)
|
||||||
downloadInstaller := context.Flags().Lookup("with-installer").Value.Get().(bool)
|
downloadInstaller := context.Flags().Lookup("with-installer").Value.Get().(bool)
|
||||||
|
downloadAppStream := context.Flags().Lookup("with-appstream").Value.Get().(bool)
|
||||||
ignoreSignatures := context.Config().GpgDisableVerify
|
ignoreSignatures := context.Config().GpgDisableVerify
|
||||||
if context.Flags().IsSet("ignore-signatures") {
|
if context.Flags().IsSet("ignore-signatures") {
|
||||||
ignoreSignatures = context.Flags().Lookup("ignore-signatures").Value.Get().(bool)
|
ignoreSignatures = context.Flags().Lookup("ignore-signatures").Value.Get().(bool)
|
||||||
@@ -41,7 +42,7 @@ func aptlyMirrorCreate(cmd *commander.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
repo, err := deb.NewRemoteRepo(mirrorName, archiveURL, distribution, components, context.ArchitecturesList(),
|
repo, err := deb.NewRemoteRepo(mirrorName, archiveURL, distribution, components, context.ArchitecturesList(),
|
||||||
downloadSources, downloadUdebs, downloadInstaller)
|
downloadSources, downloadUdebs, downloadInstaller, downloadAppStream)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to create mirror: %s", err)
|
return fmt.Errorf("unable to create mirror: %s", err)
|
||||||
}
|
}
|
||||||
@@ -100,6 +101,7 @@ Example:
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures")
|
cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures")
|
||||||
|
cmd.Flag.Bool("with-appstream", false, "download AppStream (DEP-11) metadata")
|
||||||
cmd.Flag.Bool("with-installer", false, "download additional not packaged installer files")
|
cmd.Flag.Bool("with-installer", false, "download additional not packaged installer files")
|
||||||
cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages")
|
cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages")
|
||||||
cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)")
|
cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)")
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ func aptlyMirrorEdit(cmd *commander.Command, args []string) error {
|
|||||||
repo.Filter = flag.Value.String() // allows file/stdin with @
|
repo.Filter = flag.Value.String() // allows file/stdin with @
|
||||||
case "filter-with-deps":
|
case "filter-with-deps":
|
||||||
repo.FilterWithDeps = flag.Value.Get().(bool)
|
repo.FilterWithDeps = flag.Value.Get().(bool)
|
||||||
|
case "with-appstream":
|
||||||
|
repo.DownloadAppStream = flag.Value.Get().(bool)
|
||||||
case "with-installer":
|
case "with-installer":
|
||||||
repo.DownloadInstaller = flag.Value.Get().(bool)
|
repo.DownloadInstaller = flag.Value.Get().(bool)
|
||||||
case "with-sources":
|
case "with-sources":
|
||||||
@@ -107,6 +109,7 @@ Example:
|
|||||||
AddStringOrFileFlag(&cmd.Flag, "filter", "", "filter packages in mirror, use '@file' to read filter from file or '@-' for stdin")
|
AddStringOrFileFlag(&cmd.Flag, "filter", "", "filter packages in mirror, use '@file' to read filter from file or '@-' for stdin")
|
||||||
cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well")
|
cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well")
|
||||||
cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures")
|
cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures")
|
||||||
|
cmd.Flag.Bool("with-appstream", false, "download AppStream (DEP-11) metadata")
|
||||||
cmd.Flag.Bool("with-installer", false, "download additional not packaged installer files")
|
cmd.Flag.Bool("with-installer", false, "download additional not packaged installer files")
|
||||||
cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages")
|
cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages")
|
||||||
cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)")
|
cmd.Flag.Bool("with-udebs", false, "download .udeb packages (Debian installer support)")
|
||||||
|
|||||||
@@ -61,6 +61,11 @@ func aptlyMirrorShowTxt(_ *commander.Command, args []string) error {
|
|||||||
downloadUdebs = Yes
|
downloadUdebs = Yes
|
||||||
}
|
}
|
||||||
fmt.Printf("Download .udebs: %s\n", downloadUdebs)
|
fmt.Printf("Download .udebs: %s\n", downloadUdebs)
|
||||||
|
downloadAppStream := No
|
||||||
|
if repo.DownloadAppStream {
|
||||||
|
downloadAppStream = Yes
|
||||||
|
}
|
||||||
|
fmt.Printf("Download AppStream: %s\n", downloadAppStream)
|
||||||
if repo.Filter != "" {
|
if repo.Filter != "" {
|
||||||
fmt.Printf("Filter: %s\n", repo.Filter)
|
fmt.Printf("Filter: %s\n", repo.Filter)
|
||||||
filterWithDeps := No
|
filterWithDeps := No
|
||||||
|
|||||||
@@ -64,6 +64,15 @@ func aptlyMirrorUpdate(cmd *commander.Command, args []string) error {
|
|||||||
return fmt.Errorf("unable to update: %s", err)
|
return fmt.Errorf("unable to update: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if repo.DownloadAppStream && !repo.IsFlat() {
|
||||||
|
context.Progress().Printf("Downloading AppStream metadata...\n")
|
||||||
|
err = repo.DownloadAppStreamFiles(context.Progress(), context.Downloader(),
|
||||||
|
context.PackagePool(), collectionFactory.ChecksumCollection(nil), ignoreChecksums)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to update: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if repo.Filter != "" {
|
if repo.Filter != "" {
|
||||||
context.Progress().Printf("Applying filter...\n")
|
context.Progress().Printf("Applying filter...\n")
|
||||||
var filterQuery deb.PackageQuery
|
var filterQuery deb.PackageQuery
|
||||||
|
|||||||
@@ -1055,6 +1055,38 @@ func (p *PublishedRepo) Publish(packagePool aptly.PackagePool, publishedStorageP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pass-through AppStream (DEP-11) files from snapshots
|
||||||
|
for component, item := range p.sourceItems {
|
||||||
|
if item.snapshot == nil || len(item.snapshot.AppStreamFiles) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix := component + "/"
|
||||||
|
for relPath, poolPath := range item.snapshot.AppStreamFiles {
|
||||||
|
if !strings.HasPrefix(relPath, prefix) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
withinComponent := strings.TrimPrefix(relPath, prefix)
|
||||||
|
|
||||||
|
poolFile, err := packagePool.Open(poolPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to open AppStream file from pool: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bufWriter, err := indexes.SkelIndex(component, withinComponent).BufWriter()
|
||||||
|
if err != nil {
|
||||||
|
poolFile.Close()
|
||||||
|
return fmt.Errorf("unable to generate AppStream index: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = bufio.NewReader(poolFile).WriteTo(bufWriter)
|
||||||
|
poolFile.Close()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to write AppStream file: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
udebs := []bool{false}
|
udebs := []bool{false}
|
||||||
if hadUdebs {
|
if hadUdebs {
|
||||||
udebs = append(udebs, true)
|
udebs = append(udebs, true)
|
||||||
|
|||||||
Reference in New Issue
Block a user