blob: edcb28cbd086b27c384fc56d19ca3f28810aeeff [file] [log] [blame] [view]
Mike Frysingerb8f7bb02018-10-10 01:05:11 -04001# repo Manifest Format
Shawn O. Pearce3e548192008-11-04 11:19:36 -08002
3A repo manifest describes the structure of a repo client; that is
4the directories that are visible and where they should be obtained
5from with git.
6
7The basic structure of a manifest is a bare Git repository holding
Mike Frysinger3891b752018-10-05 19:26:15 -04008a single `default.xml` XML file in the top level directory.
Shawn O. Pearce3e548192008-11-04 11:19:36 -08009
10Manifests are inherently version controlled, since they are kept
11within a Git repository. Updates to manifests are automatically
12obtained by clients during `repo sync`.
13
Mike Frysinger3891b752018-10-05 19:26:15 -040014[TOC]
15
Shawn O. Pearce3e548192008-11-04 11:19:36 -080016
Mike Frysingerb8f7bb02018-10-10 01:05:11 -040017## XML File Format
Shawn O. Pearce3e548192008-11-04 11:19:36 -080018
Mike Frysinger3891b752018-10-05 19:26:15 -040019A manifest XML file (e.g. `default.xml`) roughly conforms to the
Shawn O. Pearce3e548192008-11-04 11:19:36 -080020following DTD:
21
Mike Frysinger3891b752018-10-05 19:26:15 -040022```xml
23
Mike Frysinger0888a082021-04-13 20:22:01 -040024
Mike Frysinger3891b752018-10-05 19:26:15 -040025
26 remote*,
27 default?,
28 manifest-server?,
LaMont Jonescc879a92021-11-18 22:40:18 +000029 submanifest*?,
Mike Frysinger3891b752018-10-05 19:26:15 -040030 remove-project*,
31 project*,
32 extend-project*,
33 repo-hooks?,
Raman Tenneti1bb4fb22021-01-07 16:50:45 -080034 superproject?,
Raman Tenneti1c3f57e2021-05-04 12:32:13 -070035 contactinfo?,
Mike Frysinger3891b752018-10-05 19:26:15 -040036 include*)>
Chirayu Desaid5a5b192013-11-21 19:15:30 +053037
Mike Frysinger3891b752018-10-05 19:26:15 -040038
Chirayu Desaid5a5b192013-11-21 19:15:30 +053039
Jack Neus6ea0cae2021-07-20 20:52:33 +000040
Mike Frysinger3891b752018-10-05 19:26:15 -040041
42
43
44
45
46
Chirayu Desaid5a5b192013-11-21 19:15:30 +053047
Mike Frysinger3891b752018-10-05 19:26:15 -040048
49
50
51
52
53
54
55
56
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -070057
Mike Frysinger3891b752018-10-05 19:26:15 -040058
59
Chirayu Desaid5a5b192013-11-21 19:15:30 +053060
LaMont Jonescc879a92021-11-18 22:40:18 +000061
62
63
64
65
66
67
68
LaMont Jones501733c2022-04-20 16:42:32 +000069
LaMont Jonescc879a92021-11-18 22:40:18 +000070
Mike Frysinger3891b752018-10-05 19:26:15 -040071
72 project*,
73 copyfile*,
74 linkfile*)>
75
76
77
78
79
80
81
82
Kyunam Jo01019d92019-03-18 13:30:58 +090083
Mike Frysinger3891b752018-10-05 19:26:15 -040084
85
86
James W. Mills24c13082012-04-12 15:04:13 -050087
Mike Frysinger3891b752018-10-05 19:26:15 -040088
89
90
91
Chirayu Desaid5a5b192013-11-21 19:15:30 +053092
Mike Frysinger3891b752018-10-05 19:26:15 -040093
94
95
Ruslan Bilovol54527e72015-09-08 13:11:23 +030096
Mike Frysinger3891b752018-10-05 19:26:15 -040097
98
99
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300100
Mike Frysinger3891b752018-10-05 19:26:15 -0400101
102
103
Michael Kelly37c21c22020-06-13 02:10:40 -0700104
Mike Frysinger3891b752018-10-05 19:26:15 -0400105
106
Kyunam Jobd0aae92020-02-04 11:38:53 +0900107
Erik Elmeke4cdfdb72022-09-09 17:13:17 +0200108
109
Josh Triplett884a3872014-06-12 14:57:29 -0700110
Mike Frysinger3891b752018-10-05 19:26:15 -0400111
112
Michael Kelly06da9982021-06-30 01:58:28 -0700113
Doug Anderson37282b42011-03-04 11:54:18 -0800114
Mike Frysinger3891b752018-10-05 19:26:15 -0400115
116
117
Brian Harring26448742011-04-28 05:04:41 -0700118
Raman Tenneti1c3f57e2021-05-04 12:32:13 -0700119
Xin Lie0b16a22021-09-26 23:20:32 -0700120
121
122
Raman Tenneti1bb4fb22021-01-07 16:50:45 -0800123
Raman Tenneti1c3f57e2021-05-04 12:32:13 -0700124
125
126
Mike Frysinger3891b752018-10-05 19:26:15 -0400127
Shuchuan Zeng3e3340d2023-04-18 10:36:50 +0800128
129
130
Mike Frysinger3891b752018-10-05 19:26:15 -0400131]>
132```
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800133
Raman Tenneti48b2d102021-01-11 12:18:47 -0800134For compatibility purposes across repo releases, all unknown elements are
135silently ignored. However, repo reserves all possible names for itself for
136future use. If you want to use custom elements, the `x-*` namespace is
137reserved for that purpose, and repo guarantees to never allocate any
138corresponding names.
139
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800140A description of the elements and their attributes follows.
141
142
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400143### Element manifest
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800144
145The root element of the file.
146
Mike Frysinger51e39d52020-12-04 05:32:06 -0500147### Element notice
148
149Arbitrary text that is displayed to users whenever `repo sync` finishes.
150The content is simply passed through as it exists in the manifest.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800151
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400152### Element remote
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800153
154One or more remote elements may be specified. Each remote element
155specifies a Git URL shared by one or more projects and (optionally)
156the Gerrit review server those projects upload changes through.
157
158Attribute `name`: A short name unique to this manifest file. The
159name specified here is used as the remote name in each project's
160.git/config, and is therefore automatically available to commands
161like `git fetch`, `git remote`, `git pull` and `git push`.
162
Yestin Sunb292b982012-07-02 07:32:50 -0700163Attribute `alias`: The alias, if specified, is used to override
164`name` to be set as the remote name in each project's .git/config.
165Its value can be duplicated while attribute `name` has to be unique
166in the manifest file. This helps each project to be able to have
167same remote name which actually points to different remote url.
168
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800169Attribute `fetch`: The Git URL prefix for all projects which use
170this remote. Each project's name is appended to this prefix to
171form the actual URL used to clone the project.
172
Steve Raed6480452016-08-10 15:00:00 -0700173Attribute `pushurl`: The Git "push" URL prefix for all projects
174which use this remote. Each project's name is appended to this
175prefix to form the actual URL used to "git push" the project.
176This attribute is optional; if not specified then "git push"
177will use the same URL as the `fetch` attribute.
178
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800179Attribute `review`: Hostname of the Gerrit server where reviews
180are uploaded to by `repo upload`. This attribute is optional;
181if not specified then `repo upload` will not function.
182
Mike Frysinger6e89c962020-11-15 18:42:26 -0500183Attribute `revision`: Name of a Git branch (e.g. `main` or
184`refs/heads/main`). Remotes with their own revision will override
Anthony King36ea2fb2014-05-06 11:54:01 +0100185the default revision.
186
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400187### Element default
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800188
189At most one default element may be specified. Its remote and
190revision attributes are used when a project element does not
191specify its own remote or revision attribute.
192
193Attribute `remote`: Name of a previously defined remote element.
194Project elements lacking a remote attribute of their own will use
195this remote.
196
Mike Frysinger6e89c962020-11-15 18:42:26 -0500197Attribute `revision`: Name of a Git branch (e.g. `main` or
198`refs/heads/main`). Project elements lacking their own
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800199revision attribute will use this revision.
200
Mike Frysinger6e89c962020-11-15 18:42:26 -0500201Attribute `dest-branch`: Name of a Git branch (e.g. `main`).
Bryan Jacobsf609f912013-05-06 13:36:24 -0400202Project elements not setting their own `dest-branch` will inherit
203this value. If this value is not set, projects will use `revision`
204by default instead.
205
Nasser Grainawida403412018-05-04 12:53:29 -0600206Attribute `upstream`: Name of the Git ref in which a sha1
207can be found. Used when syncing a revision locked manifest in
208-c mode to avoid having to sync the entire ref space. Project elements
209not setting their own `upstream` will inherit this value.
210
Mani Chandel7a91d512014-07-24 16:27:08 +0530211Attribute `sync-j`: Number of parallel jobs to use when synching.
David Pursehouse4e465202012-11-27 22:20:10 +0900212
Mani Chandel7a91d512014-07-24 16:27:08 +0530213Attribute `sync-c`: Set to true to only sync the given Git
David Pursehouse4e465202012-11-27 22:20:10 +0900214branch (specified in the `revision` attribute) rather than the
Mani Chandel7a91d512014-07-24 16:27:08 +0530215whole ref space. Project elements lacking a sync-c element of
David Pursehouse4e465202012-11-27 22:20:10 +0900216their own will use this value.
217
Mani Chandel7a91d512014-07-24 16:27:08 +0530218Attribute `sync-s`: Set to true to also sync sub-projects.
David Pursehouse4e465202012-11-27 22:20:10 +0900219
YOUNG HO CHAa32c92c2018-02-14 16:57:31 +0900220Attribute `sync-tags`: Set to false to only sync the given Git
221branch (specified in the `revision` attribute) rather than
222the other ref tags.
223
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800224
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400225### Element manifest-server
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700226
227At most one manifest-server may be specified. The url attribute
228is used to specify the URL of a manifest server, which is an
David Pursehouse9a27d012012-08-21 14:23:49 +0900229XML RPC service.
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700230
David Pursehouse9a27d012012-08-21 14:23:49 +0900231The manifest server should implement the following RPC methods:
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700232
Mike Frysinger3891b752018-10-05 19:26:15 -0400233 GetApprovedManifest(branch, target)
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700234
David Pursehouse9a27d012012-08-21 14:23:49 +0900235Return a manifest in which each project is pegged to a known good revision
David Pursehousee8688412016-04-13 17:55:34 +0900236for the current branch and target. This is used by repo sync when the
237--smart-sync option is given.
David Pursehouse9a27d012012-08-21 14:23:49 +0900238
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700239The target to use is defined by environment variables TARGET_PRODUCT
240and TARGET_BUILD_VARIANT. These variables are used to create a string
241of the form $TARGET_PRODUCT-$TARGET_BUILD_VARIANT, e.g. passion-userdebug.
242If one of those variables or both are not present, the program will call
David Pursehousedaa851f2012-08-21 13:52:18 +0900243GetApprovedManifest without the target parameter and the manifest server
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700244should choose a reasonable default target.
245
Mike Frysinger3891b752018-10-05 19:26:15 -0400246 GetManifest(tag)
David Pursehouse9a27d012012-08-21 14:23:49 +0900247
248Return a manifest in which each project is pegged to the revision at
David Pursehousee8688412016-04-13 17:55:34 +0900249the specified tag. This is used by repo sync when the --smart-tag option
250is given.
David Pursehouse9a27d012012-08-21 14:23:49 +0900251
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700252
LaMont Jonescc879a92021-11-18 22:40:18 +0000253### Element submanifest
254
255One or more submanifest elements may be specified. Each element describes a
256single manifest to be checked out as a child.
257
258Attribute `name`: A unique name (within the current (sub)manifest) for this
259submanifest. It acts as a default for `revision` below. The same name can be
260used for submanifests with different parent (sub)manifests.
261
262Attribute `remote`: Name of a previously defined remote element.
263If not supplied the remote given by the default element is used.
264
265Attribute `project`: The manifest project name. The project's name is appended
266onto its remote's fetch URL to generate the actual URL to configure the Git
267remote with. The URL gets formed as:
268
269 ${remote_fetch}/${project_name}.git
270
271where ${remote_fetch} is the remote's fetch attribute and
272${project_name} is the project's name attribute. The suffix ".git"
273is always appended as repo assumes the upstream is a forest of
274bare Git repositories. If the project has a parent element, its
275name will be prefixed by the parent's.
276
277The project name must match the name Gerrit knows, if Gerrit is
278being used for code reviews.
279
280`project` must not be empty, and may not be an absolute path or use "." or ".."
281path components. It is always interpreted relative to the remote's fetch
282settings, so if a different base path is needed, declare a different remote
283with the new settings needed.
284
285If not supplied the remote and project for this manifest will be used: `remote`
286cannot be supplied.
287
LaMont Jonesb308db12022-02-25 17:05:21 +0000288Projects from a submanifest and its submanifests are added to the
289submanifest::path: group.
290
LaMont Jonescc879a92021-11-18 22:40:18 +0000291Attribute `manifest-name`: The manifest filename in the manifest project. If
292not supplied, `default.xml` is used.
293
294Attribute `revision`: Name of a Git branch (e.g. "main" or "refs/heads/main"),
295tag (e.g. "refs/tags/stable"), or a commit hash. If not supplied, `name` is
296used.
297
298Attribute `path`: An optional path relative to the top directory
299of the repo client where the submanifest repo client top directory
300should be placed. If not supplied, `revision` is used.
301
302`path` may not be an absolute path or use "." or ".." path components.
303
304Attribute `groups`: List of additional groups to which all projects
305in the included submanifest belong. This appends and recurses, meaning
306all projects in submanifests carry all parent submanifest groups.
307Same syntax as the corresponding element of `project`.
308
LaMont Jones501733c2022-04-20 16:42:32 +0000309Attribute `default-groups`: The list of manifest groups to sync if no
310`--groups=` parameter was specified at init. When that list is empty, use this
311list instead of "default" as the list of groups to sync.
LaMont Jonescc879a92021-11-18 22:40:18 +0000312
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400313### Element project
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800314
315One or more project elements may be specified. Each element
316describes a single Git repository to be cloned into the repo
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800317client workspace. You may specify Git-submodules by creating a
318nested project. Git-submodules will be automatically
319recognized and inherit their parent's attributes, but those
320may be overridden by an explicitly specified project element.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800321
322Attribute `name`: A unique name for this project. The project's
323name is appended onto its remote's fetch URL to generate the actual
324URL to configure the Git remote with. The URL gets formed as:
325
Mike Frysinger3891b752018-10-05 19:26:15 -0400326 ${remote_fetch}/${project_name}.git
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800327
328where ${remote_fetch} is the remote's fetch attribute and
329${project_name} is the project's name attribute. The suffix ".git"
David Pursehousedaa851f2012-08-21 13:52:18 +0900330is always appended as repo assumes the upstream is a forest of
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800331bare Git repositories. If the project has a parent element, its
332name will be prefixed by the parent's.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800333
334The project name must match the name Gerrit knows, if Gerrit is
335being used for code reviews.
336
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500337"name" must not be empty, and may not be an absolute path or use "." or ".."
338path components. It is always interpreted relative to the remote's fetch
339settings, so if a different base path is needed, declare a different remote
340with the new settings needed.
341These restrictions are not enforced for [Local Manifests].
342
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800343Attribute `path`: An optional path relative to the top directory
344of the repo client where the Git working directory for this project
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500345should be placed. If not supplied the project "name" is used.
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800346If the project has a parent element, its path will be prefixed
347by the parent's.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800348
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500349"path" may not be an absolute path or use "." or ".." path components.
350These restrictions are not enforced for [Local Manifests].
351
352If you want to place files into the root of the checkout (e.g. a README or
353Makefile or another build script), use the [copyfile] or [linkfile] elements
354instead.
355
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800356Attribute `remote`: Name of a previously defined remote element.
357If not supplied the remote given by the default element is used.
358
359Attribute `revision`: Name of the Git branch the manifest wants
360to track for this project. Names can be relative to refs/heads
Mike Frysinger6e89c962020-11-15 18:42:26 -0500361(e.g. just "main") or absolute (e.g. "refs/heads/main").
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800362Tags and/or explicit SHA-1s should work in theory, but have not
363been extensively tested. If not supplied the revision given by
Anthony King36ea2fb2014-05-06 11:54:01 +0100364the remote element is used if applicable, else the default
365element is used.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800366
Mike Frysinger6e89c962020-11-15 18:42:26 -0500367Attribute `dest-branch`: Name of a Git branch (e.g. `main`).
Bryan Jacobsf609f912013-05-06 13:36:24 -0400368When using `repo upload`, changes will be submitted for code
369review on this branch. If unspecified both here and in the
370default element, `revision` is used instead.
371
Colin Cross5acde752012-03-28 20:15:45 -0700372Attribute `groups`: List of groups to which this project belongs,
Conley Owens971de8e2012-04-16 10:36:08 -0700373whitespace or comma separated. All projects belong to the group
Conley Owensbb1b5f52012-08-13 13:11:18 -0700374"all", and each project automatically belongs to a group of
375its name:`name` and path:`path`. E.g. for
Jashank Jeremy97477472020-12-12 20:50:22 +1100376``, that project
Brian Harring7da13142012-06-15 02:24:20 -0700377definition is implicitly in the following manifest groups:
Conley Owensbb1b5f52012-08-13 13:11:18 -0700378default, name:monkeys, and path:barrel-of. If you place a project in the
379group "notdefault", it will not be automatically downloaded by repo.
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800380If the project has a parent element, the `name` and `path` here
381are the prefixed ones.
Colin Cross5acde752012-03-28 20:15:45 -0700382
Mani Chandel7a91d512014-07-24 16:27:08 +0530383Attribute `sync-c`: Set to true to only sync the given Git
David Pursehouse4e465202012-11-27 22:20:10 +0900384branch (specified in the `revision` attribute) rather than the
385whole ref space.
386
Mani Chandel7a91d512014-07-24 16:27:08 +0530387Attribute `sync-s`: Set to true to also sync sub-projects.
David Pursehouse4e465202012-11-27 22:20:10 +0900388
Nasser Grainawi909d58b2014-09-19 12:13:04 -0600389Attribute `upstream`: Name of the Git ref in which a sha1
David Pursehouse4e465202012-11-27 22:20:10 +0900390can be found. Used when syncing a revision locked manifest in
391-c mode to avoid having to sync the entire ref space.
392
David Pursehouseede7f122012-11-27 22:25:30 +0900393Attribute `clone-depth`: Set the depth to use when fetching this
394project. If specified, this value will override any value given
395to repo init with the --depth option on the command line.
396
Scott Fandb83b1b2013-02-28 09:34:14 +0800397Attribute `force-path`: Set to true to force this project to create the
398local mirror repository according to its `path` attribute (if supplied)
399rather than the `name` attribute. This attribute only applies to the
400local mirrors syncing, it will be ignored when syncing the projects in a
401client working directory.
402
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400403### Element extend-project
Josh Triplett884a3872014-06-12 14:57:29 -0700404
405Modify the attributes of the named project.
406
407This element is mostly useful in a local manifest file, to modify the
408attributes of an existing project without completely replacing the
409existing project definition. This makes the local manifest more robust
410against changes to the original manifest.
411
412Attribute `path`: If specified, limit the change to projects checked out
413at the specified path, rather than all projects with the given name.
414
Michael Kelly37c21c22020-06-13 02:10:40 -0700415Attribute `dest-path`: If specified, a path relative to the top directory
416of the repo client where the Git working directory for this project
417should be placed. This is used to move a project in the checkout by
418overriding the existing `path` setting.
419
Josh Triplett884a3872014-06-12 14:57:29 -0700420Attribute `groups`: List of additional groups to which this project
421belongs. Same syntax as the corresponding element of `project`.
422
Luis Hector Chavez7d525852018-03-15 09:54:08 -0700423Attribute `revision`: If specified, overrides the revision of the original
424project. Same syntax as the corresponding element of `project`.
425
Kyunam Jobd0aae92020-02-04 11:38:53 +0900426Attribute `remote`: If specified, overrides the remote of the original
427project. Same syntax as the corresponding element of `project`.
428
Erik Elmeke4cdfdb72022-09-09 17:13:17 +0200429Attribute `dest-branch`: If specified, overrides the dest-branch of the original
430project. Same syntax as the corresponding element of `project`.
431
432Attribute `upstream`: If specified, overrides the upstream of the original
433project. Same syntax as the corresponding element of `project`.
434
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400435### Element annotation
James W. Mills24c13082012-04-12 15:04:13 -0500436
437Zero or more annotation elements may be specified as children of a
Jack Neus6ea0cae2021-07-20 20:52:33 +0000438project or remote element. Each element describes a name-value pair.
439For projects, this name-value pair will be exported into each project's
440environment during a 'forall' command, prefixed with `REPO__`. In addition,
441there is an optional attribute "keep" which accepts the case insensitive values
442"true" (default) or "false". This attribute determines whether or not the
443annotation will be kept when exported with the manifest subcommand.
James W. Mills24c13082012-04-12 15:04:13 -0500444
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400445### Element copyfile
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300446
447Zero or more copyfile elements may be specified as children of a
448project element. Each element describes a src-dest pair of files;
Mike Frysinger3891b752018-10-05 19:26:15 -0400449the "src" file will be copied to the "dest" place during `repo sync`
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300450command.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400451
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300452"src" is project relative, "dest" is relative to the top of the tree.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400453Copying from paths outside of the project or to paths outside of the repo
454client is not allowed.
455
456"src" and "dest" must be files. Directories or symlinks are not allowed.
457Intermediate paths must not be symlinks either.
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300458
Mike Frysinger50d27632019-08-01 18:57:10 -0400459Parent directories of "dest" will be automatically created if missing.
460
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400461### Element linkfile
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300462
463It's just like copyfile and runs at the same time as copyfile but
464instead of copying it creates a symlink.
465
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400466The symlink is created at "dest" (relative to the top of the tree) and
Mike Frysinger04122b72019-07-31 23:32:58 -0400467points to the path specified by "src" which is a path in the project.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400468
Mike Frysinger50d27632019-08-01 18:57:10 -0400469Parent directories of "dest" will be automatically created if missing.
470
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400471The symlink target may be a file or directory, but it may not point outside
472of the repo client.
473
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400474### Element remove-project
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800475
476Deletes the named project from the internal manifest table, possibly
477allowing a subsequent project element in the same manifest file to
478replace the project with a different source.
479
David Pursehouseb1525bf2012-11-14 08:51:38 +0900480This element is mostly useful in a local manifest file, where
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800481the user can remove a project, and possibly replace it with their
482own definition.
483
Michael Kelly06da9982021-06-30 01:58:28 -0700484Attribute `optional`: Set to true to ignore remove-project elements with no
485matching `project` element.
486
Mike Frysinger51e39d52020-12-04 05:32:06 -0500487### Element repo-hooks
488
489NB: See the [practical documentation](./repo-hooks.md) for using repo hooks.
490
491Only one repo-hooks element may be specified at a time.
492Attempting to redefine it will fail to parse.
493
494Attribute `in-project`: The project where the hooks are defined. The value
495must match the `name` attribute (**not** the `path` attribute) of a previously
496defined `project` element.
497
498Attribute `enabled-list`: List of hooks to use, whitespace or comma separated.
499
Raman Tenneti1bb4fb22021-01-07 16:50:45 -0800500### Element superproject
501
502***
Raman Tenneti1c3f57e2021-05-04 12:32:13 -0700503*Note*: This is currently a WIP.
Raman Tenneti1bb4fb22021-01-07 16:50:45 -0800504***
505
506NB: See the [git superprojects documentation](
507https://en.wikibooks.org/wiki/Git/Submodules_and_Superprojects) for background
508information.
509
510This element is used to specify the URL of the superproject. It has "name" and
511"remote" as atrributes. Only "name" is required while the others have
512reasonable defaults. At most one superproject may be specified.
513Attempting to redefine it will fail to parse.
514
515Attribute `name`: A unique name for the superproject. This attribute has the
516same meaning as project's name attribute. See the
517[element project](#element-project) for more information.
518
519Attribute `remote`: Name of a previously defined remote element.
520If not supplied the remote given by the default element is used.
521
Xin Lie0b16a22021-09-26 23:20:32 -0700522Attribute `revision`: Name of the Git branch the manifest wants
523to track for this superproject. If not supplied the revision given
524by the remote element is used if applicable, else the default
525element is used.
526
Raman Tenneti1c3f57e2021-05-04 12:32:13 -0700527### Element contactinfo
528
529***
530*Note*: This is currently a WIP.
531***
532
533This element is used to let manifest authors self-register contact info.
534It has "bugurl" as a required atrribute. This element can be repeated,
535and any later entries will clobber earlier ones. This would allow manifest
536authors who extend manifests to specify their own contact info.
537
538Attribute `bugurl`: The URL to file a bug against the manifest owner.
539
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400540### Element include
Brian Harring26448742011-04-28 05:04:41 -0700541
542This element provides the capability of including another manifest
543file into the originating manifest. Normal rules apply for the
David Pursehouse9f3406e2012-11-14 08:52:25 +0900544target manifest to include - it must be a usable manifest on its own.
Brian Harring26448742011-04-28 05:04:41 -0700545
David Pursehouse9f3406e2012-11-14 08:52:25 +0900546Attribute `name`: the manifest to include, specified relative to
547the manifest repository's root.
Brian Harring26448742011-04-28 05:04:41 -0700548
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500549"name" may not be an absolute path or use "." or ".." path components.
550These restrictions are not enforced for [Local Manifests].
551
Fredrik de Groot352c93b2020-10-06 12:55:14 +0200552Attribute `groups`: List of additional groups to which all projects
553in the included manifest belong. This appends and recurses, meaning
LaMont Jonescc879a92021-11-18 22:40:18 +0000554all projects in included manifests carry all parent include groups.
Fredrik de Groot352c93b2020-10-06 12:55:14 +0200555Same syntax as the corresponding element of `project`.
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800556
Shuchuan Zeng3e3340d2023-04-18 10:36:50 +0800557Attribute `revision`: Name of a Git branch (e.g. `main` or `refs/heads/main`)
558default to which all projects in the included manifest belong.
559
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500560## Local Manifests {#local-manifests}
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800561
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900562Additional remotes and projects may be added through local manifest
563files stored in `$TOP_DIR/.repo/local_manifests/*.xml`.
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800564
565For example:
566
Mike Frysinger3891b752018-10-05 19:26:15 -0400567 $ ls .repo/local_manifests
568 local_manifest.xml
569 another_local_manifest.xml
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900570
Mike Frysinger3891b752018-10-05 19:26:15 -0400571 $ cat .repo/local_manifests/local_manifest.xml
572
573
574
575 name="tools/manifest" />
576
577 name="platform/manifest" />
578
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800579
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900580Users may add projects to the local manifest(s) prior to a `repo sync`
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800581invocation, instructing repo to automatically download and manage
582these extra projects.
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900583
David Pursehouse52f1e5d2012-11-14 04:53:24 +0900584Manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml` will
585be loaded in alphabetical order.
586
Raman Tenneti78f4dd32021-06-07 13:27:37 -0700587Projects from local manifest files are added into
588local:: group.
589
Mike Frysinger4e1fc102020-09-06 14:42:47 -0400590The legacy `$TOP_DIR/.repo/local_manifest.xml` path is no longer supported.
Mike Frysinger68d5d4d2021-03-09 11:56:24 -0500591
592
593[copyfile]: #Element-copyfile
594[linkfile]: #Element-linkfile
595[Local Manifests]: #local-manifests