repoman

A lot of people don’t realize what’s really going on. They view life as a bunch of unconnected incidents and things. They don’t realize that there’s this, like, lattice of coincidence that lays on top of everything.

- Repo Man, 1984

repoman is a collection of utilities for supporting development of software packages and their dependencies for the Fermi Gamma-Ray Space telescope.

Getting started

Repoman can check out products (container packages) and their dependency packages. It’s oriented around the concept of a workspace – a common folder where the products and their packages are organized in a flat structure. You may have multiple workspaces or just one.

While you can use repoman to interact in a few ways described below with your workspace, you’ll still probably want to use plain old git when checking in code, creating or switching branches on a single package, and other tasks. Where repoman can really help is coordinating the checkout of multiple existing branches across the repos, as well as reading the input of the package manifest (packageList.txt) of the container package and checking out the according to that specification.

Install repoman with pip install fermi-repoman

After you install repoman, you may check out a package. By default, repoman will use SSH remotes and set them up automatically for you. This may pose a problem if you don’t have SSH keys already set up.

Github has a good guide on how to set that up.

If you’d rather use the https protocol, you’ll want to use a different --remote-base parameter for the fermi-lat organization, e.g. --remote-base https://github.com/fermi-lat, or set the REMOTE_BASE environment veriable so you don’t need it every time.

By default, when using repoman to check out, it will fail if there are changes in your working copy. That way it doesn’t accidentally blow out work you’ve maybe done developing and haven’t committed. You are encouraged to fix this yourself by either stashing your changes or resetting your repository, but if you’d like to just force repoman to check out changes for you, use the --force option.

repoman

Repoman is a repo and name management tool for Fermi’s Software configuration.

repoman [OPTIONS] COMMAND [ARGS]...

Options

--workspace <workspace>

Changes the workspace.

--verbose

Verbose logging

--remote-base <remote_base>

Github user/organization for repos

--config <config>

Overrides a config key/value pair.

--version

Show the version and exit.

Environment variables

WORKSPACE_DIR

Provide a default for --workspace

REMOTE_BASE

Provide a default for --remote-base

checkout

Stage a Fermi package. REFS may be Tags, Branches, or Commits. For more information, see help for git-checkout. By default, this will effectively perform a recursive checkout if it finds a manifest (packageList.txt), checking out

repoman checkout [OPTIONS] PACKAGE [REFS]...

Options

--force

Force git checkout. This will throw away local changes in your branch, as well as reset to the reference at origin,if found

--in-place

Checkout package into this directory.

--develop

Ignore tags in name list and check out development branches

--bom

Provide a JSON bill of materials of the commit SHA’s checked out

Arguments

PACKAGE

Required argument

REFS

Optional argument(s)

checkout-list

Stage packages from a package list.

repoman checkout-list [OPTIONS] PACKAGE_LIST

Options

--force

Force git checkout. This will throw away local changes in your branch, as well as reset to the reference at origin,if found

--develop

Ignore tags in name list and check out development branches

Arguments

PACKAGE_LIST

Required argument

release

Prepare and perform a release.

This command executes both the prepare and perform steps of a release process.

repoman release [OPTIONS] PACKAGE [RELEASE_MESSAGE]

Options

--version <version>

Custom version for release

--major

Bump next major version

--minor

Bump next minor version

--patch

Bump next patch version

--push, --no-push

Push changes

Arguments

PACKAGE

Required argument

RELEASE_MESSAGE

Optional argument

release-perform

Perform a release.

Verify tags and remotes are in order and push them to the appropriate remotes.

repoman release-perform [OPTIONS] PACKAGE

Options

--push, --no-push

Push changes

Arguments

PACKAGE

Required argument

release-prepare

Prepare for a release in git.

Steps through several phases to ensure the repo is in a sane state and the manifest (packageList.txt) is ready to be released, resolving files accordingly. After this is done, a release file is written and changes are staged for the next step in the release process, perform.

If a CHANGELOG.md file is found, the release message will be prepended to it. For information on how to format the message, please see http://keepachangelog.com/en/1.0.0.

repoman release-prepare [OPTIONS] PACKAGE [RELEASE_MESSAGE]

Options

--version <version>

Custom version for release

--major

Bump next major version

--minor

Bump next minor version

--patch

Bump next patch version

Arguments

PACKAGE

Required argument

RELEASE_MESSAGE

Optional argument