diff options
Diffstat (limited to 'docs')
-rw-r--r-- | docs/internal-fs-layout.md | 263 | ||||
-rw-r--r-- | docs/manifest-format.md | 161 | ||||
-rw-r--r-- | docs/python-support.md | 4 | ||||
-rw-r--r-- | docs/release-process.md | 194 | ||||
-rw-r--r-- | docs/repo-hooks.md | 2 | ||||
-rw-r--r-- | docs/windows.md | 33 |
6 files changed, 615 insertions, 42 deletions
diff --git a/docs/internal-fs-layout.md b/docs/internal-fs-layout.md new file mode 100644 index 00000000..af6a4523 --- /dev/null +++ b/docs/internal-fs-layout.md | |||
@@ -0,0 +1,263 @@ | |||
1 | # Repo internal filesystem layout | ||
2 | |||
3 | A reference to the `.repo/` tree in repo client checkouts. | ||
4 | Hopefully it's complete & up-to-date, but who knows! | ||
5 | |||
6 | *** note | ||
7 | **Warning**: | ||
8 | This is meant for developers of the repo project itself as a quick reference. | ||
9 | **Nothing** in here must be construed as ABI, or that repo itself will never | ||
10 | change its internals in backwards incompatible ways. | ||
11 | *** | ||
12 | |||
13 | [TOC] | ||
14 | |||
15 | ## .repo/ layout | ||
16 | |||
17 | All content under `.repo/` is managed by `repo` itself with few exceptions. | ||
18 | |||
19 | In general, you should not make manual changes in here. | ||
20 | If a setting was initialized using an option to `repo init`, you should use that | ||
21 | command to change the setting later on. | ||
22 | It is always safe to re-run `repo init` in existing repo client checkouts. | ||
23 | For example, if you want to change the manifest branch, you can simply run | ||
24 | `repo init --manifest-branch=<new name>` and repo will take care of the rest. | ||
25 | |||
26 | * `config`: Per-repo client checkout settings using [git-config] file format. | ||
27 | * `.repo_config.json`: JSON cache of the `config` file for repo to | ||
28 | read/process quickly. | ||
29 | |||
30 | ### repo/ state | ||
31 | |||
32 | * `repo/`: A git checkout of the repo project. This is how `repo` re-execs | ||
33 | itself to get the latest released version. | ||
34 | |||
35 | It tracks the git repository at `REPO_URL` using the `REPO_REV` branch. | ||
36 | Those are specified at `repo init` time using the `--repo-url=<REPO_URL>` | ||
37 | and `--repo-rev=<REPO_REV>` options. | ||
38 | |||
39 | Any changes made to this directory will usually be automatically discarded | ||
40 | by repo itself when it checks for updates. If you want to update to the | ||
41 | latest version of repo, use `repo selfupdate` instead. If you want to | ||
42 | change the git URL/branch that this tracks, re-run `repo init` with the new | ||
43 | settings. | ||
44 | |||
45 | * `.repo_fetchtimes.json`: Used by `repo sync` to record stats when syncing | ||
46 | the various projects. | ||
47 | |||
48 | ### Manifests | ||
49 | |||
50 | For more documentation on the manifest format, including the local_manifests | ||
51 | support, see the [manifest-format.md] file. | ||
52 | |||
53 | * `manifests/`: A git checkout of the manifest project. Its `.git/` state | ||
54 | points to the `manifest.git` bare checkout (see below). It tracks the git | ||
55 | branch specified at `repo init` time via `--manifest-branch`. | ||
56 | |||
57 | The local branch name is always `default` regardless of the remote tracking | ||
58 | branch. Do not get confused if the remote branch is not `default`, or if | ||
59 | there is a remote `default` that is completely different! | ||
60 | |||
61 | No manual changes should be made in here as it will just confuse repo and | ||
62 | it won't automatically recover causing no new changes to be picked up. | ||
63 | |||
64 | * `manifests.git/`: A bare checkout of the manifest project. It tracks the | ||
65 | git repository specified at `repo init` time via `--manifest-url`. | ||
66 | |||
67 | No manual changes should be made in here as it will just confuse repo. | ||
68 | If you want to switch the tracking settings, re-run `repo init` with the | ||
69 | new settings. | ||
70 | |||
71 | * `manifest.xml`: The manifest that repo uses. It is generated at `repo init` | ||
72 | and uses the `--manifest-name` to determine what manifest file to load next | ||
73 | out of `manifests/`. | ||
74 | |||
75 | Do not try to modify this to load other manifests as it will confuse repo. | ||
76 | If you want to switch manifest files, re-run `repo init` with the new | ||
77 | setting. | ||
78 | |||
79 | Older versions of repo managed this with symlinks. | ||
80 | |||
81 | * `manifest.xml -> manifests/<manifest-name>.xml`: A symlink to the manifest | ||
82 | that the user wishes to sync. It is specified at `repo init` time via | ||
83 | `--manifest-name`. | ||
84 | |||
85 | |||
86 | * `manifests.git/.repo_config.json`: JSON cache of the `manifests.git/config` | ||
87 | file for repo to read/process quickly. | ||
88 | |||
89 | * `local_manifest.xml` (*Deprecated*): User-authored tweaks to the manifest | ||
90 | used to sync. See [local manifests] for more details. | ||
91 | * `local_manifests/`: Directory of user-authored manifest fragments to tweak | ||
92 | the manifest used to sync. See [local manifests] for more details. | ||
93 | |||
94 | ### Project objects | ||
95 | |||
96 | *** note | ||
97 | **Warning**: Please do not use repo's approach to projects/ & project-objects/ | ||
98 | layouts as a model for other tools to implement similar approaches. | ||
99 | It has a number of known downsides like: | ||
100 | * [Symlinks do not work well under Windows](./windows.md). | ||
101 | * Git sometimes replaces symlinks under .git/ with real files (under unknown | ||
102 | circumstances), and then the internal state gets out of sync, and data loss | ||
103 | may ensue. | ||
104 | * When sharing project-objects between multiple project checkouts, Git might | ||
105 | automatically run `gc` or `prune` which may lead to data loss or corruption | ||
106 | (since those operate on leaf projects and miss refs in other leaves). See | ||
107 | https://gerrit-review.googlesource.com/c/git-repo/+/254392 for more details. | ||
108 | |||
109 | Instead, you should use standard Git workflows like [git worktree] or | ||
110 | [gitsubmodules] with [superprojects]. | ||
111 | *** | ||
112 | |||
113 | * `copy-link-files.json`: Tracking file used by `repo sync` to determine when | ||
114 | copyfile or linkfile are added or removed and need corresponding updates. | ||
115 | * `project.list`: Tracking file used by `repo sync` to determine when projects | ||
116 | are added or removed and need corresponding updates in the checkout. | ||
117 | * `projects/`: Bare checkouts of every project synced by the manifest. The | ||
118 | filesystem layout matches the `<project path=...` setting in the manifest | ||
119 | (i.e. where it's checked out in the repo client source tree). Those | ||
120 | checkouts will symlink their `.git/` state to paths under here. | ||
121 | |||
122 | Some git state is further split out under `project-objects/`. | ||
123 | * `project-objects/`: Git objects that are safe to share across multiple | ||
124 | git checkouts. The filesystem layout matches the `<project name=...` | ||
125 | setting in the manifest (i.e. the path on the remote server) with a `.git` | ||
126 | suffix. This allows for multiple checkouts of the same remote git repo to | ||
127 | share their objects. For example, you could have different branches of | ||
128 | `foo/bar.git` checked out to `foo/bar-main`, `foo/bar-release`, etc... | ||
129 | There will be multiple trees under `projects/` for each one, but only one | ||
130 | under `project-objects/`. | ||
131 | |||
132 | This layout is designed to allow people to sync against different remotes | ||
133 | (e.g. a local mirror & a public review server) while avoiding duplicating | ||
134 | the content. However, this can run into problems if different remotes use | ||
135 | the same path on their respective servers. Best to avoid that. | ||
136 | * `subprojects/`: Like `projects/`, but for git submodules. | ||
137 | * `subproject-objects/`: Like `project-objects/`, but for git submodules. | ||
138 | * `worktrees/`: Bare checkouts of every project synced by the manifest. The | ||
139 | filesystem layout matches the `<project name=...` setting in the manifest | ||
140 | (i.e. the path on the remote server) with a `.git` suffix. This has the | ||
141 | same advantages as the `project-objects/` layout above. | ||
142 | |||
143 | This is used when [git worktree]'s are enabled. | ||
144 | |||
145 | ### Global settings | ||
146 | |||
147 | The `.repo/manifests.git/config` file is used to track settings for the entire | ||
148 | repo client checkout. | ||
149 | |||
150 | Most settings use the `[repo]` section to avoid conflicts with git. | ||
151 | |||
152 | Everything under `[repo.syncstate.*]` is used to keep track of sync details for logging | ||
153 | purposes. | ||
154 | |||
155 | User controlled settings are initialized when running `repo init`. | ||
156 | |||
157 | | Setting | `repo init` Option | Use/Meaning | | ||
158 | |------------------- |---------------------------|-------------| | ||
159 | | manifest.groups | `--groups` & `--platform` | The manifest groups to sync | | ||
160 | | manifest.standalone | `--standalone-manifest` | Download manifest as static file instead of creating checkout | | ||
161 | | repo.archive | `--archive` | Use `git archive` for checkouts | | ||
162 | | repo.clonebundle | `--clone-bundle` | Whether the initial sync used clone.bundle explicitly | | ||
163 | | repo.clonefilter | `--clone-filter` | Filter setting when using [partial git clones] | | ||
164 | | repo.depth | `--depth` | Create shallow checkouts when cloning | | ||
165 | | repo.dissociate | `--dissociate` | Dissociate from any reference/mirrors after initial clone | | ||
166 | | repo.mirror | `--mirror` | Checkout is a repo mirror | | ||
167 | | repo.partialclone | `--partial-clone` | Create [partial git clones] | | ||
168 | | repo.partialcloneexclude | `--partial-clone-exclude` | Comma-delimited list of project names (not paths) to exclude while using [partial git clones] | | ||
169 | | repo.reference | `--reference` | Reference repo client checkout | | ||
170 | | repo.submodules | `--submodules` | Sync git submodules | | ||
171 | | repo.superproject | `--use-superproject` | Sync [superproject] | | ||
172 | | repo.worktree | `--worktree` | Use [git worktree] for checkouts | | ||
173 | | user.email | `--config-name` | User's e-mail address; Copied into `.git/config` when checking out a new project | | ||
174 | | user.name | `--config-name` | User's name; Copied into `.git/config` when checking out a new project | | ||
175 | |||
176 | [partial git clones]: https://git-scm.com/docs/gitrepository-layout#_code_partialclone_code | ||
177 | [superproject]: https://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects | ||
178 | |||
179 | ### Repo hooks settings | ||
180 | |||
181 | For more details on this feature, see the [repo-hooks docs](./repo-hooks.md). | ||
182 | We'll just discuss the internal configuration settings. | ||
183 | These are stored in the registered `<repo-hooks>` project itself, so if the | ||
184 | manifest switches to a different project, the settings will not be copied. | ||
185 | |||
186 | | Setting | Use/Meaning | | ||
187 | |--------------------------------------|-------------| | ||
188 | | repo.hooks.\<hook\>.approvedmanifest | User approval for secure manifest sources (e.g. https://) | | ||
189 | | repo.hooks.\<hook\>.approvedhash | User approval for insecure manifest sources (e.g. http://) | | ||
190 | |||
191 | |||
192 | For example, if our manifest had the following entries, we would store settings | ||
193 | under `.repo/projects/src/repohooks.git/config` (which would be reachable via | ||
194 | `git --git-dir=src/repohooks/.git config`). | ||
195 | ```xml | ||
196 | <project path="src/repohooks" name="chromiumos/repohooks" ... /> | ||
197 | <repo-hooks in-project="chromiumos/repohooks" ... /> | ||
198 | ``` | ||
199 | |||
200 | If `<hook>` is `pre-upload`, the `.git/config` setting might be: | ||
201 | ```ini | ||
202 | [repo "hooks.pre-upload"] | ||
203 | approvedmanifest = https://chromium.googlesource.com/chromiumos/manifest | ||
204 | ``` | ||
205 | |||
206 | ## Per-project settings | ||
207 | |||
208 | These settings are somewhat meant to be tweaked by the user on a per-project | ||
209 | basis (e.g. `git config` in a checked out source repo). | ||
210 | |||
211 | Where possible, we re-use standard git settings to avoid confusion, and we | ||
212 | refrain from documenting those, so see [git-config] documentation instead. | ||
213 | |||
214 | See `repo help upload` for documentation on `[review]` settings. | ||
215 | |||
216 | The `[remote]` settings are automatically populated/updated from the manifest. | ||
217 | |||
218 | The `[branch]` settings are updated by `repo start` and `git branch`. | ||
219 | |||
220 | | Setting | Subcommands | Use/Meaning | | ||
221 | |-------------------------------|---------------|-------------| | ||
222 | | review.\<url\>.autocopy | upload | Automatically add to `--cc=<value>` | | ||
223 | | review.\<url\>.autoreviewer | upload | Automatically add to `--reviewers=<value>` | | ||
224 | | review.\<url\>.autoupload | upload | Automatically answer "yes" or "no" to all prompts | | ||
225 | | review.\<url\>.uploadhashtags | upload | Automatically add to `--hashtag=<value>` | | ||
226 | | review.\<url\>.uploadlabels | upload | Automatically add to `--label=<value>` | | ||
227 | | review.\<url\>.uploadnotify | upload | [Notify setting][upload-notify] to use | | ||
228 | | review.\<url\>.uploadtopic | upload | Default [topic] to use | | ||
229 | | review.\<url\>.username | upload | Override username with `ssh://` review URIs | | ||
230 | | remote.\<remote\>.fetch | sync | Set of refs to fetch | | ||
231 | | remote.\<remote\>.projectname | \<network\> | The name of the project as it exists in Gerrit review | | ||
232 | | remote.\<remote\>.pushurl | upload | The base URI for pushing CLs | | ||
233 | | remote.\<remote\>.review | upload | The URI of the Gerrit review server | | ||
234 | | remote.\<remote\>.url | sync & upload | The URI of the git project to fetch | | ||
235 | | branch.\<branch\>.merge | sync & upload | The branch to merge & upload & track | | ||
236 | | branch.\<branch\>.remote | sync & upload | The remote to track | | ||
237 | |||
238 | ## ~/ dotconfig layout | ||
239 | |||
240 | Repo will create & maintain a few files in the user's home directory. | ||
241 | |||
242 | * `.repoconfig/`: Repo's per-user directory for all random config files/state. | ||
243 | * `.repoconfig/config`: Per-user settings using [git-config] file format. | ||
244 | * `.repoconfig/keyring-version`: Cache file for checking if the gnupg subdir | ||
245 | has all the same keys as the repo launcher. Used to avoid running gpg | ||
246 | constantly as that can be quite slow. | ||
247 | * `.repoconfig/gnupg/`: GnuPG's internal state directory used when repo needs | ||
248 | to run `gpg`. This provides isolation from the user's normal `~/.gnupg/`. | ||
249 | |||
250 | * `.repoconfig/.repo_config.json`: JSON cache of the `.repoconfig/config` | ||
251 | file for repo to read/process quickly. | ||
252 | * `.repo_.gitconfig.json`: JSON cache of the `.gitconfig` file for repo to | ||
253 | read/process quickly. | ||
254 | |||
255 | |||
256 | [git-config]: https://git-scm.com/docs/git-config | ||
257 | [git worktree]: https://git-scm.com/docs/git-worktree | ||
258 | [gitsubmodules]: https://git-scm.com/docs/gitsubmodules | ||
259 | [manifest-format.md]: ./manifest-format.md | ||
260 | [local manifests]: ./manifest-format.md#Local-Manifests | ||
261 | [superprojects]: https://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects | ||
262 | [topic]: https://gerrit-review.googlesource.com/Documentation/intro-user.html#topics | ||
263 | [upload-notify]: https://gerrit-review.googlesource.com/Documentation/user-upload.html#notify | ||
diff --git a/docs/manifest-format.md b/docs/manifest-format.md index 93d9b960..8e0049b3 100644 --- a/docs/manifest-format.md +++ b/docs/manifest-format.md | |||
@@ -21,6 +21,7 @@ following DTD: | |||
21 | 21 | ||
22 | ```xml | 22 | ```xml |
23 | <!DOCTYPE manifest [ | 23 | <!DOCTYPE manifest [ |
24 | |||
24 | <!ELEMENT manifest (notice?, | 25 | <!ELEMENT manifest (notice?, |
25 | remote*, | 26 | remote*, |
26 | default?, | 27 | default?, |
@@ -29,11 +30,13 @@ following DTD: | |||
29 | project*, | 30 | project*, |
30 | extend-project*, | 31 | extend-project*, |
31 | repo-hooks?, | 32 | repo-hooks?, |
33 | superproject?, | ||
34 | contactinfo?, | ||
32 | include*)> | 35 | include*)> |
33 | 36 | ||
34 | <!ELEMENT notice (#PCDATA)> | 37 | <!ELEMENT notice (#PCDATA)> |
35 | 38 | ||
36 | <!ELEMENT remote EMPTY> | 39 | <!ELEMENT remote (annotation*)> |
37 | <!ATTLIST remote name ID #REQUIRED> | 40 | <!ATTLIST remote name ID #REQUIRED> |
38 | <!ATTLIST remote alias CDATA #IMPLIED> | 41 | <!ATTLIST remote alias CDATA #IMPLIED> |
39 | <!ATTLIST remote fetch CDATA #REQUIRED> | 42 | <!ATTLIST remote fetch CDATA #REQUIRED> |
@@ -87,21 +90,39 @@ following DTD: | |||
87 | <!ELEMENT extend-project EMPTY> | 90 | <!ELEMENT extend-project EMPTY> |
88 | <!ATTLIST extend-project name CDATA #REQUIRED> | 91 | <!ATTLIST extend-project name CDATA #REQUIRED> |
89 | <!ATTLIST extend-project path CDATA #IMPLIED> | 92 | <!ATTLIST extend-project path CDATA #IMPLIED> |
93 | <!ATTLIST extend-project dest-path CDATA #IMPLIED> | ||
90 | <!ATTLIST extend-project groups CDATA #IMPLIED> | 94 | <!ATTLIST extend-project groups CDATA #IMPLIED> |
91 | <!ATTLIST extend-project revision CDATA #IMPLIED> | 95 | <!ATTLIST extend-project revision CDATA #IMPLIED> |
96 | <!ATTLIST extend-project remote CDATA #IMPLIED> | ||
92 | 97 | ||
93 | <!ELEMENT remove-project EMPTY> | 98 | <!ELEMENT remove-project EMPTY> |
94 | <!ATTLIST remove-project name CDATA #REQUIRED> | 99 | <!ATTLIST remove-project name CDATA #REQUIRED> |
100 | <!ATTLIST remove-project optional CDATA #IMPLIED> | ||
95 | 101 | ||
96 | <!ELEMENT repo-hooks EMPTY> | 102 | <!ELEMENT repo-hooks EMPTY> |
97 | <!ATTLIST repo-hooks in-project CDATA #REQUIRED> | 103 | <!ATTLIST repo-hooks in-project CDATA #REQUIRED> |
98 | <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED> | 104 | <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED> |
99 | 105 | ||
106 | <!ELEMENT superproject EMPTY> | ||
107 | <!ATTLIST superproject name CDATA #REQUIRED> | ||
108 | <!ATTLIST superproject remote IDREF #IMPLIED> | ||
109 | <!ATTLIST superproject revision CDATA #IMPLIED> | ||
110 | |||
111 | <!ELEMENT contactinfo EMPTY> | ||
112 | <!ATTLIST contactinfo bugurl CDATA #REQUIRED> | ||
113 | |||
100 | <!ELEMENT include EMPTY> | 114 | <!ELEMENT include EMPTY> |
101 | <!ATTLIST include name CDATA #REQUIRED> | 115 | <!ATTLIST include name CDATA #REQUIRED> |
116 | <!ATTLIST include groups CDATA #IMPLIED> | ||
102 | ]> | 117 | ]> |
103 | ``` | 118 | ``` |
104 | 119 | ||
120 | For compatibility purposes across repo releases, all unknown elements are | ||
121 | silently ignored. However, repo reserves all possible names for itself for | ||
122 | future use. If you want to use custom elements, the `x-*` namespace is | ||
123 | reserved for that purpose, and repo guarantees to never allocate any | ||
124 | corresponding names. | ||
125 | |||
105 | A description of the elements and their attributes follows. | 126 | A description of the elements and their attributes follows. |
106 | 127 | ||
107 | 128 | ||
@@ -109,6 +130,10 @@ A description of the elements and their attributes follows. | |||
109 | 130 | ||
110 | The root element of the file. | 131 | The root element of the file. |
111 | 132 | ||
133 | ### Element notice | ||
134 | |||
135 | Arbitrary text that is displayed to users whenever `repo sync` finishes. | ||
136 | The content is simply passed through as it exists in the manifest. | ||
112 | 137 | ||
113 | ### Element remote | 138 | ### Element remote |
114 | 139 | ||
@@ -141,8 +166,8 @@ Attribute `review`: Hostname of the Gerrit server where reviews | |||
141 | are uploaded to by `repo upload`. This attribute is optional; | 166 | are uploaded to by `repo upload`. This attribute is optional; |
142 | if not specified then `repo upload` will not function. | 167 | if not specified then `repo upload` will not function. |
143 | 168 | ||
144 | Attribute `revision`: Name of a Git branch (e.g. `master` or | 169 | Attribute `revision`: Name of a Git branch (e.g. `main` or |
145 | `refs/heads/master`). Remotes with their own revision will override | 170 | `refs/heads/main`). Remotes with their own revision will override |
146 | the default revision. | 171 | the default revision. |
147 | 172 | ||
148 | ### Element default | 173 | ### Element default |
@@ -155,11 +180,11 @@ Attribute `remote`: Name of a previously defined remote element. | |||
155 | Project elements lacking a remote attribute of their own will use | 180 | Project elements lacking a remote attribute of their own will use |
156 | this remote. | 181 | this remote. |
157 | 182 | ||
158 | Attribute `revision`: Name of a Git branch (e.g. `master` or | 183 | Attribute `revision`: Name of a Git branch (e.g. `main` or |
159 | `refs/heads/master`). Project elements lacking their own | 184 | `refs/heads/main`). Project elements lacking their own |
160 | revision attribute will use this revision. | 185 | revision attribute will use this revision. |
161 | 186 | ||
162 | Attribute `dest-branch`: Name of a Git branch (e.g. `master`). | 187 | Attribute `dest-branch`: Name of a Git branch (e.g. `main`). |
163 | Project elements not setting their own `dest-branch` will inherit | 188 | Project elements not setting their own `dest-branch` will inherit |
164 | this value. If this value is not set, projects will use `revision` | 189 | this value. If this value is not set, projects will use `revision` |
165 | by default instead. | 190 | by default instead. |
@@ -235,24 +260,37 @@ name will be prefixed by the parent's. | |||
235 | The project name must match the name Gerrit knows, if Gerrit is | 260 | The project name must match the name Gerrit knows, if Gerrit is |
236 | being used for code reviews. | 261 | being used for code reviews. |
237 | 262 | ||
263 | "name" must not be empty, and may not be an absolute path or use "." or ".." | ||
264 | path components. It is always interpreted relative to the remote's fetch | ||
265 | settings, so if a different base path is needed, declare a different remote | ||
266 | with the new settings needed. | ||
267 | These restrictions are not enforced for [Local Manifests]. | ||
268 | |||
238 | Attribute `path`: An optional path relative to the top directory | 269 | Attribute `path`: An optional path relative to the top directory |
239 | of the repo client where the Git working directory for this project | 270 | of the repo client where the Git working directory for this project |
240 | should be placed. If not supplied the project name is used. | 271 | should be placed. If not supplied the project "name" is used. |
241 | If the project has a parent element, its path will be prefixed | 272 | If the project has a parent element, its path will be prefixed |
242 | by the parent's. | 273 | by the parent's. |
243 | 274 | ||
275 | "path" may not be an absolute path or use "." or ".." path components. | ||
276 | These restrictions are not enforced for [Local Manifests]. | ||
277 | |||
278 | If you want to place files into the root of the checkout (e.g. a README or | ||
279 | Makefile or another build script), use the [copyfile] or [linkfile] elements | ||
280 | instead. | ||
281 | |||
244 | Attribute `remote`: Name of a previously defined remote element. | 282 | Attribute `remote`: Name of a previously defined remote element. |
245 | If not supplied the remote given by the default element is used. | 283 | If not supplied the remote given by the default element is used. |
246 | 284 | ||
247 | Attribute `revision`: Name of the Git branch the manifest wants | 285 | Attribute `revision`: Name of the Git branch the manifest wants |
248 | to track for this project. Names can be relative to refs/heads | 286 | to track for this project. Names can be relative to refs/heads |
249 | (e.g. just "master") or absolute (e.g. "refs/heads/master"). | 287 | (e.g. just "main") or absolute (e.g. "refs/heads/main"). |
250 | Tags and/or explicit SHA-1s should work in theory, but have not | 288 | Tags and/or explicit SHA-1s should work in theory, but have not |
251 | been extensively tested. If not supplied the revision given by | 289 | been extensively tested. If not supplied the revision given by |
252 | the remote element is used if applicable, else the default | 290 | the remote element is used if applicable, else the default |
253 | element is used. | 291 | element is used. |
254 | 292 | ||
255 | Attribute `dest-branch`: Name of a Git branch (e.g. `master`). | 293 | Attribute `dest-branch`: Name of a Git branch (e.g. `main`). |
256 | When using `repo upload`, changes will be submitted for code | 294 | When using `repo upload`, changes will be submitted for code |
257 | review on this branch. If unspecified both here and in the | 295 | review on this branch. If unspecified both here and in the |
258 | default element, `revision` is used instead. | 296 | default element, `revision` is used instead. |
@@ -261,7 +299,7 @@ Attribute `groups`: List of groups to which this project belongs, | |||
261 | whitespace or comma separated. All projects belong to the group | 299 | whitespace or comma separated. All projects belong to the group |
262 | "all", and each project automatically belongs to a group of | 300 | "all", and each project automatically belongs to a group of |
263 | its name:`name` and path:`path`. E.g. for | 301 | its name:`name` and path:`path`. E.g. for |
264 | <project name="monkeys" path="barrel-of"/>, that project | 302 | `<project name="monkeys" path="barrel-of"/>`, that project |
265 | definition is implicitly in the following manifest groups: | 303 | definition is implicitly in the following manifest groups: |
266 | default, name:monkeys, and path:barrel-of. If you place a project in the | 304 | default, name:monkeys, and path:barrel-of. If you place a project in the |
267 | group "notdefault", it will not be automatically downloaded by repo. | 305 | group "notdefault", it will not be automatically downloaded by repo. |
@@ -300,21 +338,29 @@ against changes to the original manifest. | |||
300 | Attribute `path`: If specified, limit the change to projects checked out | 338 | Attribute `path`: If specified, limit the change to projects checked out |
301 | at the specified path, rather than all projects with the given name. | 339 | at the specified path, rather than all projects with the given name. |
302 | 340 | ||
341 | Attribute `dest-path`: If specified, a path relative to the top directory | ||
342 | of the repo client where the Git working directory for this project | ||
343 | should be placed. This is used to move a project in the checkout by | ||
344 | overriding the existing `path` setting. | ||
345 | |||
303 | Attribute `groups`: List of additional groups to which this project | 346 | Attribute `groups`: List of additional groups to which this project |
304 | belongs. Same syntax as the corresponding element of `project`. | 347 | belongs. Same syntax as the corresponding element of `project`. |
305 | 348 | ||
306 | Attribute `revision`: If specified, overrides the revision of the original | 349 | Attribute `revision`: If specified, overrides the revision of the original |
307 | project. Same syntax as the corresponding element of `project`. | 350 | project. Same syntax as the corresponding element of `project`. |
308 | 351 | ||
352 | Attribute `remote`: If specified, overrides the remote of the original | ||
353 | project. Same syntax as the corresponding element of `project`. | ||
354 | |||
309 | ### Element annotation | 355 | ### Element annotation |
310 | 356 | ||
311 | Zero or more annotation elements may be specified as children of a | 357 | Zero or more annotation elements may be specified as children of a |
312 | project element. Each element describes a name-value pair that will be | 358 | project or remote element. Each element describes a name-value pair. |
313 | exported into each project's environment during a 'forall' command, | 359 | For projects, this name-value pair will be exported into each project's |
314 | prefixed with REPO__. In addition, there is an optional attribute | 360 | environment during a 'forall' command, prefixed with `REPO__`. In addition, |
315 | "keep" which accepts the case insensitive values "true" (default) or | 361 | there is an optional attribute "keep" which accepts the case insensitive values |
316 | "false". This attribute determines whether or not the annotation will | 362 | "true" (default) or "false". This attribute determines whether or not the |
317 | be kept when exported with the manifest subcommand. | 363 | annotation will be kept when exported with the manifest subcommand. |
318 | 364 | ||
319 | ### Element copyfile | 365 | ### Element copyfile |
320 | 366 | ||
@@ -338,7 +384,7 @@ It's just like copyfile and runs at the same time as copyfile but | |||
338 | instead of copying it creates a symlink. | 384 | instead of copying it creates a symlink. |
339 | 385 | ||
340 | The symlink is created at "dest" (relative to the top of the tree) and | 386 | The symlink is created at "dest" (relative to the top of the tree) and |
341 | points to the path specified by "src". | 387 | points to the path specified by "src" which is a path in the project. |
342 | 388 | ||
343 | Parent directories of "dest" will be automatically created if missing. | 389 | Parent directories of "dest" will be automatically created if missing. |
344 | 390 | ||
@@ -355,6 +401,62 @@ This element is mostly useful in a local manifest file, where | |||
355 | the user can remove a project, and possibly replace it with their | 401 | the user can remove a project, and possibly replace it with their |
356 | own definition. | 402 | own definition. |
357 | 403 | ||
404 | Attribute `optional`: Set to true to ignore remove-project elements with no | ||
405 | matching `project` element. | ||
406 | |||
407 | ### Element repo-hooks | ||
408 | |||
409 | NB: See the [practical documentation](./repo-hooks.md) for using repo hooks. | ||
410 | |||
411 | Only one repo-hooks element may be specified at a time. | ||
412 | Attempting to redefine it will fail to parse. | ||
413 | |||
414 | Attribute `in-project`: The project where the hooks are defined. The value | ||
415 | must match the `name` attribute (**not** the `path` attribute) of a previously | ||
416 | defined `project` element. | ||
417 | |||
418 | Attribute `enabled-list`: List of hooks to use, whitespace or comma separated. | ||
419 | |||
420 | ### Element superproject | ||
421 | |||
422 | *** | ||
423 | *Note*: This is currently a WIP. | ||
424 | *** | ||
425 | |||
426 | NB: See the [git superprojects documentation]( | ||
427 | https://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects) for background | ||
428 | information. | ||
429 | |||
430 | This element is used to specify the URL of the superproject. It has "name" and | ||
431 | "remote" as atrributes. Only "name" is required while the others have | ||
432 | reasonable defaults. At most one superproject may be specified. | ||
433 | Attempting to redefine it will fail to parse. | ||
434 | |||
435 | Attribute `name`: A unique name for the superproject. This attribute has the | ||
436 | same meaning as project's name attribute. See the | ||
437 | [element project](#element-project) for more information. | ||
438 | |||
439 | Attribute `remote`: Name of a previously defined remote element. | ||
440 | If not supplied the remote given by the default element is used. | ||
441 | |||
442 | Attribute `revision`: Name of the Git branch the manifest wants | ||
443 | to track for this superproject. If not supplied the revision given | ||
444 | by the remote element is used if applicable, else the default | ||
445 | element is used. | ||
446 | |||
447 | ### Element contactinfo | ||
448 | |||
449 | *** | ||
450 | *Note*: This is currently a WIP. | ||
451 | *** | ||
452 | |||
453 | This element is used to let manifest authors self-register contact info. | ||
454 | It has "bugurl" as a required atrribute. This element can be repeated, | ||
455 | and any later entries will clobber earlier ones. This would allow manifest | ||
456 | authors who extend manifests to specify their own contact info. | ||
457 | |||
458 | Attribute `bugurl`: The URL to file a bug against the manifest owner. | ||
459 | |||
358 | ### Element include | 460 | ### Element include |
359 | 461 | ||
360 | This element provides the capability of including another manifest | 462 | This element provides the capability of including another manifest |
@@ -364,8 +466,15 @@ target manifest to include - it must be a usable manifest on its own. | |||
364 | Attribute `name`: the manifest to include, specified relative to | 466 | Attribute `name`: the manifest to include, specified relative to |
365 | the manifest repository's root. | 467 | the manifest repository's root. |
366 | 468 | ||
469 | "name" may not be an absolute path or use "." or ".." path components. | ||
470 | These restrictions are not enforced for [Local Manifests]. | ||
471 | |||
472 | Attribute `groups`: List of additional groups to which all projects | ||
473 | in the included manifest belong. This appends and recurses, meaning | ||
474 | all projects in sub-manifests carry all parent include groups. | ||
475 | Same syntax as the corresponding element of `project`. | ||
367 | 476 | ||
368 | ## Local Manifests | 477 | ## Local Manifests {#local-manifests} |
369 | 478 | ||
370 | Additional remotes and projects may be added through local manifest | 479 | Additional remotes and projects may be added through local manifest |
371 | files stored in `$TOP_DIR/.repo/local_manifests/*.xml`. | 480 | files stored in `$TOP_DIR/.repo/local_manifests/*.xml`. |
@@ -392,10 +501,12 @@ these extra projects. | |||
392 | Manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml` will | 501 | Manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml` will |
393 | be loaded in alphabetical order. | 502 | be loaded in alphabetical order. |
394 | 503 | ||
395 | Additional remotes and projects may also be added through a local | 504 | Projects from local manifest files are added into |
396 | manifest, stored in `$TOP_DIR/.repo/local_manifest.xml`. This method | 505 | local::<local manifest filename> group. |
397 | is deprecated in favor of using multiple manifest files as mentioned | 506 | |
398 | above. | 507 | The legacy `$TOP_DIR/.repo/local_manifest.xml` path is no longer supported. |
508 | |||
399 | 509 | ||
400 | If `$TOP_DIR/.repo/local_manifest.xml` exists, it will be loaded before | 510 | [copyfile]: #Element-copyfile |
401 | any manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml`. | 511 | [linkfile]: #Element-linkfile |
512 | [Local Manifests]: #local-manifests | ||
diff --git a/docs/python-support.md b/docs/python-support.md index a5c490a8..3eaaba33 100644 --- a/docs/python-support.md +++ b/docs/python-support.md | |||
@@ -18,13 +18,13 @@ Bugfixes may be added on a best-effort basis or from the community, but largely | |||
18 | no new features will be added, nor is support guaranteed. | 18 | no new features will be added, nor is support guaranteed. |
19 | 19 | ||
20 | Users can select this during `repo init` time via the [repo launcher]. | 20 | Users can select this during `repo init` time via the [repo launcher]. |
21 | Otherwise the default branches (e.g. stable & master) will be used which will | 21 | Otherwise the default branches (e.g. stable & main) will be used which will |
22 | require Python 3. | 22 | require Python 3. |
23 | 23 | ||
24 | This means the [repo launcher] needs to support both Python 2 & Python 3, but | 24 | This means the [repo launcher] needs to support both Python 2 & Python 3, but |
25 | since it doesn't import any other repo code, this shouldn't be too problematic. | 25 | since it doesn't import any other repo code, this shouldn't be too problematic. |
26 | 26 | ||
27 | The master branch will require Python 3.6 at a minimum. | 27 | The main branch will require Python 3.6 at a minimum. |
28 | If the system has an older version of Python 3, then users will have to select | 28 | If the system has an older version of Python 3, then users will have to select |
29 | the legacy Python 2 branch instead. | 29 | the legacy Python 2 branch instead. |
30 | 30 | ||
diff --git a/docs/release-process.md b/docs/release-process.md index 22c2fd19..f71a4110 100644 --- a/docs/release-process.md +++ b/docs/release-process.md | |||
@@ -5,6 +5,37 @@ related topics and flows. | |||
5 | 5 | ||
6 | [TOC] | 6 | [TOC] |
7 | 7 | ||
8 | ## Schedule | ||
9 | |||
10 | There is no specific schedule for when releases are made. | ||
11 | Usually it's more along the lines of "enough minor changes have been merged", | ||
12 | or "there's a known issue the maintainers know should get fixed". | ||
13 | If you find a fix has been merged for an issue important to you, but hasn't been | ||
14 | released after a week or so, feel free to [contact] us to request a new release. | ||
15 | |||
16 | ### Release Freezes {#freeze} | ||
17 | |||
18 | We try to observe a regular schedule for when **not** to release. | ||
19 | If something goes wrong, staff need to be active in order to respond quickly & | ||
20 | effectively. | ||
21 | We also don't want to disrupt non-Google organizations if possible. | ||
22 | |||
23 | We generally follow the rules: | ||
24 | |||
25 | * Release during Mon - Thu, 9:00 - 14:00 [US PT] | ||
26 | * Avoid holidays | ||
27 | * All regular [US holidays] | ||
28 | * Large international ones if possible | ||
29 | * All the various [New Years] | ||
30 | * Jan 1 in Gregorian calendar is the most obvious | ||
31 | * Check for large Lunar New Years too | ||
32 | * Follow the normal [Google production freeze schedule] | ||
33 | |||
34 | [US holidays]: https://en.wikipedia.org/wiki/Federal_holidays_in_the_United_States | ||
35 | [US PT]: https://en.wikipedia.org/wiki/Pacific_Time_Zone | ||
36 | [New Years]: https://en.wikipedia.org/wiki/New_Year | ||
37 | [Google production freeze schedule]: http://goto.google.com/prod-freeze | ||
38 | |||
8 | ## Launcher script | 39 | ## Launcher script |
9 | 40 | ||
10 | The main repo script serves as a standalone program and is often referred to as | 41 | The main repo script serves as a standalone program and is often referred to as |
@@ -49,11 +80,12 @@ control how repo finds updates: | |||
49 | 80 | ||
50 | * `--repo-url`: This tells repo where to clone the full repo project itself. | 81 | * `--repo-url`: This tells repo where to clone the full repo project itself. |
51 | It defaults to the official project (`REPO_URL` in the launcher script). | 82 | It defaults to the official project (`REPO_URL` in the launcher script). |
52 | * `--repo-branch`: This tells repo which branch to use for the full project. | 83 | * `--repo-rev`: This tells repo which branch to use for the full project. |
53 | It defaults to the `stable` branch (`REPO_REV` in the launcher script). | 84 | It defaults to the `stable` branch (`REPO_REV` in the launcher script). |
54 | 85 | ||
55 | Whenever `repo sync` is run, repo will check to see if an update is available. | 86 | Whenever `repo sync` is run, repo will, once every 24 hours, see if an update |
56 | It fetches the latest repo-branch from the repo-url. | 87 | is available. |
88 | It fetches the latest repo-rev from the repo-url. | ||
57 | Then it verifies that the latest commit in the branch has a valid signed tag | 89 | Then it verifies that the latest commit in the branch has a valid signed tag |
58 | using `git tag -v` (which uses gpg). | 90 | using `git tag -v` (which uses gpg). |
59 | If the tag is valid, then repo will update its internal checkout to it. | 91 | If the tag is valid, then repo will update its internal checkout to it. |
@@ -64,9 +96,14 @@ If that tag is valid, then repo will warn and use that commit instead. | |||
64 | 96 | ||
65 | If that tag cannot be verified, it gives up and forces the user to resolve. | 97 | If that tag cannot be verified, it gives up and forces the user to resolve. |
66 | 98 | ||
99 | ### Force an update | ||
100 | |||
101 | The `repo selfupdate` command can be used to force an immediate update. | ||
102 | It is not subject to the 24 hour limitation. | ||
103 | |||
67 | ## Branch management | 104 | ## Branch management |
68 | 105 | ||
69 | All development happens on the `master` branch and should generally be stable. | 106 | All development happens on the `main` branch and should generally be stable. |
70 | 107 | ||
71 | Since the repo launcher defaults to tracking the `stable` branch, it is not | 108 | Since the repo launcher defaults to tracking the `stable` branch, it is not |
72 | normally updated until a new release is available. | 109 | normally updated until a new release is available. |
@@ -81,7 +118,7 @@ For example, when `stable` moves from `v1.10.x` to `v1.11.x`, then the `maint` | |||
81 | branch will be updated from `v1.9.x` to `v1.10.x`. | 118 | branch will be updated from `v1.9.x` to `v1.10.x`. |
82 | 119 | ||
83 | We don't have parallel release branches/series. | 120 | We don't have parallel release branches/series. |
84 | Typically all tags are made against the `master` branch and then pushed to the | 121 | Typically all tags are made against the `main` branch and then pushed to the |
85 | `stable` branch to make it available to the rest of the world. | 122 | `stable` branch to make it available to the rest of the world. |
86 | Since repo doesn't typically see a lot of changes, this tends to be OK. | 123 | Since repo doesn't typically see a lot of changes, this tends to be OK. |
87 | 124 | ||
@@ -89,10 +126,10 @@ Since repo doesn't typically see a lot of changes, this tends to be OK. | |||
89 | 126 | ||
90 | When you want to create a new release, you'll need to select a good version and | 127 | When you want to create a new release, you'll need to select a good version and |
91 | create a signed tag using a key registered in repo itself. | 128 | create a signed tag using a key registered in repo itself. |
92 | Typically we just tag the latest version of the `master` branch. | 129 | Typically we just tag the latest version of the `main` branch. |
93 | The tag could be pushed now, but it won't be used by clients normally (since the | 130 | The tag could be pushed now, but it won't be used by clients normally (since the |
94 | default `repo-branch` setting is `stable`). | 131 | default `repo-rev` setting is `stable`). |
95 | This would allow some early testing on systems who explicitly select `master`. | 132 | This would allow some early testing on systems who explicitly select `main`. |
96 | 133 | ||
97 | ### Creating a signed tag | 134 | ### Creating a signed tag |
98 | 135 | ||
@@ -113,7 +150,7 @@ $ export GNUPGHOME=~/.gnupg/repo/ | |||
113 | $ gpg -K | 150 | $ gpg -K |
114 | 151 | ||
115 | # Pick whatever branch or commit you want to tag. | 152 | # Pick whatever branch or commit you want to tag. |
116 | $ r=master | 153 | $ r=main |
117 | 154 | ||
118 | # Pick the new version. | 155 | # Pick the new version. |
119 | $ t=1.12.10 | 156 | $ t=1.12.10 |
@@ -161,7 +198,144 @@ You can create a short changelog using the command: | |||
161 | $ git log --format="%h (%aN) %s" --no-merges origin/stable..$r | 198 | $ git log --format="%h (%aN) %s" --no-merges origin/stable..$r |
162 | ``` | 199 | ``` |
163 | 200 | ||
164 | 201 | ## Project References | |
202 | |||
203 | Here's a table showing the relationship of major tools, their EOL dates, and | ||
204 | their status in Ubuntu & Debian. | ||
205 | Those distros tend to be good indicators of how long we need to support things. | ||
206 | |||
207 | Things in bold indicate stuff to take note of, but does not guarantee that we | ||
208 | still support them. | ||
209 | Things in italics are things we used to care about but probably don't anymore. | ||
210 | |||
211 | | Date | EOL | [Git][rel-g] | [Python][rel-p] | [SSH][rel-o] | [Ubuntu][rel-u] / [Debian][rel-d] | Git | Python | SSH | | ||
212 | |:--------:|:------------:|:------------:|:---------------:|:------------:|-----------------------------------|-----|--------|-----| | ||
213 | | Apr 2008 | | | | 5.0 | | ||
214 | | Jun 2008 | | | | 5.1 | | ||
215 | | Oct 2008 | *Oct 2013* | | 2.6.0 | | *10.04 Lucid* - 10.10 Maverick / *Squeeze* | | ||
216 | | Dec 2008 | *Feb 2009* | | 3.0.0 | | ||
217 | | Feb 2009 | | | | 5.2 | | ||
218 | | Feb 2009 | *Mar 2012* | | | | Debian 5 Lenny | 1.5.6.5 | 2.5.2 | | ||
219 | | Jun 2009 | *Jun 2016* | | 3.1.0 | | *10.04 Lucid* - 10.10 Maverick / *Squeeze* | | ||
220 | | Sep 2009 | | | | 5.3 | *10.04 Lucid* | | ||
221 | | Feb 2010 | *Oct 2012* | 1.7.0 | | | *10.04 Lucid* - *12.04 Precise* - 12.10 Quantal | | ||
222 | | Mar 2010 | | | | 5.4 | | ||
223 | | Apr 2010 | | | | 5.5 | 10.10 Maverick | | ||
224 | | Apr 2010 | *Apr 2015* | | | | *10.04 Lucid* | 1.7.0.4 | 2.6.5 3.1.2 | 5.3 | | ||
225 | | Jul 2010 | *Dec 2019* | | *2.7.0* | | 11.04 Natty - *<current>* | | ||
226 | | Aug 2010 | | | | 5.6 | | ||
227 | | Oct 2010 | | | | | 10.10 Maverick | 1.7.1 | 2.6.6 3.1.3 | 5.5 | | ||
228 | | Jan 2011 | | | | 5.7 | | ||
229 | | Feb 2011 | | | | 5.8 | 11.04 Natty | | ||
230 | | Feb 2011 | *Feb 2016* | | | | Debian 6 Squeeze | 1.7.2.5 | 2.6.6 3.1.3 | | ||
231 | | Apr 2011 | | | | | 11.04 Natty | 1.7.4 | 2.7.1 3.2.0 | 5.8 | | ||
232 | | Sep 2011 | | | | 5.9 | *12.04 Precise* | | ||
233 | | Oct 2011 | *Feb 2016* | | 3.2.0 | | 11.04 Natty - 12.10 Quantal | | ||
234 | | Oct 2011 | | | | | 11.10 Ocelot | 1.7.5.4 | 2.7.2 3.2.2 | 5.8 | | ||
235 | | Apr 2012 | | | | 6.0 | 12.10 Quantal | | ||
236 | | Apr 2012 | *Apr 2019* | | | | *12.04 Precise* | 1.7.9.5 | 2.7.3 3.2.3 | 5.9 | | ||
237 | | Aug 2012 | | | | 6.1 | 13.04 Raring | | ||
238 | | Sep 2012 | *Sep 2017* | | 3.3.0 | | 13.04 Raring - 13.10 Saucy | | ||
239 | | Oct 2012 | *Dec 2014* | 1.8.0 | | | 13.04 Raring - 13.10 Saucy | | ||
240 | | Oct 2012 | | | | | 12.10 Quantal | 1.7.10.4 | 2.7.3 3.2.3 | 6.0 | | ||
241 | | Mar 2013 | | | | 6.2 | 13.10 Saucy | | ||
242 | | Apr 2013 | | | | | 13.04 Raring | 1.8.1.2 | 2.7.4 3.3.1 | 6.1 | | ||
243 | | May 2013 | *May 2018* | | | | Debian 7 Wheezy | 1.7.10.4 | 2.7.3 3.2.3 | | ||
244 | | Sep 2013 | | | | 6.3 | | ||
245 | | Oct 2013 | | | | | 13.10 Saucy | 1.8.3.2 | 2.7.5 3.3.2 | 6.2 | | ||
246 | | Nov 2013 | | | | 6.4 | | ||
247 | | Jan 2014 | | | | 6.5 | | ||
248 | | Feb 2014 | *Dec 2014* | **1.9.0** | | | *14.04 Trusty* | | ||
249 | | Mar 2014 | *Mar 2019* | | *3.4.0* | | *14.04 Trusty* - 15.10 Wily / *Jessie* | | ||
250 | | Mar 2014 | | | | 6.6 | *14.04 Trusty* - 14.10 Utopic | | ||
251 | | Apr 2014 | *Apr 2022* | | | | *14.04 Trusty* | 1.9.1 | 2.7.5 3.4.0 | 6.6 | | ||
252 | | May 2014 | *Dec 2014* | 2.0.0 | | ||
253 | | Aug 2014 | *Dec 2014* | *2.1.0* | | | 14.10 Utopic - 15.04 Vivid / *Jessie* | | ||
254 | | Oct 2014 | | | | 6.7 | 15.04 Vivid | | ||
255 | | Oct 2014 | | | | | 14.10 Utopic | 2.1.0 | 2.7.8 3.4.2 | 6.6 | | ||
256 | | Nov 2014 | *Sep 2015* | 2.2.0 | | ||
257 | | Feb 2015 | *Sep 2015* | 2.3.0 | | ||
258 | | Mar 2015 | | | | 6.8 | | ||
259 | | Apr 2015 | *May 2017* | 2.4.0 | | ||
260 | | Apr 2015 | *Jun 2020* | | | | *Debian 8 Jessie* | 2.1.4 | 2.7.9 3.4.2 | | ||
261 | | Apr 2015 | | | | | 15.04 Vivid | 2.1.4 | 2.7.9 3.4.3 | 6.7 | | ||
262 | | Jul 2015 | *May 2017* | 2.5.0 | | | 15.10 Wily | | ||
263 | | Jul 2015 | | | | 6.9 | 15.10 Wily | | ||
264 | | Aug 2015 | | | | 7.0 | | ||
265 | | Aug 2015 | | | | 7.1 | | ||
266 | | Sep 2015 | *May 2017* | 2.6.0 | | ||
267 | | Sep 2015 | *Sep 2020* | | *3.5.0* | | *16.04 Xenial* - 17.04 Zesty / *Stretch* | | ||
268 | | Oct 2015 | | | | | 15.10 Wily | 2.5.0 | 2.7.9 3.4.3 | 6.9 | | ||
269 | | Jan 2016 | *Jul 2017* | *2.7.0* | | | *16.04 Xenial* | | ||
270 | | Feb 2016 | | | | 7.2 | *16.04 Xenial* | | ||
271 | | Mar 2016 | *Jul 2017* | 2.8.0 | | ||
272 | | Apr 2016 | *Apr 2024* | | | | *16.04 Xenial* | 2.7.4 | 2.7.11 3.5.1 | 7.2 | | ||
273 | | Jun 2016 | *Jul 2017* | 2.9.0 | | | 16.10 Yakkety | | ||
274 | | Jul 2016 | | | | 7.3 | 16.10 Yakkety | | ||
275 | | Sep 2016 | *Sep 2017* | 2.10.0 | | ||
276 | | Oct 2016 | | | | | 16.10 Yakkety | 2.9.3 | 2.7.11 3.5.1 | 7.3 | | ||
277 | | Nov 2016 | *Sep 2017* | *2.11.0* | | | 17.04 Zesty / *Stretch* | | ||
278 | | Dec 2016 | **Dec 2021** | | **3.6.0** | | 17.10 Artful - **18.04 Bionic** - 18.10 Cosmic | | ||
279 | | Dec 2016 | | | | 7.4 | 17.04 Zesty / *Debian 9 Stretch* | | ||
280 | | Feb 2017 | *Sep 2017* | 2.12.0 | | ||
281 | | Mar 2017 | | | | 7.5 | 17.10 Artful | | ||
282 | | Apr 2017 | | | | | 17.04 Zesty | 2.11.0 | 2.7.13 3.5.3 | 7.4 | | ||
283 | | May 2017 | *May 2018* | 2.13.0 | | ||
284 | | Jun 2017 | *Jun 2022* | | | | *Debian 9 Stretch* | 2.11.0 | 2.7.13 3.5.3 | 7.4 | | ||
285 | | Aug 2017 | *Dec 2019* | 2.14.0 | | | 17.10 Artful | | ||
286 | | Oct 2017 | *Dec 2019* | 2.15.0 | | ||
287 | | Oct 2017 | | | | 7.6 | **18.04 Bionic** | | ||
288 | | Oct 2017 | | | | | 17.10 Artful | 2.14.1 | 2.7.14 3.6.3 | 7.5 | | ||
289 | | Jan 2018 | *Dec 2019* | 2.16.0 | | ||
290 | | Apr 2018 | *Mar 2021* | **2.17.0** | | | **18.04 Bionic** | | ||
291 | | Apr 2018 | | | | 7.7 | 18.10 Cosmic | | ||
292 | | Apr 2018 | **Apr 2028** | | | | **18.04 Bionic** | 2.17.0 | 2.7.15 3.6.5 | 7.6 | | ||
293 | | Jun 2018 | *Mar 2021* | 2.18.0 | | ||
294 | | Jun 2018 | **Jun 2023** | | 3.7.0 | | 19.04 Disco - **20.04 Focal** / **Buster** | | ||
295 | | Aug 2018 | | | | 7.8 | | ||
296 | | Sep 2018 | *Mar 2021* | 2.19.0 | | | 18.10 Cosmic | | ||
297 | | Oct 2018 | | | | 7.9 | 19.04 Disco / **Buster** | | ||
298 | | Oct 2018 | | | | | 18.10 Cosmic | 2.19.1 | 2.7.15 3.6.6 | 7.7 | | ||
299 | | Dec 2018 | *Mar 2021* | **2.20.0** | | | 19.04 Disco - 19.10 Eoan / **Buster** | | ||
300 | | Feb 2019 | *Mar 2021* | 2.21.0 | | ||
301 | | Apr 2019 | | | | 8.0 | 19.10 Eoan | | ||
302 | | Apr 2019 | | | | | 19.04 Disco | 2.20.1 | 2.7.16 3.7.3 | 7.9 | | ||
303 | | Jun 2019 | | 2.22.0 | | ||
304 | | Jul 2019 | **Jul 2024** | | | | **Debian 10 Buster** | 2.20.1 | 2.7.16 3.7.3 | 7.9 | | ||
305 | | Aug 2019 | *Mar 2021* | 2.23.0 | | ||
306 | | Oct 2019 | **Oct 2024** | | 3.8.0 | | **20.04 Focal** - 20.10 Groovy | | ||
307 | | Oct 2019 | | | | 8.1 | | ||
308 | | Oct 2019 | | | | | 19.10 Eoan | 2.20.1 | 2.7.17 3.7.5 | 8.0 | | ||
309 | | Nov 2019 | *Mar 2021* | 2.24.0 | | ||
310 | | Jan 2020 | *Mar 2021* | 2.25.0 | | | **20.04 Focal** | | ||
311 | | Feb 2020 | | | | 8.2 | **20.04 Focal** | | ||
312 | | Mar 2020 | *Mar 2021* | 2.26.0 | | ||
313 | | Apr 2020 | **Apr 2030** | | | | **20.04 Focal** | 2.25.1 | 2.7.17 3.8.2 | 8.2 | | ||
314 | | May 2020 | *Mar 2021* | 2.27.0 | | | 20.10 Groovy | | ||
315 | | May 2020 | | | | 8.3 | | ||
316 | | Jul 2020 | *Mar 2021* | 2.28.0 | | ||
317 | | Sep 2020 | | | | 8.4 | 21.04 Hirsute / **Bullseye** | | ||
318 | | Oct 2020 | *Mar 2021* | 2.29.0 | | ||
319 | | Oct 2020 | | | | | 20.10 Groovy | 2.27.0 | 2.7.18 3.8.6 | 8.3 | | ||
320 | | Oct 2020 | **Oct 2025** | | 3.9.0 | | 21.04 Hirsute / **Bullseye** | | ||
321 | | Dec 2020 | *Mar 2021* | 2.30.0 | | | 21.04 Hirsute / **Bullseye** | | ||
322 | | Mar 2021 | | 2.31.0 | | ||
323 | | Mar 2021 | | | | 8.5 | | ||
324 | | Apr 2021 | | | | 8.6 | | ||
325 | | Apr 2021 | *Jan 2022* | | | | 21.04 Hirsute | 2.30.2 | 2.7.18 3.9.4 | 8.4 | | ||
326 | | Jun 2021 | | 2.32.0 | | ||
327 | | Aug 2021 | | 2.33.0 | | ||
328 | | Aug 2021 | | | | 8.7 | | ||
329 | | Aug 2021 | **Aug 2026** | | | | **Debian 11 Bullseye** | 2.30.2 | 2.7.18 3.9.2 | 8.4 | | ||
330 | | **Date** | **EOL** | **[Git][rel-g]** | **[Python][rel-p]** | **[SSH][rel-o]** | **[Ubuntu][rel-u] / [Debian][rel-d]** | **Git** | **Python** | **SSH** | | ||
331 | |||
332 | |||
333 | [contact]: ../README.md#contact | ||
334 | [rel-d]: https://en.wikipedia.org/wiki/Debian_version_history | ||
335 | [rel-g]: https://en.wikipedia.org/wiki/Git#Releases | ||
336 | [rel-o]: https://www.openssh.com/releasenotes.html | ||
337 | [rel-p]: https://en.wikipedia.org/wiki/History_of_Python#Table_of_versions | ||
338 | [rel-u]: https://en.wikipedia.org/wiki/Ubuntu_version_history#Table_of_versions | ||
165 | [example announcement]: https://groups.google.com/d/topic/repo-discuss/UGBNismWo1M/discussion | 339 | [example announcement]: https://groups.google.com/d/topic/repo-discuss/UGBNismWo1M/discussion |
166 | [repo-discuss@googlegroups.com]: https://groups.google.com/forum/#!forum/repo-discuss | 340 | [repo-discuss@googlegroups.com]: https://groups.google.com/forum/#!forum/repo-discuss |
167 | [go/repo-release]: https://goto.google.com/repo-release | 341 | [go/repo-release]: https://goto.google.com/repo-release |
diff --git a/docs/repo-hooks.md b/docs/repo-hooks.md index 7c37c30e..cbb1aac7 100644 --- a/docs/repo-hooks.md +++ b/docs/repo-hooks.md | |||
@@ -27,7 +27,7 @@ repohooks project is updated and a hook is triggered. | |||
27 | For the full syntax, see the [repo manifest format](./manifest-format.md). | 27 | For the full syntax, see the [repo manifest format](./manifest-format.md). |
28 | 28 | ||
29 | Here's a short example from | 29 | Here's a short example from |
30 | [Android](https://android.googlesource.com/platform/manifest/+/master/default.xml). | 30 | [Android](https://android.googlesource.com/platform/manifest/+/HEAD/default.xml). |
31 | The `<project>` line checks out the repohooks git repo to the local | 31 | The `<project>` line checks out the repohooks git repo to the local |
32 | `tools/repohooks/` path. The `<repo-hooks>` line says to look in the project | 32 | `tools/repohooks/` path. The `<repo-hooks>` line says to look in the project |
33 | with the name `platform/tools/repohooks` for hooks to run during the | 33 | with the name `platform/tools/repohooks` for hooks to run during the |
diff --git a/docs/windows.md b/docs/windows.md index 80912964..4282bebf 100644 --- a/docs/windows.md +++ b/docs/windows.md | |||
@@ -19,7 +19,33 @@ also due to most developers not using Windows. | |||
19 | We will never add code specific to older versions of Windows. | 19 | We will never add code specific to older versions of Windows. |
20 | It might work, but it most likely won't, so please don't bother asking. | 20 | It might work, but it most likely won't, so please don't bother asking. |
21 | 21 | ||
22 | ## Symlinks | 22 | ## Git worktrees |
23 | |||
24 | *** note | ||
25 | **Warning**: Repo's support for Git worktrees is new & experimental. | ||
26 | Please report any bugs and be sure to maintain backups! | ||
27 | *** | ||
28 | |||
29 | The Repo 2.4 release introduced support for [Git worktrees][git-worktree]. | ||
30 | You don't have to worry about or understand this particular feature, so don't | ||
31 | worry if this section of the Git manual is particularly impenetrable. | ||
32 | |||
33 | The salient point is that Git worktrees allow Repo to create repo client | ||
34 | checkouts that do not require symlinks at all under Windows. | ||
35 | This means users no longer need Administrator access to sync code. | ||
36 | |||
37 | Simply use `--worktree` when running `repo init` to opt in. | ||
38 | |||
39 | This does not effect specific Git repositories that use symlinks themselves. | ||
40 | |||
41 | [git-worktree]: https://git-scm.com/docs/git-worktree | ||
42 | |||
43 | ## Symlinks by default | ||
44 | |||
45 | *** note | ||
46 | **NB**: This section applies to the default Repo behavior which does not use | ||
47 | Git worktrees (see the previous section for more info). | ||
48 | *** | ||
23 | 49 | ||
24 | Repo will use symlinks heavily internally. | 50 | Repo will use symlinks heavily internally. |
25 | On *NIX platforms, this isn't an issue, but Windows makes it a bit difficult. | 51 | On *NIX platforms, this isn't an issue, but Windows makes it a bit difficult. |
@@ -62,9 +88,8 @@ This also helps `tar` unpack symlinks, so that's nice. | |||
62 | 88 | ||
63 | ## Python | 89 | ## Python |
64 | 90 | ||
65 | You should make sure to be running Python 3.6 or newer under Windows. | 91 | Python 3.6 or newer is required. |
66 | Python 2 might work, but due to already limited platform testing, you should | 92 | Python 2 is known to be broken when running under Windows. |
67 | only run newer Python versions. | ||
68 | See our [Python Support](./python-support.md) document for more details. | 93 | See our [Python Support](./python-support.md) document for more details. |
69 | 94 | ||
70 | You can grab the latest Windows installer here:<br> | 95 | You can grab the latest Windows installer here:<br> |