rx: kylelemons.net/go/rx Files | Directories

Command rx

The rx command is a dependency and version management system for Go projects. It is built on top of the go tool and utilizes the $GOPATH convention.

Warning

This tool is very much in flux. Don't depend on commands, options, or pretty much anything else being stable yet.

Installation

As usual, the rx tool can be installed or upgraded via the "go" tool:

go get -u kylelemons.net/go/rx

General Usage

The rx command is composed of numerous sub-commands. Sub-commands can be abbreviated to any unique prefix on the command-line. The general usage is:

rx [<options>] [<subcommand> [<suboptions>] [<arguments> ...]]

Options:

--autosave = true           Automatically save dependency graph (disable for concurrent runs)
--max-age  = 1h0m0s         Nominal amount of time before a rescan is done
--rescan   = false          Force a rescan of repositories
--rxdir    = "$HOME/.rx"    Directory in which to save state
-v         = false          Turn on verbose logging

Commands:

help       Help on the rx command and subcommands.
list       List recognized repositories.
tags       List known repository tags.
prescribe  Update the repository to the given tag/rev.
cabinet    Save, list, or restore dependency snapshots.
checkpoint Save, list, or restore global repository version snapshots.

Use "rx help <command>" for more help with a command.

See below for a description of the various sub-commands understood by rx.

Help Command

Help on the rx command and subcommands.

Usage:

rx help [<command>]

Options:

--godoc = false    Dump the godoc output for the command(s)

List Command

List recognized repositories.

Usage:

rx list [<filter>]

Options:

-f     = ""       List output format
--long = false    Use long output format

The list command scans all available packages and collects information about their repositories. By default, each repository is listed along with its dependencies and contained packages. If a <filter> regular expression is provided, only repositories whose root path matches the filter will be listed.

The -f option takes a template as a format. The data passed into the template invocation is an (rx/graph) Graph, and the default format is:

{{range .Repository}}{{.}} :{{range .Packages}}{{$pkg := index $.Package .}} {{$pkg.Name}}{{end}}
{{end}}

If you specify --long, the format will be:

{{range .Repository}}Repository ({{.VCS}}) {{.}}:
    Packages:{{range .Packages}}
        {{$pkg := index $.Package .}}{{$pkg.ImportPath}}{{end}}
{{with $.RepoDeps .}}    Dependencies:{{range .}}
        {{.}}{{end}}
{{end}}{{with $.RepoUsers .}}    Users:{{range .}}
        {{.}}{{end}}
{{end}}
{{end}}

Tags Command

List known repository tags.

Usage:

rx tags <repo>

Options:

--down = false    Only show downgrades
-f     = ""       tags output format
--long = false    Use long output format
--up   = false    Only show updates (overrides --down)

The tags command scans the specified repository and lists information about its tags. The <repo> can be a full repository path, the last element of a repository path, or any substring of the path as long as it is unique.

The -f option takes a template as a format. The data passed into the template invocation is an (rx/graph) TagList, and the default format is:

{{range .}}{{.Rev}} {{.Name}}
{{end}}

Prescribe Command

Update the repository to the given tag/rev.

Usage:

rx prescribe <repo> <tag>

Options:

--build    = true     build all updated packages
--cascade  = true     recursively process depending packages too
--install  = true     install all updated packages
--link     = false    link and install all updated binaries
--rollback = true     automatically roll back failed upgrade
--test     = true     test all updated packages

The prescribe command updates the repository to the named tag or revision. The <repo> can be a full repository path, the last element of a repository path, or any substring as long as it is unique. The <tag> is anything understood by the underlying version control system as a commit, usually a tag, branch, or commit.

After updating, prescribe will test, build, and the install each package in the updated repository. These steps can be disabled via flags such as "rx prescribe --test=false repo tag".

By default, this will not link and install affected binaries; to turn this behavior on, see the --link option.

Cabinet Command

Save, list, or restore dependency snapshots.

Usage:

rx cabinet <repo> [<id>]

Options:

--build = false    create a new cabinet
--dump  = false    list the contents of the specified cabinet
--list  = true     list matching cabinet files (the default)
--open  = false    open the specified cabinet
--test  = true     test package before saving and after loading cabinet

The cabinet command saves dependency information for the given repository in a file within it. The <repo> can be any piece of the repository root path, as long as it is unique. The <tag> is anything understood by the underlying version control system as a commit, usually a tag, branch, or commit. When saving, the <id> will override the default (based on the date) and when opening the <id> is the ID (or a unique substring) of the cabinet to open.

Cabinets are currently stored in the repository itself named as follows:

.rx/cabinet-YYYYMMDD-HHMMSS

If the <id> is specified for --build, it will override the date-based portion of the cabinet name. If a cabinet already exists with the name (even if it is a date-based name) it will not be overwritten.

Unless --test=false is specified, the packages in the repository will be tested before a cabinet is created and after a cabinet is restored. If the test before creation fails, the cabinet will not be created. If the test after restoration fails, the repositories will be reverted to their original revisions.

The cabinet format is still in flux.

Checkpoint Command

Save, list, or restore global repository version snapshots.

Usage:

rx checkpoint

Options:

--apply   = 0        apply the specified checkpoint
--delete  = 0        delete the specified checkpoint
--exclude = "^$"     regular expression to exclude saved/restored repositories
--filter  = ".*"     regular expression to filter saved/restored repositories
--list    = false    list checkpoints
-n        = 15       number of checkpoints to list (0 for all)
--save    = ""       save a new checkpoint with the given comment

The checkpoint command is similar to the cabinet command, except that it has global scope and does not run tests when saving or applying.

Checkpoints are intended as lightweight ways to save state and to share state among multiple developers sharing an $RX_DIR. Checkpoints are created with a comment and a global, sequential ID which can be used to retrieve or delete it.

Be careful when using checkpoint --apply, because this will update every repository that rx knows about! They will generally wind up in a detached HEAD state, which may not be what you want. See the --filter and --exclude options, which apply to both --save and --apply, to control what repositories are affected by the operations.

Package Files

cab.go command.go cpoint.go doc.go help.go list.go main.go persist.go pre.go tags.go

Directories

PathSynopsis
graph
vcs

Package main imports 17 packages (graph). Updated 2016-07-19. Refresh now. Tools for package owners.