diff --git a/cmd/publish.go b/cmd/publish.go index c468caba..0f8bdd2a 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -37,6 +37,7 @@ func makeCmdPublish() *commander.Command { makeCmdPublishSnapshot(), makeCmdPublishSwitch(), makeCmdPublishUpdate(), + makeCmdPublishShow(), }, } } diff --git a/cmd/publish_show.go b/cmd/publish_show.go new file mode 100644 index 00000000..cf8310f1 --- /dev/null +++ b/cmd/publish_show.go @@ -0,0 +1,80 @@ +package cmd + +import ( + "fmt" + "github.com/smira/aptly/deb" + "github.com/smira/commander" + "strings" +) + +func aptlyPublishShow(cmd *commander.Command, args []string) error { + var err error + if len(args) < 1 || len(args) > 2 { + cmd.Usage() + return commander.ErrCommandError + } + + distribution := args[0] + param := "." + + if len(args) == 2 { + param = args[1] + } + + storage, prefix := deb.ParsePrefix(param) + + repo, err := context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution) + if err != nil { + return fmt.Errorf("unable to show: %s", err) + } + + if repo.Storage != "" { + fmt.Printf("Storage: %s\n", repo.Storage) + } + fmt.Printf("Prefix: %s\n", repo.Prefix) + if repo.Distribution != "" { + fmt.Printf("Distribution: %s\n", repo.Distribution) + } + fmt.Printf("Architectures: %s\n", strings.Join(repo.Architectures, " ")) + + fmt.Printf("Sources:\n") + for component, sourceID := range repo.Sources { + var name string + if repo.SourceKind == "snapshot" { + source, err := context.CollectionFactory().SnapshotCollection().ByUUID(sourceID) + if err != nil { + continue + } + name = source.Name + } else if repo.SourceKind == "local" { + source, err := context.CollectionFactory().LocalRepoCollection().ByUUID(sourceID) + if err != nil { + continue + } + name = source.Name + } + + if name != "" { + fmt.Printf(" %s: %s [%s]\n", component, name, repo.SourceKind) + } + } + + return err +} + +func makeCmdPublishShow() *commander.Command { + cmd := &commander.Command{ + Run: aptlyPublishShow, + UsageLine: "show [[:]]", + Short: "shows details of published repository", + Long: ` +Command show displays full information of a published repository. + +Example: + + $ aptly publish show wheezy +`, + } + + return cmd +} diff --git a/system/t06_publish/PublishShow1Test_gold b/system/t06_publish/PublishShow1Test_gold new file mode 100644 index 00000000..5223f2cc --- /dev/null +++ b/system/t06_publish/PublishShow1Test_gold @@ -0,0 +1,5 @@ +Prefix: . +Distribution: maverick +Architectures: amd64 i386 +Sources: + main: snap1 [snapshot] diff --git a/system/t06_publish/PublishShow2Test_gold b/system/t06_publish/PublishShow2Test_gold new file mode 100644 index 00000000..ff0ee823 --- /dev/null +++ b/system/t06_publish/PublishShow2Test_gold @@ -0,0 +1,5 @@ +Prefix: ppa/smira +Distribution: maverick +Architectures: amd64 i386 +Sources: + main: snap1 [snapshot] diff --git a/system/t06_publish/__init__.py b/system/t06_publish/__init__.py index 3531ee1c..8187f03e 100644 --- a/system/t06_publish/__init__.py +++ b/system/t06_publish/__init__.py @@ -3,6 +3,7 @@ Testing publishing snapshots """ from .drop import * +from .show import * from .list import * from .repo import * from .snapshot import * diff --git a/system/t06_publish/show.py b/system/t06_publish/show.py new file mode 100644 index 00000000..5149142c --- /dev/null +++ b/system/t06_publish/show.py @@ -0,0 +1,27 @@ +from lib import BaseTest + + +class PublishShow1Test(BaseTest): + """ + publish show: existing snapshot + """ + fixtureDB = True + fixturePool = True + fixtureCmds = [ + "aptly snapshot create snap1 from mirror gnuplot-maverick", + "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1", + ] + runCmd = "aptly publish show maverick" + + +class PublishShow2Test(BaseTest): + """ + publish show: under prefix + """ + fixtureDB = True + fixturePool = True + fixtureCmds = [ + "aptly snapshot create snap1 from mirror gnuplot-maverick", + "aptly publish snapshot -keyring=${files}/aptly.pub -secret-keyring=${files}/aptly.sec snap1 ppa/smira", + ] + runCmd = "aptly publish show maverick ppa/smira"