Next release

  • Remove the tsrc push command and all review automation features. Please use hub, lab, or repo instead. See #207 for the discussion leading to this removal.

v1.0.3 - (2020-02-05)

  • Use poetry for dependency management and packaging.

v1.0.2 - (2020-01-29)

  • Fix python_requires value in project metadata

v1.0.1 - (2020-01-21)

  • Fix #196: Do not attempt file copies for non-cloned repositories when using tsrc init with a list of groups.

v1.0.0 - (2020-01-09)

Starting the new year with a stable release, at last!

Revamp group UX

The changes below in the configuration file and command line syntax allow for better UX regarding groups. See the corresponding milestone for the full list.

New configuration file

Previously, tsrc stored its permanent configuration in .tsrc/manifest.yml and the file was not supposed to be edited by hand. Instead, users could use tsrc init to modify it, for instance with the --branch argument.

Starting with this release, the command tsrc init can only be run once per workspace, and you must edit the .tsrc/config.yml file instead.

Changes in command line syntax

  • tsrc init: remove --file option.
  • tsrc foreach: instead of repeating the --group option, you can use --groups with a list of groups:
# before
tsrc init --group foo --group bar

# after
tsrc init --groups foo bar
  • tsrc init learned a --clone-all-repos option to clone all repositories from the manifest, regardless of the groups. Fix #181

  • Remove --file option from tsrc init.

  • tsrc foreach learned a --groups-from-config option to use the groups configured in the workspace. Fix #178, #179.

  • tsrc push learned a -o, --origin option to specify a remote name different from "origin". Fix #170

Other fixes

  • Try and check that GitLab installation support required features before using them - typically, using tsrc push --approvers on GitLab Community Edition. (#165)
  • reported by @irizzant.
  • Switch to GitHub actions for running tests and linters. Also, publish documentation automatically when something is pushed to the master branch.
  • tsrc status : add information when local branch does not match manifest configuration. (#190). Feature suggested by @janjachnick

v0.9.2 - (2019-09-30)

  • Additional bug fix for #165 - the fix in 0.9.1 was incomplete
  • Improve error message when trying to use non-supported GitLab features (like using tsrc push --reviewer on GitLab Community Edition)

v0.9.1 - (2019-09-23)

  • Improve error message when tsrc foreach fails to start the process. Suggested by @dlewis-ald in #163
  • Fix crash when finding reviewers for a GitLab project not in a group. Reported by @irizzant in #165

v0.9.0 - (2019-08-13)

  • Add support for GitHub Enterprise: patch by @sdavids13.
  • Improve error message when using creating a merge request in a GitLab repository when the token cannot be found in the tsrc configuration file. Fix #158
  • Fix crash when running tsrc status on a workspace with missing repositories (#160) - reported by @blastrock

v0.8.0 - (2019-08-12)

  • Implement tsrc sync --force. Currently all it does is running git fetch --force on all repositories. Use with caution. See #152 for details.

v0.7.1 - (2019-08-02)

  • Fix crash in tsrc sync when the repo configuration in the manifest contained neither an URL nor a remote. tsrc now aborts as soon as the misconfiguration of the manifest is detected (Reported by @jongep86)

v0.7.0 (2019-07-08)

  • Add a --file option to tsrc init so that manifest can be read from a custom path in the file system
  • Remove support for Python 3.4
  • Switch from xdg to pyxdg
  • Format the code with black

v0.6.6 (2019-04-02)

  • Remove raw HTML from README.rst

v0.6.5 (2019-04-0)

  • Use to measure coveage
  • Prettify README

v0.6.4 (2019-01-07)

  • Remove support for Python 3.3.
  • Use new and shiny cli-ui package instead of old python-cli-ui.

v0.6.3 (2018-11-04)

  • GitHub organization is now TankerHQ
  • We now use dmenv for dependencies management

v0.6.2 (2018-10-19)

Fix crash when using tsrc push on a GitHub repository for the first time.

v0.6.1 (2018-10-10)

Fix weird output when configuring remotes.

v0.6.0 (2018-10-09)


Add support for multiple remotes

# still valid (implicit 'origin' remote)
src: foo

# also valid (two explicit remotes)
src: fooo
  - { name: origin, url: }
  - { name: upstream, url:}

# not valid (ambiguous)
src: foo
   - { name: upstream, url: }

Thanks @tst2005 and @cgestes for their help with the configuration format.

tsrc foreach

  • tsrc foreach: add a --group option to select the repositories to run the command on. Fix #40

Other fixes

  • Fix #113: do not hide branch when showing tag status.
  • Add support for Python 3.7

v0.5.0 (2018-08-14)

  • Add support for setting approvers with the -r,--approvers option in tsrc push (GitLab Enterprise Edition only).

v0.4.1 (2018-04-27)

  • Fixed regression: tsrc push was no longer able to create a merge request on GitLab if --target was not set.

v0.4.0 (2018-04-26)


  • Preliminary GitHub support
  • tsrc push: new features and bug fixes
  • Improved fixed reference handling
  • Support for shallow clones

See below for the details.

Preliminary GitHub support

  • Added support for creating merge requests on GitHub. No configuration required. Just make sure you are using tsrc from a repository which has a URL starting with

tsrc will prompt you once for your login and password and then store an API token.

Afterwards, you'll be able to use tsrc push to:

  • Create a pull request (or update it if it already exists)
  • Assign people to the request (with the -a/--assignee option)
  • Request reviewers (with the --reviewers option)
  • Merge the pull request (with the --merge option)

This change has no impact if you were already using GitLab.

tsrc push: new features and bug fixes

  • Add --close option.
  • Breaking change: -m/--message option is gone, use --title instead. There's a concept of "description" or "message" for pull requests and merge requests, but the value of the option was only used to update the title, so it had to be renamed.
  • Do not assume local and remote tracking branch have the same name.
  • Allow using tsrc push <local>:<remote> to explicitly specify local and remote branch names.
  • Fix bugs when target is not specified on the command line. See this commit for details.
  • Fix missing merge requests in tsrc push (see issue #80). Patch by @maximerety.

Improve fixed reference handling

Breaking change: Instead of using fixed_ref in the manifest, you should now use tag or sha1:


  - src:
    fixed_ref: 42a70


  - src:
    tag: v0.1

See the dedicated section about manifest format and the #57 pull request discussion for the details.

This allow us to implement different behaviors depending on whether or not the fixed ref is a tag or just a sha1.

Support for shallow clones

To save time and space, you can use tsrc init --shallow to only have shallow clones in your workspace.

Note that due to limitations in git itself, the shallow option cannot be used with a fixed SHA1. If you need this, prefer using a tag instead.


v0.3.2 (2017-11-02)

  • Improve tsrc status to handle tags. Patch by @arnaudgelas.
  • Fix crash when running tsrc version.

v0.3.1 (2017-10-06)

  • Improve tsrc status output. Now also shows number of commits ahead and behind, and display a short SHA-1 when not on any branch. Initial patch by @arnaudgelas.

v0.3.0 (2017-09-22)

Breaking change: Add support for groups (#30). Reported by @arnaudgelas.

See the dedicated section about manifest format for details.

Upgrading from v0.2.4:

To upgrade from an older version of tsrc, you should re-run tsrc init with the correct url:

# Check manifest URL:
$ cd <workspace>/.tsrc/manifest
$ git remote get-url origin
# Note the url, for instance ssh://
$ cd <workspace>
$ tsrc init <manifest-url>

This is required to create the <workspace>/.tsrc/manifest.yml file which is later used by tsrc sync and other commands.

v0.2.4 (2017-07-13)

  • tsrc push --assignee: fix when there are more than 50 GitLab users (#25). Reported by @arnaudgelas

v0.2.3 (2017-09-01)

  • Split user interface functionality into its own project: python-cli-ui.

  • Add --quiet and --color global options.

v0.2.2 (2017-08-22)

Bug fix release.

  • tsrc init: Fix crash when a repository is empty (#17). Reported by @nicolasbrechet
  • tsrc push: Fix rude message when credentials are missing (#20). Reported by @cgestes

v0.2.1 (2017-08-10)

Packaging fixes.

v0.2.0 (2017-08-09)

  • Support for specifying custom branches in the manifest
  • Support for specifying fixed refs (tags or hashes) in the manifest

New syntax is:

  - src: foo
    branch: next

  - src: bar
    branch: master
    fixed_ref: v0.1

Note that branch is still required.

  • You can now skip the dest part of the copy section if src and dest are equal:
  - src:foo

# same thing as
 - src: foo
   dest: foo

v0.1.4 (2017-08-04)

Support for Python 3.3, 3.4, 3.5 and 3.6

v0.1.1 (2017-08-02)

First public release