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