Skip to content

Commit

Permalink
Command to replace the whole staged source list added.
Browse files Browse the repository at this point in the history
Signed-off-by: Christoph Fiehe <[email protected]>
  • Loading branch information
Christoph Fiehe committed Oct 23, 2024
1 parent 0d2dbb0 commit bd7d7bc
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 1 deletion.
1 change: 1 addition & 0 deletions cmd/publish.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ func makeCmdPublishSource() *commander.Command {
makeCmdPublishSourceDrop(),
makeCmdPublishSourceList(),
makeCmdPublishSourceRemove(),
makeCmdPublishSourceReplace(),
makeCmdPublishSourceUpdate(),
},
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/publish_source_add.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func aptlyPublishSourceAdd(cmd *commander.Command, args []string) error {
}
context.Progress().Printf("Adding component '%s' with source '%s' [%s]...\n", component, name, published.SourceKind)

sources[component] = names[i]
sources[component] = name
}

err = collectionFactory.PublishedRepoCollection().Update(published)
Expand Down
88 changes: 88 additions & 0 deletions cmd/publish_source_replace.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package cmd

import (
"fmt"
"strings"

"github.com/aptly-dev/aptly/deb"
"github.com/smira/commander"
"github.com/smira/flag"
)

func aptlyPublishSourceReplace(cmd *commander.Command, args []string) error {
if len(args) < 2 {
cmd.Usage()
return commander.ErrCommandError
}

distribution := args[0]
names := args[1:]
components := strings.Split(context.Flags().Lookup("component").Value.String(), ",")

if len(names) != len(components) {
return fmt.Errorf("mismatch in number of components (%d) and sources (%d)", len(components), len(names))
}

prefix := context.Flags().Lookup("prefix").Value.String()
storage, prefix := deb.ParsePrefix(prefix)

collectionFactory := context.NewCollectionFactory()
published, err := collectionFactory.PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution)
if err != nil {
return fmt.Errorf("unable to add: %s", err)
}

err = collectionFactory.PublishedRepoCollection().LoadComplete(published, collectionFactory)
if err != nil {
return fmt.Errorf("unable to add: %s", err)
}

revision := published.ObtainRevision()
sources := revision.Sources
context.Progress().Printf("Clearing staged source list...\n")
clear(sources)

for i, component := range components {
name := names[i]
context.Progress().Printf("Adding component '%s' with source '%s' [%s]...\n", component, name, published.SourceKind)

sources[component] = name
}

err = collectionFactory.PublishedRepoCollection().Update(published)
if err != nil {
return fmt.Errorf("unable to save to DB: %s", err)
}

context.Progress().Printf("\nYou can run 'aptly publish update %s %s' to update the content of the published repository.\n",
distribution, published.StoragePrefix())

return err
}

func makeCmdPublishSourceReplace() *commander.Command {
cmd := &commander.Command{
Run: aptlyPublishSourceReplace,
UsageLine: "replace <distribution> <source>",
Short: "replace staged source list of published repository",
Long: `
The command replaces the staged source list of the published repository.
The flag -component is mandatory. Use a comma-separated list of components, if
multiple components should be modified. The number of given components must be
equal to the number of given sources, e.g.:
aptly publish source replace -component=main,contrib wheezy wheezy-main wheezy-contrib
Example:
$ aptly publish source replace -component=contrib wheezy ppa wheezy-contrib
`,
Flag: *flag.NewFlagSet("aptly-publish-source-add", flag.ExitOnError),
}
cmd.Flag.String("prefix", ".", "publishing prefix in the form of [<endpoint>:]<prefix>")
cmd.Flag.String("component", "", "component names to add (for multi-component publishing, separate components with commas)")

return cmd
}
5 changes: 5 additions & 0 deletions system/t06_publish/PublishSourceReplace1Test_gold
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Clearing staged source list...
Adding component 'main-new' with source 'snap2' [snapshot]...
Adding component 'test-new' with source 'snap3' [snapshot]...

You can run 'aptly publish update maverick .' to update the content of the published repository.
16 changes: 16 additions & 0 deletions system/t06_publish/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,22 @@ class PublishSourceUpdate3Test(BaseTest):
gold_processor = BaseTest.expand_environ


class PublishSourceReplace1Test(BaseTest):
"""
publish source replace: Replace existing sources
"""
fixtureDB = True
fixturePool = True
fixtureCmds = [
"aptly snapshot create snap1 from mirror gnuplot-maverick",
"aptly snapshot create snap2 empty",
"aptly snapshot create snap3 empty",
"aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec -distribution=maverick -component=main,test snap1 snap2",
]
runCmd = "aptly publish source replace -component=main-new,test-new snap2 snap3"
gold_processor = BaseTest.expand_environ


class PublishSourceRemove1Test(BaseTest):
"""
publish source remove: Remove single source
Expand Down

0 comments on commit bd7d7bc

Please sign in to comment.