Space is a multi-repository monitoring and shell helper tool to ease development across multiple dependent repositories.
Here's a screenshot of my setup (iterm, tmux, vim, space) for working on travis.
The thing on the right side is an iterm split pane running space. The main screen is take by a tmux session that has a vim and a zsh pane. (I use an iterm pane for space so that I can switch between tmux windows but keep the space view.)
The space view gives an overview of:
- current branch
- current commit
- bundler local flag
- git status (clean, dirty, ahead)
- bundle status (
E.g. one can easily see that:
- repos 1-5 are using the bundler local flag, while 6-7 are using remote references
- repos 4, 6, 7 have dirty working directories
- repo 6 is 1 commit ahead of origin
- the bundle in repo 7 is not installed
Space checks for each dependency listed in a repo's Gemfile if the bundle is locked to the hash that is currently checked out locally and display that status information.
Also note that the repo numbers are referring to the tmux windows where possible.
This screencast is from a very early version but still mostly valid. It also demonstrates how screen can be used to run commands on multiple repositories at once:
gem install space
Add a space config file. This is what the
~/.space/travis.yml file for the setup above looks like:
base_dir: ~/Development/projects/travis repositories: - travis-ci - travis-hub - travis-listener - travis-core - travis-support - travis-worker - travis-build
Commands are always run for a given scope of repos. If no scope is specified then commands are run for all repos in the project.
One can set a scope like so:
> [name|number] # scope to the given repo and all of its deps, can scope to multiple repos > - # unscope
> [refresh|!] # refresh > r[emote] # use remote repos > l[ocal] # use local repos
> git co -b foo # run this in all repos
You can specify a scope for a single command. The command is then run within the specified repos.
> 1 2 3 bundle update # run the command in the repos 1, 2, 3