Skip to content

Changelog

3.0.1 (2023-26-12)

Fix some incorrect URLs in the project's metadata and some other places.

3.0.0 (2023-26-12)

Breaking: correct branch on sync

If any of the repositories is not on the configured branch, but it is clean then the branch is changed to the configured one and then the repository is updated. Otherwise that repository will not be not updated.

Previously, tsrc sync would print an error and not checkout the branch.

To have tsrc sync behave like this, use the new --no-correct-branch flag.

Breaking: add --singular-remote argument to tsrc sync too

In tsrc 2.7 you could use -r in tsrc init to only use one remote. But you had no way to pass the same option to tsrc sync.

In this version, you can use -r or --singular-remote for both tsrc init and tsrc sync

Unfortunately , this means you must now use -i, --include <regex> instead of of -r <regex> when selecting repositories based on a regex.

Implemented by:

  • Albert De La Fuente Vigliotti
  • Greg Dubicki
  • Dimitri Merejkowsky

Original issue reported by Maxime Réty

Other changes

  • When running git commands, don't capture standard error along side standard out - fixes #381, reported by Patrick Decat.
  • Bump minimum supported version to Python 3.8.
  • Add support for Python 3.12.
  • Bump ruamel.yaml, dparse.
  • Don't hide cloning errors when running in parallel.
  • Doc improvements (patches by Henry Chang).

2.7.1 (2022-05-30)

  • In addition to preserving the order repos are listed in the manifest, tsrc now makes sure repos included via groups are processed before the other repos. See #356 for details. Thanks to @raabf for the bug report and code review!

2.7.0 (2022-05-14)

  • Show which git commands are run by default.
  • tsrc init: fix order of operations - clone the local manifest before writing the workspace configuration. Fixes #344, where users could not run init a second time if the previous call failed. Bug report by @cgestes.
  • tsrc init: do not assume the default branch of the manifest is master. Note that master is still hard-coded in a few places. See #347 for details.
  • Breaking: When using -j 1, do not sort repositories by lexical order of destination, but preserve the order in which they were specified in the manifest. Suggested by @raabf.

2.6.0 (2022-03-27)

  • Allow to use python -m tsrc in addition to just tsrc
  • Documentation updates
  • Bump mypy

2.5.0 (2022-12-21)

Highlights

  • Bump minimum supported version to Python 3.7.
  • Introduce ignore_submodules repository option - Patch by Thomas Hiscock.
  • When -j is not used, try getting the default jobs value from the TSRC_PARALLEL_JOBS environment variable. Patch by Marcin Jaworski.

Other

  • Bump mkdocs from 1.2.2 to 1.2.3
  • Bump pygit2
  • Bump linters (flake8, mypy, black)
  • Remove dependency on attr

2.4.1 (2021-11-05)

  • Ad more guides in the documentation
  • Display absolute paths when performing file system operations
  • tsrc sync now uses parallel jobs by default. Use -j1 to force sequential processing. Patch by @gdubicki

2.4.0 (2021-08-22)

Highlights

  • All of tsrc commands can now be run in parallel. Try for instance tsrc sync -j auto.

  • tsrc foreach now sets a bunch of environment variables. This allows developers to add new behaviors to tsrc without having to change its source code. See the relevant guide for more information.

  • Augment documentation with more use cases and examples (still a work in progress)

Breaking changes

  • Remove tsrc version - Use tsrc --version instead.

  • The 'parallel' feature caused the output of some commands like foreach or log to change slightly. Hopefully tsrc output is now more consistent.

Bug fixes

  • Fix crash when running tsrc without any arguments

  • Fix crash when trying to clone repositories in some rare corner cases (like the destination existing but not being a directory)

Internal changes

  • Make all tsrc imports consistent
  • Fix error when calling repr on tsrc Errors.

2.3.1 (2021-06-28)

Bug fixes and small improvements

  • Fix #268: tsrc apply-manifest now performs file system operation
  • Always display workspace path at the beginning of any action
  • Skip "performing file system operations" message if there is no work to be done

Internal changes

  • Bump linters and formatters (black, mypy, isort ...)
  • Use copier to simplify maintenance of tools configuration

2.3.0 (2021-05-31)

Repo selection

  • Added -r (regex) and -i (inverse regex) params for filtering repos. Patch by @xzr

Add support for submodules

  • tsrc calls git clone with --recurse-submodules when adding missing repositories
  • tsrc calls git submodule update --init --recursive when updating repositories

Misc

  • Remove codecov usage
  • Rename default branch to main.

2.2.1 (2021-04-10)

  • Project has been moved from TankerHQ organization to dmerejkowsky. New urls are:

  • Add CI jobs to check this project also works with Python 3.9

  • Drop Path Pie dependency
  • Minor internal fixes
  • Add more URLs in the metadata (and pypi.org project page)

2.2.0 (2020-07-17)

tsrc sync and tsrc init can now create symlinks as specified in the manifest file:

repos:

  - url: git@gitlab.local:proj1/app
    dest: app
    symlink:
      - source: app/some_file
        target: ../some_file

In this case, a symlink will be created from <workspace>/app/some_file to <workspace>/some_file. (both source and target keys are relative to the repository's destination).

  • log, status, and sync all learned about the --group option and the --all-cloned options
  • foreach: remove the --groups-from-config options since this is now the default behavior

Misc

  • Rework FAQ
  • Run black in lint.sh
  • Fix formatting of some messages
  • Update code manifesto to suggest using docstrings in tests

2.1.0 (2020-05-27)

Breaking changes

Change in manifest syntax

It was discovered that the manifest syntax was confusing for newcomers, so we decided to update it.

In particular, the src key meant both a relative path in the workspace when used in the repo config, and a relative path in the a repository when using in the repo.copy config.

Starting with this release, repo.src becomes repo.dest and repo.copy.src becomes repo.copy.file.

# Before (tsrc < 2.1.0)
repos:
  url: "https://acme.corp/foo"
  src: foo
  copy:
     src: some-file
     dest: some-file
# After (tsrc >= 2.1.0)
repos:
  url: "https://acme.corp/foo"
  dest : foo
  copy:
     file: some-file
     dest: some-file

This should make it clearer what tsrc does because:

  • dest now always refers to a relative path in the workspace (both in repo and copy).
  • By using repo.copy.file it's obvious that tsrc only supports copying files, not directories.

Supported Python versions

Drop support for Python 3.5

New features

  • tsrc init learned a -r, --remote option that pins the remote with the given name as the only remote to be used for cloning and syncing. tsrc expects this remote to be present in the manifest for all repositories. This is useful if you use the same workspace in different physical locations, and one of the remotes is behind a VPN for instance. Patch by @tronje.

Bug fixes

  • Fix #217: Preserves file attributes during the copy statements in repos

Other

  • The whole test suite now runs without errors on Windows - and Windows support is now part of the GitHub actions checks.
  • The tests now run faster and with more readable output (this was done by using libgit2 instead of running git commands in the tests helpers).
  • Add a scheduled GitHub action to run safety
  • Remove usage of deprecated API of the path library.
  • Run tests and linters for external pull requests too.

v2.0.0 - (2020-04-06)

  • 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.

  • Implement small improvements on tsrc output messages.

  • Add tsrc apply-manifest, to apply changes in a manifest file locally, without having to make a commit and push to a server first.

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 codecov.io to measure coverage
  • 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
url: git@github.com/foo

# also valid (two explicit remotes)
src: foo
remotes:
  - { name: origin, url: git@github.com:john/foo }
  - { name: upstream, url: git@github.com:foo/foo}

# not valid (ambiguous)
src: foo
url: git@github.com:john/foo
remotes:
   - { name: upstream, url: git@github.com:foo/foo }

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)

Highlights

  • 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 git@github.com.

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:

old:

repos:
  - src: git@example.com/foo
    fixed_ref: 42a70

new:

repos:
  - src: git@example.com/foo
    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.

Misc

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://git@example.com:manifest.git
$ 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:

repos:
  - src: foo
    url: git@gitlab.com:proj/foo
    branch: next

  - src: bar
    url: git@gitlab.com:proj/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:
copy:
  - src:foo

# same thing as
copy:
 - 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