Go to file
Daniel Andersson d52ca421d5 sync: respect sync-c manifest option
The documentation states that a `sync-c` attribute in the manifest file
can set a default for whether only the current branch should be fetched
or all branches. This seems to have been broken for some time.

Commit 7356114 introduced the `--no-current-branch` CLI option and
relied on getting `None` via `optparse` if neither `--current-branch`
nor `--no-current-branch` was set to distinguish it from a boolean
value. If `None` was received, it would read the value from the manifest
option `sync-c`. The parsing went through the utility function
`_GetCurrentBranchOnly` which returned `True` if `--current-branch` had
been given on the command-line, or fell back on the "superproject"
setting, which would either return `True` or `None`. This would
incorrectly make `repo` fall back to the manifest setting even if the
user had given `--no-current-branch` if no superproject was requested --
the manifest became "too powerful":

Command-line         Using superproject  → `current_branch_only`
------------         ------------------  -----------------------
                     No                  From manifest
                     Yes                 True
--current-branch     No                  True
--current-branch     Yes                 True
--no-current-branch  No                  From manifest ← wrong
--no-current-branch  Yes                 True

In commit 0cb6e92 the superproject configuration value reading changed
from something that could return `None` to something that always
returned a boolean. If it returned `False`, this would then incorrectly
make `repo` ignore the manifest option even if neither
`--current-branch` nor `--no-current-branch` had been given. The
manifest default became useless:

Command-line         Using superproject  → `current_branch_only`
------------         ------------------  -----------------------
                     No                  False ← wrong
                     Yes                 True
--current-branch     No                  True
--current-branch     Yes                 True
--no-current-branch  No                  False
--no-current-branch  Yes                 True

By swapping the order in which the command-line option target and the
superproject setting is evaluated, things should work as documented:

Command-line         Using superproject  → `current_branch_only`
------------         ------------------  -----------------------
                     No                  From manifest
                     Yes                 True
--current-branch     No                  True
--current-branch     Yes                 True
--no-current-branch  No                  False
--no-current-branch  Yes                 True

Change-Id: I933c232d2fbecc6b9bdc364ebac181798bce9175
Tested-by: Daniel Andersson <daniel.r.andersson@volvocars.com>
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/334270
Reviewed-by: Mike Frysinger <vapier@google.com>
2022-04-08 21:06:37 +00:00
.github/workflows Drop support for Python 3.5 2021-06-03 11:34:17 +00:00
docs manifest_xml: group for submanifest projects 2022-02-28 20:08:58 +00:00
hooks Revert "commit-msg: Insert Change-Id at start of trailers" 2020-04-15 07:17:16 +00:00
man man: refresh pages 2021-11-12 17:30:45 +00:00
release sign-launcher: make the help text more automatic 2021-10-06 17:02:56 +00:00
subcmds sync: respect sync-c manifest option 2022-04-08 21:06:37 +00:00
tests sync: respect sync-c manifest option 2022-04-08 21:06:37 +00:00
.flake8 flake8: Suppress "E731 do not assign a lambda expression, use a def" 2020-02-15 03:41:17 +00:00
.gitattributes Adds additional crlf clobber avoidance. 2016-06-22 08:36:45 +00:00
.gitignore Add parallelism to 'branches' command 2020-12-14 23:35:12 +00:00
.gitreview git-review: add config file 2021-11-15 01:39:36 +00:00
.mailmap Update .mailmap 2020-02-13 04:49:55 +00:00
.project Set correct name in PyDev and Eclipse project config 2013-04-19 09:35:43 +09:00
.pydevproject Leverage the next keyword from python 2.7 2018-12-19 11:06:35 -08:00
color.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00
command.py Add multi-manifest support with <submanifest> element 2022-02-17 21:57:55 +00:00
completion.bash bash-completion: complete projects with repo forall 2021-07-27 06:20:52 +00:00
editor.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00
error.py help/version: sprinkle bug report URL around 2021-04-26 21:43:43 +00:00
event_log.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00
fetch.py Support more url schemes for getting standalone manifest 2021-10-27 13:20:35 +00:00
git_command.py project: store objects in project-objects directly 2022-01-19 17:24:51 +00:00
git_config.py Fix typo for ValueError 2021-11-07 02:32:08 +00:00
git_refs.py git_refs: fix crash with binary . files in .git/refs/ 2021-02-28 16:07:24 +00:00
git_ssh add license header to a few more files 2019-06-13 13:23:19 -04:00
git_superproject.py Move manifest config logic into ManifestProject 2022-04-06 16:59:45 +00:00
git_trace2_event_log.py trace: allow writing traces to a socket 2022-03-16 17:33:07 +00:00
gitc_utils.py superproject: pass groups to ToXml method. 2021-03-11 01:24:52 +00:00
hooks.py drop pyversion & is_python3 checking 2021-01-06 18:53:58 +00:00
LICENSE setup.py: add basic packaging files 2019-12-02 04:23:31 +00:00
main.py Add multi-manifest support with <submanifest> element 2022-02-17 21:57:55 +00:00
manifest_xml.py manifest_xml: Add Load and Unload methods 2022-04-08 19:52:04 +00:00
MANIFEST.in setup.py: add basic packaging files 2019-12-02 04:23:31 +00:00
pager.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00
platform_utils_win32.py drop pyversion & is_python3 checking 2021-01-06 18:53:58 +00:00
platform_utils.py make file removal a bit more robust 2021-09-28 16:06:50 +00:00
progress.py progress: hide progress bar when --quiet 2021-04-13 22:25:26 +00:00
project.py manifest_xml: Add Load and Unload methods 2022-04-08 19:52:04 +00:00
README.md README: use new bug template 2020-02-26 23:20:43 +00:00
repo init: add an option --enable-git-lfs-filter 2022-01-26 01:47:20 +00:00
repo_trace.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00
requirements.json Drop support for Python 3.5 2021-06-03 11:34:17 +00:00
run_tests run_tests: fix pytest selection inside tox venv 2021-06-03 15:27:51 +00:00
setup.py Drop support for Python 3.5 2021-06-03 11:34:17 +00:00
ssh.py ssh: handle FileNotFoundError errors 2021-10-26 16:18:45 +00:00
SUBMITTING_PATCHES.md SUBMITTING_PATCHES: link to commit message style docs 2021-11-15 01:39:16 +00:00
tox.ini Drop support for Python 3.5 2021-06-03 11:34:17 +00:00
wrapper.py strip python2-only coding:utf-8 & print_function settings 2021-01-06 18:53:05 +00:00

repo

Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is not meant to replace Git, only to make it easier to work with Git. The repo command is an executable Python script that you can put anywhere in your path.

Contact

Please use the repo-discuss mailing list or issue tracker for questions.

You can file a new bug report under the "repo" component.

Please do not e-mail individual developers for support. They do not have the bandwidth for it, and often times questions have already been asked on repo-discuss or bugs posted to the issue tracker. So please search those sites first.

Install

Many distros include repo, so you might be able to install from there.

# Debian/Ubuntu.
$ sudo apt-get install repo

# Gentoo.
$ sudo emerge dev-vcs/repo

You can install it manually as well as it's a single script.

$ mkdir -p ~/.bin
$ PATH="${HOME}/.bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
$ chmod a+rx ~/.bin/repo