func makeCmdPublishSnapshot() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishSnapshotOrRepo, UsageLine: "snapshot <name> [<prefix>]", Short: "publish snapshot", Long: ` Command publishes snapshot as Debian repository ready to be consumed by apt tools. Published repostiories appear under rootDir/public directory. Valid GPG key is required for publishing. Example: $ aptly publish snapshot wheezy-main `, Flag: *flag.NewFlagSet("aptly-publish-snapshot", flag.ExitOnError), } cmd.Flag.String("distribution", "", "distribution name to publish") cmd.Flag.String("component", "", "component name to publish") cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.String("origin", "", "origin name to publish") cmd.Flag.String("label", "", "label to publish") return cmd }
func makeCmdMirrorCreate() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorCreate, UsageLine: "create <name> <archive url> <distribution> [<component1> ...]", Short: "create new mirror", Long: ` Creates mirror <name> of remote repository, aptly supports both regular and flat Debian repositories exported via HTTP. aptly would try download Release file from remote repository and verify its' signature. PPA urls could specified in short format: $ aptly mirror create <name> ppa:<user>/<project> Example: $ aptly mirror create wheezy-main http://mirror.yandex.ru/debian/ wheezy main `, Flag: *flag.NewFlagSet("aptly-mirror-create", flag.ExitOnError), } cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures") cmd.Flag.Bool("with-sources", false, "download source packages in addition to binary packages") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)") return cmd }
func makeCmdPublishRepo() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishSnapshotOrRepo, UsageLine: "repo <name> [<prefix>]", Short: "publish local repository", Long: ` Command publishes current state of local repository ready to be consumed by apt tools. Published repostiories appear under rootDir/public directory. Valid GPG key is required for publishing. It is not recommended to publish local repositories directly unless the repository is for testing purposes and changes happen frequently. For production usage please take snapshot of repository and publish it using publish snapshot command. Example: $ aptly publish repo testing `, Flag: *flag.NewFlagSet("aptly-publish-repo", flag.ExitOnError), } cmd.Flag.String("distribution", "", "distribution name to publish") cmd.Flag.String("component", "", "component name to publish") cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.String("origin", "", "origin name to publish") cmd.Flag.String("label", "", "label to publish") return cmd }
func makeCmdPublishSwitch() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishSwitch, UsageLine: "switch <distribution> [[<endpoint>:]<prefix>] <new-snapshot>", Short: "update published repository by switching to new snapshot", Long: ` Command switches in-place published repository with new snapshot contents. All publishing parameters are preserved (architecture list, distribution, component). For multiple component repositories, flag -component should be given with list of components to update. Corresponding snapshots should be given in the same order, e.g.: aptly publish update -component=main,contrib wheezy wh-main wh-contrib Example: $ aptly publish update wheezy ppa wheezy-7.5 `, Flag: *flag.NewFlagSet("aptly-publish-switch", flag.ExitOnError), } cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)") cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.String("component", "", "component names to update (for multi-component publishing, separate components with commas)") cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch") return cmd }
func makeCmdRepoInclude() *commander.Command { cmd := &commander.Command{ Run: aptlyRepoInclude, UsageLine: "include <file.changes>|<directory> ...", Short: "add packages to local repositories based on .changes files", Long: ` Command include looks for .changes files in list of arguments or specified directories. Each .changes file is verified, parsed, referenced files are put into separate temporary directory and added into local repository. Successfully imported files are removed by default. Additionally uploads could be restricted with <uploaders.json> file. Rules in this file control uploads based on GPG key ID of .changes file signature and queries on .changes file fields. Example: $ aptly repo include -repo=foo-release incoming/ `, Flag: *flag.NewFlagSet("aptly-repo-include", flag.ExitOnError), } cmd.Flag.Bool("no-remove-files", false, "don't remove files that have been imported successfully into repository") cmd.Flag.Bool("force-replace", false, "when adding package that conflicts with existing package, remove existing package") cmd.Flag.String("repo", "{{.Distribution}}", "which repo should files go to, defaults to Distribution field of .changes file") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)") cmd.Flag.Bool("ignore-signatures", false, "disable verification of .changes file signature") cmd.Flag.Bool("accept-unsigned", false, "accept unsigned .changes files") cmd.Flag.String("uploaders-file", "", "path to uploaders.json file") return cmd }
func makeCmdPublishSnapshot() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishSnapshotOrRepo, UsageLine: "snapshot <name> [[<endpoint>:]<prefix>]", Short: "publish snapshot", Long: ` Command publishes snapshot as Debian repository ready to be consumed by apt tools. Published repostiories appear under rootDir/public directory. Valid GPG key is required for publishing. Multiple component repository could be published by specifying several components split by commas via -component flag and multiple snapshots as the arguments: aptly publish snapshot -component=main,contrib snap-main snap-contrib Example: $ aptly publish snapshot wheezy-main `, Flag: *flag.NewFlagSet("aptly-publish-snapshot", flag.ExitOnError), } cmd.Flag.String("distribution", "", "distribution name to publish") cmd.Flag.String("component", "", "component name to publish (for multi-component publishing, separate components with commas)") cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.String("origin", "", "origin name to publish") cmd.Flag.String("label", "", "label to publish") cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch") return cmd }
func makeCmdSnapshotPull() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotPull, UsageLine: "pull <name> <source> <destination> <package-query> ...", Short: "pull packages from another snapshot", Long: ` Command pull pulls new packages along with its' dependencies to snapshot <name> from snapshot <source>. Pull can upgrade package version in <name> with versions from <source> following dependencies. New snapshot <destination> is created as a result of this process. Packages could be specified simply as 'package-name' or as package queries. Example: $ aptly snapshot pull wheezy-main wheezy-backports wheezy-new-xorg xorg-server-server `, Flag: *flag.NewFlagSet("aptly-snapshot-pull", flag.ExitOnError), } cmd.Flag.Bool("dry-run", false, "don't create destination snapshot, just show what would be pulled") cmd.Flag.Bool("no-deps", false, "don't process dependencies, just pull listed packages") cmd.Flag.Bool("no-remove", false, "don't remove other package versions when pulling package") cmd.Flag.Bool("all-matches", false, "pull all the packages that satisfy the dependency version requirements") return cmd }
func makeCmdMirrorUpdate() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorUpdate, UsageLine: "update <name>", Short: "update mirror", Long: ` Updates remote mirror (downloads package files and meta information). When mirror is created, this command should be run for the first time to fetch mirror contents. This command can be run multiple times to get updated repository contents. If interrupted, command can be safely restarted. Example: $ aptly mirror update wheezy-main `, Flag: *flag.NewFlagSet("aptly-mirror-update", flag.ExitOnError), } cmd.Flag.Bool("force", false, "force update mirror even if it is locked by another process") cmd.Flag.Bool("ignore-checksums", false, "ignore checksum mismatches while downloading package files and metadata") cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures") cmd.Flag.Int64("download-limit", 0, "limit download speed (kbytes/sec)") cmd.Flag.Int("max-tries", 1, "max download tries till process fails with download error") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)") return cmd }
func makeCmdPublishUpdate() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishUpdate, UsageLine: "update <distribution> [[<endpoint>:]<prefix>]", Short: "update published local repository", Long: ` Command re-publishes (updates) published local repository. <distribution> and <prefix> should be occupied with local repository published using command aptly publish repo. Update happens in-place with minimum possible downtime for published repository. For multiple component published repositories, all local repositories are updated. Example: $ aptly publish update wheezy ppa `, Flag: *flag.NewFlagSet("aptly-publish-update", flag.ExitOnError), } cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch") return cmd }
func makeCmdMirrorCreate() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorCreate, UsageLine: "create <name> <archive url> <distribution> [<component1> ...]", Short: "create new mirror", Long: ` Creates mirror <name> of remote repository, aptly supports both regular and flat Debian repositories exported via HTTP and FTP. aptly would try download Release file from remote repository and verify its' signature. Command line format resembles apt utlitily sources.list(5). PPA urls could specified in short format: $ aptly mirror create <name> ppa:<user>/<project> Example: $ aptly mirror create wheezy-main http://mirror.yandex.ru/debian/ wheezy main `, Flag: *flag.NewFlagSet("aptly-mirror-create", flag.ExitOnError), } cmd.Flag.Bool("ignore-signatures", false, "disable verification of Release file signatures") 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.String("filter", "", "filter packages in mirror") cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well") cmd.Flag.Bool("force-components", false, "(only with component list) skip check that requested components are listed in Release file") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "gpg keyring to use when verifying Release file (could be specified multiple times)") return cmd }
func rootCmd() *commander.Command { cmd := &commander.Command{ UsageLine: "foo", Short: "more foo", Long: "Longer foo", Flag: *flag.NewFlagSet("aptly", flag.ExitOnError), } cmd.Flag.String("config", "", "") cmd.Flag.String("architectures", "", "") cmd.Flag.Bool("dep-follow-suggests", false, "") cmd.Flag.Bool("dep-follow-source", false, "") cmd.Flag.Bool("dep-follow-recommends", false, "") cmd.Flag.Bool("dep-follow-all-variants", false, "") return cmd }
// RootCommand creates root command in command tree func RootCommand() *commander.Command { cmd := &commander.Command{ UsageLine: os.Args[0], Short: "Debian repository management tool", Long: ` aptly is a tool to create partial and full mirrors of remote repositories, manage local repositories, filter them, merge, upgrade individual packages, take snapshots and publish them back as Debian repositories. aptly's goal is to establish repeatability and controlled changes in a package-centric environment. aptly allows one to fix a set of packages in a repository, so that package installation and upgrade becomes deterministic. At the same time aptly allows one to perform controlled, fine-grained changes in repository contents to transition your package environment to new version.`, Flag: *flag.NewFlagSet("aptly", flag.ExitOnError), Subcommands: []*commander.Command{ makeCmdConfig(), makeCmdDb(), makeCmdGraph(), makeCmdMirror(), makeCmdRepo(), makeCmdServe(), makeCmdSnapshot(), makeCmdTask(), makeCmdPublish(), makeCmdVersion(), makeCmdPackage(), makeCmdAPI(), }, } cmd.Flag.Bool("dep-follow-suggests", false, "when processing dependencies, follow Suggests") cmd.Flag.Bool("dep-follow-source", false, "when processing dependencies, follow from binary to Source packages") cmd.Flag.Bool("dep-follow-recommends", false, "when processing dependencies, follow Recommends") cmd.Flag.Bool("dep-follow-all-variants", false, "when processing dependencies, follow a & b if dependency is 'a|b'") cmd.Flag.String("architectures", "", "list of architectures to consider during (comma-separated), default to all available") cmd.Flag.String("config", "", "location of configuration file (default locations are /etc/aptly.conf, ~/.aptly.conf)") if aptly.EnableDebug { cmd.Flag.String("cpuprofile", "", "write cpu profile to file") cmd.Flag.String("memprofile", "", "write memory profile to this file") cmd.Flag.String("memstats", "", "write memory stats periodically to this file") cmd.Flag.Duration("meminterval", 100*time.Millisecond, "memory stats dump interval") } return cmd }
// FlagOptions returns the flag's options as a string func (c *Command) FlagOptions() string { var buf bytes.Buffer flags := flag.NewFlagSet("help", 0) for cmd := c; cmd != nil; cmd = cmd.Parent { flags.Merge(&cmd.Flag) } flags.SetOutput(&buf) flags.PrintDefaults() str := string(buf.Bytes()) if len(str) > 0 { return fmt.Sprintf("\nOptions:\n%s", str) } return "" }
func makeCmdPackageSearch() *commander.Command { cmd := &commander.Command{ Run: aptlyPackageSearch, UsageLine: "search <package-query>", Short: "search for packages matching query", Long: ` Command search displays list of packages in whole DB that match package query Example: $ aptly package search '$Architecture (i386), Name (% *-dev)' `, Flag: *flag.NewFlagSet("aptly-package-search", flag.ExitOnError), } return cmd }
func makeCmdRepoShow() *commander.Command { cmd := &commander.Command{ Run: aptlyRepoShow, UsageLine: "show <name>", Short: "show details about local repository", Long: ` Show command shows full information about local package repository. ex: $ aptly repo show testing `, Flag: *flag.NewFlagSet("aptly-repo-show", flag.ExitOnError), } cmd.Flag.Bool("with-packages", false, "show list of packages") return cmd }
func makeCmdMirrorShow() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorShow, UsageLine: "show <name>", Short: "show details about mirror", Long: ` Shows detailed information about the mirror. Example: $ aptly mirror show wheezy-main `, Flag: *flag.NewFlagSet("aptly-mirror-show", flag.ExitOnError), } cmd.Flag.Bool("with-packages", false, "show detailed list of packages and versions stored in the mirror") return cmd }
func makeCmdPublishRepo() *commander.Command { cmd := &commander.Command{ Run: aptlyPublishSnapshotOrRepo, UsageLine: "repo <name> [[<endpoint>:]<prefix>]", Short: "publish local repository", Long: ` Command publishes current state of local repository ready to be consumed by apt tools. Published repostiories appear under rootDir/public directory. Valid GPG key is required for publishing. Multiple component repository could be published by specifying several components split by commas via -component flag and multiple local repositories as the arguments: aptly publish repo -component=main,contrib repo-main repo-contrib It is not recommended to publish local repositories directly unless the repository is for testing purposes and changes happen frequently. For production usage please take snapshot of repository and publish it using publish snapshot command. Example: $ aptly publish repo testing `, Flag: *flag.NewFlagSet("aptly-publish-repo", flag.ExitOnError), } cmd.Flag.String("distribution", "", "distribution name to publish") cmd.Flag.String("component", "", "component name to publish (for multi-component publishing, separate components with commas)") cmd.Flag.String("gpg-key", "", "GPG key ID to use when signing the release") cmd.Flag.Var(&keyRingsFlag{}, "keyring", "GPG keyring to use (instead of default)") cmd.Flag.String("secret-keyring", "", "GPG secret keyring to use (instead of default)") cmd.Flag.String("passphrase", "", "GPG passhprase for the key (warning: could be insecure)") cmd.Flag.String("passphrase-file", "", "GPG passhprase-file for the key (warning: could be insecure)") cmd.Flag.Bool("batch", false, "run GPG with detached tty") cmd.Flag.Bool("skip-signing", false, "don't sign Release files with GPG") cmd.Flag.Bool("skip-contents", false, "don't generate Contents indexes") cmd.Flag.String("origin", "", "origin name to publish") cmd.Flag.String("label", "", "label to publish") cmd.Flag.Bool("force-overwrite", false, "overwrite files in package pool in case of mismatch") return cmd }
func makeCmdSnapshotShow() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotShow, UsageLine: "show <name>", Short: "shows details about snapshot", Long: ` Command show displays full information about a snapshot. Example: $ aptly snapshot show wheezy-main `, Flag: *flag.NewFlagSet("aptly-snapshot-show", flag.ExitOnError), } cmd.Flag.Bool("with-packages", false, "show list of packages") return cmd }
func makeCmdSnapshotSearch() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotMirrorRepoSearch, UsageLine: "search <name> <package-query>", Short: "search snapshot for packages matching query", Long: ` Command search displays list of packages in snapshot that match package query Example: $ aptly snapshot search wheezy-main '$Architecture (i386), Name (% *-dev)' `, Flag: *flag.NewFlagSet("aptly-snapshot-search", flag.ExitOnError), } cmd.Flag.Bool("with-deps", false, "include dependencies into search results") return cmd }
func makeCmdRepoSearch() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotMirrorRepoSearch, UsageLine: "search <name> <package-query>", Short: "search repo for packages matching query", Long: ` Command search displays list of packages in local repository that match package query Example: $ aptly repo search my-software '$Architecture (i386), Name (% *-dev)' `, Flag: *flag.NewFlagSet("aptly-repo-show", flag.ExitOnError), } cmd.Flag.Bool("with-deps", false, "include dependencies into search results") return cmd }
func makeCmdServe() *commander.Command { cmd := &commander.Command{ Run: aptlyServe, UsageLine: "serve", Short: "HTTP serve published repositories", Long: ` Command serve starts embedded HTTP server (not suitable for real production usage) to serve contents of public/ subdirectory of aptly's root that contains published repositories. Example: $ aptly serve -listen=:8080 `, Flag: *flag.NewFlagSet("aptly-serve", flag.ExitOnError), } cmd.Flag.String("listen", ":8080", "host:port for HTTP listening") return cmd }
func makeCmdMirrorSearch() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotMirrorRepoSearch, UsageLine: "search <name> <package-query>", Short: "search mirror for packages matching query", Long: ` Command search displays list of packages in mirror that match package query Example: $ aptly mirror search wheezy-main '$Architecture (i386), Name (% *-dev)' `, Flag: *flag.NewFlagSet("aptly-mirror-show", flag.ExitOnError), } cmd.Flag.Bool("with-deps", false, "include dependencies into search results") cmd.Flag.String("format", "", "custom format for result printing") return cmd }
func makeCmdRepoDrop() *commander.Command { cmd := &commander.Command{ Run: aptlyRepoDrop, UsageLine: "drop <name>", Short: "delete local repository", Long: ` Drop information about deletions from local repo. Package data is not deleted (since it could be still used by other mirrors or snapshots). Example: $ aptly repo drop local-repo `, Flag: *flag.NewFlagSet("aptly-repo-drop", flag.ExitOnError), } cmd.Flag.Bool("force", false, "force local repo deletion even if used by snapshots") return cmd }
func makeCmdAPIServe() *commander.Command { cmd := &commander.Command{ Run: aptlyAPIServe, UsageLine: "serve", Short: "start API HTTP service", Long: ` Stat HTTP server with aptly REST API. Example: $ aptly api serve -listen=:8080 `, Flag: *flag.NewFlagSet("aptly-serve", flag.ExitOnError), } cmd.Flag.String("listen", ":8080", "host:port for HTTP listening") return cmd }
func makeCmdSnapshotDrop() *commander.Command { cmd := &commander.Command{ Run: aptlySnapshotDrop, UsageLine: "drop <name>", Short: "delete snapshot", Long: ` Drop removes information about a snapshot. If snapshot is published, it can't be dropped. Example: $ aptly snapshot drop wheezy-main `, Flag: *flag.NewFlagSet("aptly-snapshot-drop", flag.ExitOnError), } cmd.Flag.Bool("force", false, "remove snapshot even if it was used as source for other snapshots") return cmd }
// Init the command func (c *Command) init() { if c.Parent != nil { return // already initialized. } // setup strings if len(c.UsageLine) < 1 { c.UsageLine = Defaults.UsageLine } if len(c.UsageTemplate) < 1 { c.UsageTemplate = Defaults.UsageTemplate } if len(c.HelpTemplate) < 1 { c.HelpTemplate = Defaults.HelpTemplate } if c.Stderr == nil { c.Stderr = os.Stderr } if c.Stdout == nil { c.Stdout = os.Stdout } // init subcommands for _, cmd := range c.Subcommands { cmd.init() } // init hierarchy... for _, cmd := range c.Subcommands { cmd.Parent = c } // merge flags c.mergedFlags = flag.NewFlagSet("merged", flag.ContinueOnError) c.mergedFlags.Merge(&c.Flag) for _, cmd := range c.Subcommands { c.mergedFlags.Merge(cmd.mergedFlags) } }
func makeCmdMirrorEdit() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorEdit, UsageLine: "edit <name>", Short: "edit properties of mirorr", Long: ` Command edit allows to change settings of mirror: filters. Example: $ aptly mirror edit -filter=nginx -filter-with-deps some-mirror `, Flag: *flag.NewFlagSet("aptly-mirror-edit", flag.ExitOnError), } cmd.Flag.String("filter", "", "filter packages in mirror") cmd.Flag.Bool("filter-with-deps", false, "when filtering, include dependencies of matching packages as well") return cmd }
func makeCmdRepoImport() *commander.Command { cmd := &commander.Command{ Run: aptlyRepoMoveCopyImport, UsageLine: "import <src-mirror> <dst-repo> <package-spec> ...", Short: "import packages from mirror to local repository", Long: ` Command import looks up packages matching <package-spec> in mirror <src-mirror> and copies them to local repo <dst-repo>. Example: $ aptly repo import wheezy-main testing nginx `, Flag: *flag.NewFlagSet("aptly-repo-import", flag.ExitOnError), } cmd.Flag.Bool("dry-run", false, "don't import, just show what would be imported") cmd.Flag.Bool("with-deps", false, "follow dependencies when processing package-spec") return cmd }
func makeCmdRepoCopy() *commander.Command { cmd := &commander.Command{ Run: aptlyRepoMoveCopyImport, UsageLine: "copy <src-name> <dst-name> <package-spec> ...", Short: "copy packages between local repositories", Long: ` Command copy copies packages matching <package-spec> from local repo <src-name> to local repo <dst-name>. Example: $ aptly repo copy testing stable 'myapp (=0.1.12)' `, Flag: *flag.NewFlagSet("aptly-repo-copy", flag.ExitOnError), } cmd.Flag.Bool("dry-run", false, "don't copy, just show what would be copied") cmd.Flag.Bool("with-deps", false, "follow dependencies when processing package-spec") return cmd }
func makeCmdMirrorDrop() *commander.Command { cmd := &commander.Command{ Run: aptlyMirrorDrop, UsageLine: "drop <name>", Short: "delete mirror", Long: ` Drop deletes information about remote repository mirror <name>. Package data is not deleted (since it could still be used by other mirrors or snapshots). If mirror is used as source to create a snapshot, aptly would refuse to delete such mirror, use flag -force to override. Example: $ aptly mirror drop wheezy-main `, Flag: *flag.NewFlagSet("aptly-mirror-drop", flag.ExitOnError), } cmd.Flag.Bool("force", false, "force mirror deletion even if used by snapshots") return cmd }