<commit_before># Frequently asked questions

## Why not Python2 support?

We believe Python2 is an inferior language than Python3, and we use many
Python3 features to make the code more readable and robust.

Plus [Python2.7 supports ends in 3 years](
https://www.python.org/dev/peps/pep-0373/#id2).

## Support for older Python3 versions ?

Python3.3 is already quite old (2012).

There are currently no plans to support earlier versions.

## Why not repo?

We used [repo](https://android.googlesource.com/tools/repo/) for a while, but
found that tsrc had both a better command line API and a nicer output.

On a less subjective level:

* Good support for Windows (no need for CygWin or anything like that)

* **GitLab** support (automate working with merge requests)

* Lastly, tsrc tries hard to never do any destructive operation or unexpected
  actions.

    For instance, `tsrc` never puts you in a "detached HEAD" state,
    nor does automatic rebases. It also never touches dirty repos.

    This is achieved by using mostly 'porcelain' commands from git, instead of
    relying on plumbings internals.


Also (and this matters a lot if you think about contribution):

* Comprehensive test suite
* Uses PEP8 coding style
* Written in Python 3, not Python 2

Here are a few features present in repo that are missing from `tsrc`
(but may be implemented in the future)

* Cloning a specific branch (but see [PR #7](https://github.com/TankerApp/tsrc/pull/7))
* Cloning a revision or tag
* Cloning several repositories in parallel
* Cloning just one or several groups of repositories
* Support for other hosting services such as `gerrit` or `github`

## Why not git-subrepo, mu-repo, or gr?

All this projects are fine but did not match our needs:

* [git-subrepo]() squashes commits, and we prefer having normal clones
  everywhere
* [mu-repo]() is nice and contains an interesting dependency management feature,
  but currently we do not need this complexity.

In any case, now that the whole team is using `tsrc` all the time, it's likely
we'll keep using `tsrc` in the future.

## Why not using libgit2 or similar?

`pygit2` now has pre-built wheels for Windows, but not for macOS and Linux.

We prefer to _not_ require compiling `libgit2`.

Also, we prefer calling git "porcelain" commands, both for readability of the
source code and ease of debugging.

## Why do you hide which git commands are run?

<commit_msg>One more feature done :)<commit_after># Frequently asked questions

## Why not Python2 support?

We believe Python2 is an inferior language than Python3, and we use many
Python3 features to make the code more readable and robust.

Plus [Python2.7 supports ends in 3 years](
https://www.python.org/dev/peps/pep-0373/#id2).

## Support for older Python3 versions ?

Python3.3 is already quite old (2012).

There are currently no plans to support earlier versions.

## Why not repo?

We used [repo](https://android.googlesource.com/tools/repo/) for a while, but
found that tsrc had both a better command line API and a nicer output.

On a less subjective level:

* Good support for Windows (no need for CygWin or anything like that)

* **GitLab** support (automate working with merge requests)

* Lastly, tsrc tries hard to never do any destructive operation or unexpected
  actions.

    For instance, `tsrc` never puts you in a "detached HEAD" state,
    nor does automatic rebases. It also never touches dirty repos.

    This is achieved by using mostly 'porcelain' commands from git, instead of
    relying on plumbings internals.


Also (and this matters a lot if you think about contribution):

* Comprehensive test suite
* Uses PEP8 coding style
* Written in Python 3, not Python 2

Here are a few features present in repo that are missing from `tsrc`
(but may be implemented in the future)

* Cloning a revision or tag
* Cloning several repositories in parallel
* Cloning just one or several groups of repositories
* Support for other hosting services such as `gerrit` or `github`

## Why not git-subrepo, mu-repo, or gr?

All this projects are fine but did not match our needs:

* [git-subrepo]() squashes commits, and we prefer having normal clones
  everywhere
* [mu-repo]() is nice and contains an interesting dependency management feature,
  but currently we do not need this complexity.

In any case, now that the whole team is using `tsrc` all the time, it's likely
we'll keep using `tsrc` in the future.

## Why not using libgit2 or similar?

`pygit2` now has pre-built wheels for Windows, but not for macOS and Linux.

We prefer to _not_ require compiling `libgit2`.

Also, we prefer calling git "porcelain" commands, both for readability of the
source code and ease of debugging.

## Why do you hide which git commands are run?


{'fraction_non_alphanumeric': 0.06544996853366897, 'fraction_numerical': 0.010908328088944829, 'mean_word_length': 4.088580576307364, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 5, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '285087', 'n_tokens_mistral': 1388, 'n_tokens_neox': 1304, 'n_words': 714}