func aptlyPublishSwitch(cmd *commander.Command, args []string) error { var err error components := strings.Split(context.Flags().Lookup("component").Value.String(), ",") if len(args) < len(components)+1 || len(args) > len(components)+2 { cmd.Usage() return commander.ErrCommandError } distribution := args[0] param := "." var ( names []string snapshot *deb.Snapshot ) if len(args) == len(components)+2 { param = args[1] names = args[2:] } else { names = args[1:] } storage, prefix := deb.ParsePrefix(param) var published *deb.PublishedRepo published, err = context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution) if err != nil { return fmt.Errorf("unable to update: %s", err) } if published.SourceKind != "snapshot" { return fmt.Errorf("unable to update: not a snapshot publish") } err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(published, context.CollectionFactory()) if err != nil { return fmt.Errorf("unable to update: %s", err) } publishedComponents := published.Components() if len(components) == 1 && len(publishedComponents) == 1 && components[0] == "" { components = publishedComponents } if len(names) != len(components) { return fmt.Errorf("mismatch in number of components (%d) and snapshots (%d)", len(components), len(names)) } for i, component := range components { if !utils.StrSliceHasItem(publishedComponents, component) { return fmt.Errorf("unable to switch: component %s is not in published repository", component) } snapshot, err = context.CollectionFactory().SnapshotCollection().ByName(names[i]) if err != nil { return fmt.Errorf("unable to switch: %s", err) } err = context.CollectionFactory().SnapshotCollection().LoadComplete(snapshot) if err != nil { return fmt.Errorf("unable to switch: %s", err) } published.UpdateSnapshot(component, snapshot) } signer, err := getSigner(context.Flags()) if err != nil { return fmt.Errorf("unable to initialize GPG signer: %s", err) } forceOverwrite := context.Flags().Lookup("force-overwrite").Value.Get().(bool) if forceOverwrite { context.Progress().ColoredPrintf("@rWARNING@|: force overwrite mode enabled, aptly might corrupt other published repositories sharing " + "the same package pool.\n") } if context.Flags().IsSet("skip-contents") { published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool) } err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, context.Progress(), forceOverwrite) if err != nil { return fmt.Errorf("unable to publish: %s", err) } err = context.CollectionFactory().PublishedRepoCollection().Update(published) if err != nil { return fmt.Errorf("unable to save to DB: %s", err) } err = context.CollectionFactory().PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components, context.GetPublishedStorage(storage), context.CollectionFactory(), context.Progress()) if err != nil { return fmt.Errorf("unable to update: %s", err) } context.Progress().Printf("\nPublish for snapshot %s has been successfully switched to new snapshot.\n", published.String()) return err }
func aptlyPublishUpdate(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) var published *deb.PublishedRepo published, err = context.CollectionFactory().PublishedRepoCollection().ByStoragePrefixDistribution(storage, prefix, distribution) if err != nil { return fmt.Errorf("unable to update: %s", err) } if published.SourceKind != "local" { return fmt.Errorf("unable to update: not a local repository publish") } err = context.CollectionFactory().PublishedRepoCollection().LoadComplete(published, context.CollectionFactory()) if err != nil { return fmt.Errorf("unable to update: %s", err) } components := published.Components() for _, component := range components { published.UpdateLocalRepo(component) } signer, err := getSigner(context.Flags()) if err != nil { return fmt.Errorf("unable to initialize GPG signer: %s", err) } forceOverwrite := context.Flags().Lookup("force-overwrite").Value.Get().(bool) if forceOverwrite { context.Progress().ColoredPrintf("@rWARNING@|: force overwrite mode enabled, aptly might corrupt other published repositories sharing " + "the same package pool.\n") } if context.Flags().IsSet("skip-contents") { published.SkipContents = context.Flags().Lookup("skip-contents").Value.Get().(bool) } err = published.Publish(context.PackagePool(), context, context.CollectionFactory(), signer, context.Progress(), forceOverwrite) if err != nil { return fmt.Errorf("unable to publish: %s", err) } err = context.CollectionFactory().PublishedRepoCollection().Update(published) if err != nil { return fmt.Errorf("unable to save to DB: %s", err) } err = context.CollectionFactory().PublishedRepoCollection().CleanupPrefixComponentFiles(published.Prefix, components, context.GetPublishedStorage(storage), context.CollectionFactory(), context.Progress()) if err != nil { return fmt.Errorf("unable to update: %s", err) } context.Progress().Printf("\nPublish for local repo %s has been successfully updated.\n", published.String()) return err }