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