summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/internal-fs-layout.md1
-rw-r--r--docs/repoconfig.md103
-rw-r--r--docs/smart-sync.md16
3 files changed, 120 insertions, 0 deletions
diff --git a/docs/internal-fs-layout.md b/docs/internal-fs-layout.md
index ea0070bfb..64fe74cbe 100644
--- a/docs/internal-fs-layout.md
+++ b/docs/internal-fs-layout.md
@@ -253,6 +253,7 @@ setting `REPO_CONFIG_DIR`.
253 253
254* `.repoconfig/`: Repo's per-user directory for all random config files/state. 254* `.repoconfig/`: Repo's per-user directory for all random config files/state.
255* `.repoconfig/config`: Per-user settings using [git-config] file format. 255* `.repoconfig/config`: Per-user settings using [git-config] file format.
256 See [repoconfig.md](./repoconfig.md) for the available settings.
256* `.repoconfig/keyring-version`: Cache file for checking if the gnupg subdir 257* `.repoconfig/keyring-version`: Cache file for checking if the gnupg subdir
257 has all the same keys as the repo launcher. Used to avoid running gpg 258 has all the same keys as the repo launcher. Used to avoid running gpg
258 constantly as that can be quite slow. 259 constantly as that can be quite slow.
diff --git a/docs/repoconfig.md b/docs/repoconfig.md
new file mode 100644
index 000000000..aef92fdc6
--- /dev/null
+++ b/docs/repoconfig.md
@@ -0,0 +1,103 @@
1# repoconfig: User Configuration
2
3Repo keeps a small number of settings that apply to the current user rather
4than to one checkout. They live in the per-user configuration file
5`~/.repoconfig/config`, which is separate from both git's own `~/.gitconfig`
6and the per-checkout settings stored in `.repo/manifests.git/config` (see
7[internal-fs-layout.md](./internal-fs-layout.md#Global-settings) for those).
8
9[TOC]
10
11## Location
12
13The file is `.repoconfig/config` inside the user's home directory. The parent
14directory can be changed by setting the `REPO_CONFIG_DIR` environment variable,
15in which case repo reads `$REPO_CONFIG_DIR/.repoconfig/config` instead.
16
17The file is created on demand; it's fine for it to be missing.
18
19## Format
20
21The file uses the [git-config] syntax, so it can be edited by hand:
22
23```ini
24[sync]
25 smartsync = true
26```
27
28or managed with `git config` by pointing it at the file explicitly:
29
30```sh
31# Set a value.
32git config --file ~/.repoconfig/config sync.smartsync true
33
34# Read a value.
35git config --file ~/.repoconfig/config sync.smartsync
36
37# Remove a value.
38git config --file ~/.repoconfig/config --unset sync.smartsync
39```
40
41Boolean settings accept `true`/`yes` and `false`/`no`.
42
43Repo caches a parsed copy of the file in `.repoconfig/.repo_config.json`; it is
44refreshed automatically whenever `config` changes and can be safely deleted.
45
46## Settings
47
48### alias.*
49
50`alias.<name>` defines `repo <name>` as a shortcut for another subcommand,
51optionally with arguments, in the same way as git aliases:
52
53```ini
54[alias]
55 ss = sync -s
56 st = status -o
57```
58
59Aliases defined in a checkout's `.repo/config` take precedence over per-user
60ones. Existing subcommands cannot be overridden by an alias.
61
62### sync
63
64#### smartsync
65
66`sync.smartsync` is a boolean that lets a user decide once, for all their
67checkouts, whether `repo sync` should [Smart Sync](./smart-sync.md) by
68default:
69
70```sh
71# Always Smart Sync, as if -s/--smart-sync were passed.
72git config --file ~/.repoconfig/config sync.smartsync true
73
74# Never Smart Sync by default, even if the manifest sets sync-smartsync="true".
75git config --file ~/.repoconfig/config sync.smartsync false
76
77# Remove the preference and go back to following the manifest.
78git config --file ~/.repoconfig/config --unset sync.smartsync
79```
80
81The effective behavior is resolved in this order; the first match wins:
82
831. Command line: `-s`/`--smart-sync`, `--no-smart-sync`, or `-t`/`--smart-tag`.
842. User config: `sync.smartsync` in `~/.repoconfig/config`.
853. Manifest: `sync-smartsync="true"` on the `<default>` element.
864. Otherwise, a regular ToT sync.
87
88So `sync.smartsync=false` turns off the manifest-driven default, but an
89explicit `repo sync -s`, `repo sync -t TAG` or `repo smartsync` still works.
90Likewise `sync.smartsync=true` is overridden by `--no-smart-sync`.
91
92A Smart Sync enabled by `sync.smartsync=true` is treated as an explicit
93request: it is subject to the same restrictions as `-s` (it is skipped when
94`-l`/`--local-only`, `-m`/`--manifest-name`, `-t`/`--smart-tag` or
95`--superproject-revision` is used), and a failure to obtain a manifest from
96the server fails the sync instead of silently falling back to ToT.
97
98`sync.smartsync` does not affect `-l`/`--local-only`: a local-only sync keeps
99whatever `smart_sync_override.xml` the previous network sync left behind. See
100[smart-sync.md](./smart-sync.md#Client-Options) for details.
101
102
103[git-config]: https://git-scm.com/docs/git-config
diff --git a/docs/smart-sync.md b/docs/smart-sync.md
index 24f37461b..905a004a0 100644
--- a/docs/smart-sync.md
+++ b/docs/smart-sync.md
@@ -204,6 +204,10 @@ still fails the sync, as before. Options that specify an explicit target or
204manifest source (such as `-t`/`--smart-tag`, `-m`/`--manifest-name` or 204manifest source (such as `-t`/`--smart-tag`, `-m`/`--manifest-name` or
205`--superproject-revision`) will also disable the default Smart Sync behavior. 205`--superproject-revision`) will also disable the default Smart Sync behavior.
206 206
207Users can override this manifest default on their workstation with the
208`sync.smartsync` user setting; see
209[Per-user default](#Per_user-default-sync_smartsync) below.
210
207### --smart-sync / -s 211### --smart-sync / -s
208 212
209Explicitly enables Smart Sync. Repo will call 213Explicitly enables Smart Sync. Repo will call
@@ -231,6 +235,18 @@ match the settings Android build environments automatically setup.
231Explicitly disables Smart Sync, overriding any `sync-smartsync="true"` setting 235Explicitly disables Smart Sync, overriding any `sync-smartsync="true"` setting
232declared in the manifest `<default>` element. 236declared in the manifest `<default>` element.
233 237
238### Per-user default (sync.smartsync)
239
240A user can decide once, for all their checkouts, whether `repo sync` should
241Smart Sync by default by setting the boolean `sync.smartsync` key in their
242[per-user repo config](./repoconfig.md#smartsync).
243
244Command line flags (`-s`, `--no-smart-sync`, `-t`) override the user setting,
245which in turn overrides the manifest's `sync-smartsync` default. A Smart Sync
246enabled this way is treated as an explicit request, so it is subject to the
247same restrictions as `-s` and fails the sync if no manifest can be obtained
248from the server instead of silently falling back to ToT.
249
234### --smart-tag=TAG / -t 250### --smart-tag=TAG / -t
235 251
236Repo will call `GetManifest(TAG)`. 252Repo will call `GetManifest(TAG)`.