blob: 0201c88b9ce2871a989f19803a00882d92f047ca [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
24
25 remote*,
26 default?,
27 manifest-server?,
28 remove-project*,
29 project*,
30 extend-project*,
31 repo-hooks?,
32 include*)>
Chirayu Desaid5a5b192013-11-21 19:15:30 +053033
Mike Frysinger3891b752018-10-05 19:26:15 -040034
Chirayu Desaid5a5b192013-11-21 19:15:30 +053035
Mike Frysinger3891b752018-10-05 19:26:15 -040036
37
38
39
40
41
42
Chirayu Desaid5a5b192013-11-21 19:15:30 +053043
Mike Frysinger3891b752018-10-05 19:26:15 -040044
45
46
47
48
49
50
51
52
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -070053
Mike Frysinger3891b752018-10-05 19:26:15 -040054
55
Chirayu Desaid5a5b192013-11-21 19:15:30 +053056
Mike Frysinger3891b752018-10-05 19:26:15 -040057
58 project*,
59 copyfile*,
60 linkfile*)>
61
62
63
64
65
66
67
68
Kyunam Jo01019d92019-03-18 13:30:58 +090069
Mike Frysinger3891b752018-10-05 19:26:15 -040070
71
72
James W. Mills24c13082012-04-12 15:04:13 -050073
Mike Frysinger3891b752018-10-05 19:26:15 -040074
75
76
77
Chirayu Desaid5a5b192013-11-21 19:15:30 +053078
Mike Frysinger3891b752018-10-05 19:26:15 -040079
80
81
Ruslan Bilovol54527e72015-09-08 13:11:23 +030082
Mike Frysinger3891b752018-10-05 19:26:15 -040083
84
85
Ruslan Bilovol54527e72015-09-08 13:11:23 +030086
Mike Frysinger3891b752018-10-05 19:26:15 -040087
88
89
90
91
Kyunam Jobd0aae92020-02-04 11:38:53 +090092
Josh Triplett884a3872014-06-12 14:57:29 -070093
Mike Frysinger3891b752018-10-05 19:26:15 -040094
95
Doug Anderson37282b42011-03-04 11:54:18 -080096
Mike Frysinger3891b752018-10-05 19:26:15 -040097
98
99
Brian Harring26448742011-04-28 05:04:41 -0700100
Mike Frysinger3891b752018-10-05 19:26:15 -0400101
Fredrik de Groot352c93b2020-10-06 12:55:14 +0200102
103
Mike Frysinger3891b752018-10-05 19:26:15 -0400104]>
105```
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800106
107A description of the elements and their attributes follows.
108
109
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400110### Element manifest
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800111
112The root element of the file.
113
Mike Frysinger51e39d52020-12-04 05:32:06 -0500114### Element notice
115
116Arbitrary text that is displayed to users whenever `repo sync` finishes.
117The content is simply passed through as it exists in the manifest.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800118
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400119### Element remote
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800120
121One or more remote elements may be specified. Each remote element
122specifies a Git URL shared by one or more projects and (optionally)
123the Gerrit review server those projects upload changes through.
124
125Attribute `name`: A short name unique to this manifest file. The
126name specified here is used as the remote name in each project's
127.git/config, and is therefore automatically available to commands
128like `git fetch`, `git remote`, `git pull` and `git push`.
129
Yestin Sunb292b982012-07-02 07:32:50 -0700130Attribute `alias`: The alias, if specified, is used to override
131`name` to be set as the remote name in each project's .git/config.
132Its value can be duplicated while attribute `name` has to be unique
133in the manifest file. This helps each project to be able to have
134same remote name which actually points to different remote url.
135
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800136Attribute `fetch`: The Git URL prefix for all projects which use
137this remote. Each project's name is appended to this prefix to
138form the actual URL used to clone the project.
139
Steve Raed6480452016-08-10 15:00:00 -0700140Attribute `pushurl`: The Git "push" URL prefix for all projects
141which use this remote. Each project's name is appended to this
142prefix to form the actual URL used to "git push" the project.
143This attribute is optional; if not specified then "git push"
144will use the same URL as the `fetch` attribute.
145
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800146Attribute `review`: Hostname of the Gerrit server where reviews
147are uploaded to by `repo upload`. This attribute is optional;
148if not specified then `repo upload` will not function.
149
Mike Frysinger6e89c962020-11-15 18:42:26 -0500150Attribute `revision`: Name of a Git branch (e.g. `main` or
151`refs/heads/main`). Remotes with their own revision will override
Anthony King36ea2fb2014-05-06 11:54:01 +0100152the default revision.
153
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400154### Element default
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800155
156At most one default element may be specified. Its remote and
157revision attributes are used when a project element does not
158specify its own remote or revision attribute.
159
160Attribute `remote`: Name of a previously defined remote element.
161Project elements lacking a remote attribute of their own will use
162this remote.
163
Mike Frysinger6e89c962020-11-15 18:42:26 -0500164Attribute `revision`: Name of a Git branch (e.g. `main` or
165`refs/heads/main`). Project elements lacking their own
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800166revision attribute will use this revision.
167
Mike Frysinger6e89c962020-11-15 18:42:26 -0500168Attribute `dest-branch`: Name of a Git branch (e.g. `main`).
Bryan Jacobsf609f912013-05-06 13:36:24 -0400169Project elements not setting their own `dest-branch` will inherit
170this value. If this value is not set, projects will use `revision`
171by default instead.
172
Nasser Grainawida403412018-05-04 12:53:29 -0600173Attribute `upstream`: Name of the Git ref in which a sha1
174can be found. Used when syncing a revision locked manifest in
175-c mode to avoid having to sync the entire ref space. Project elements
176not setting their own `upstream` will inherit this value.
177
Mani Chandel7a91d512014-07-24 16:27:08 +0530178Attribute `sync-j`: Number of parallel jobs to use when synching.
David Pursehouse4e465202012-11-27 22:20:10 +0900179
Mani Chandel7a91d512014-07-24 16:27:08 +0530180Attribute `sync-c`: Set to true to only sync the given Git
David Pursehouse4e465202012-11-27 22:20:10 +0900181branch (specified in the `revision` attribute) rather than the
Mani Chandel7a91d512014-07-24 16:27:08 +0530182whole ref space. Project elements lacking a sync-c element of
David Pursehouse4e465202012-11-27 22:20:10 +0900183their own will use this value.
184
Mani Chandel7a91d512014-07-24 16:27:08 +0530185Attribute `sync-s`: Set to true to also sync sub-projects.
David Pursehouse4e465202012-11-27 22:20:10 +0900186
YOUNG HO CHAa32c92c2018-02-14 16:57:31 +0900187Attribute `sync-tags`: Set to false to only sync the given Git
188branch (specified in the `revision` attribute) rather than
189the other ref tags.
190
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800191
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400192### Element manifest-server
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700193
194At most one manifest-server may be specified. The url attribute
195is used to specify the URL of a manifest server, which is an
David Pursehouse9a27d012012-08-21 14:23:49 +0900196XML RPC service.
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700197
David Pursehouse9a27d012012-08-21 14:23:49 +0900198The manifest server should implement the following RPC methods:
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700199
Mike Frysinger3891b752018-10-05 19:26:15 -0400200 GetApprovedManifest(branch, target)
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700201
David Pursehouse9a27d012012-08-21 14:23:49 +0900202Return a manifest in which each project is pegged to a known good revision
David Pursehousee8688412016-04-13 17:55:34 +0900203for the current branch and target. This is used by repo sync when the
204--smart-sync option is given.
David Pursehouse9a27d012012-08-21 14:23:49 +0900205
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700206The target to use is defined by environment variables TARGET_PRODUCT
207and TARGET_BUILD_VARIANT. These variables are used to create a string
208of the form $TARGET_PRODUCT-$TARGET_BUILD_VARIANT, e.g. passion-userdebug.
209If one of those variables or both are not present, the program will call
David Pursehousedaa851f2012-08-21 13:52:18 +0900210GetApprovedManifest without the target parameter and the manifest server
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700211should choose a reasonable default target.
212
Mike Frysinger3891b752018-10-05 19:26:15 -0400213 GetManifest(tag)
David Pursehouse9a27d012012-08-21 14:23:49 +0900214
215Return a manifest in which each project is pegged to the revision at
David Pursehousee8688412016-04-13 17:55:34 +0900216the specified tag. This is used by repo sync when the --smart-tag option
217is given.
David Pursehouse9a27d012012-08-21 14:23:49 +0900218
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700219
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400220### Element project
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800221
222One or more project elements may be specified. Each element
223describes a single Git repository to be cloned into the repo
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800224client workspace. You may specify Git-submodules by creating a
225nested project. Git-submodules will be automatically
226recognized and inherit their parent's attributes, but those
227may be overridden by an explicitly specified project element.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800228
229Attribute `name`: A unique name for this project. The project's
230name is appended onto its remote's fetch URL to generate the actual
231URL to configure the Git remote with. The URL gets formed as:
232
Mike Frysinger3891b752018-10-05 19:26:15 -0400233 ${remote_fetch}/${project_name}.git
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800234
235where ${remote_fetch} is the remote's fetch attribute and
236${project_name} is the project's name attribute. The suffix ".git"
David Pursehousedaa851f2012-08-21 13:52:18 +0900237is always appended as repo assumes the upstream is a forest of
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800238bare Git repositories. If the project has a parent element, its
239name will be prefixed by the parent's.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800240
241The project name must match the name Gerrit knows, if Gerrit is
242being used for code reviews.
243
244Attribute `path`: An optional path relative to the top directory
245of the repo client where the Git working directory for this project
246should be placed. If not supplied the project name is used.
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800247If the project has a parent element, its path will be prefixed
248by the parent's.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800249
250Attribute `remote`: Name of a previously defined remote element.
251If not supplied the remote given by the default element is used.
252
253Attribute `revision`: Name of the Git branch the manifest wants
254to track for this project. Names can be relative to refs/heads
Mike Frysinger6e89c962020-11-15 18:42:26 -0500255(e.g. just "main") or absolute (e.g. "refs/heads/main").
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800256Tags and/or explicit SHA-1s should work in theory, but have not
257been extensively tested. If not supplied the revision given by
Anthony King36ea2fb2014-05-06 11:54:01 +0100258the remote element is used if applicable, else the default
259element is used.
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800260
Mike Frysinger6e89c962020-11-15 18:42:26 -0500261Attribute `dest-branch`: Name of a Git branch (e.g. `main`).
Bryan Jacobsf609f912013-05-06 13:36:24 -0400262When using `repo upload`, changes will be submitted for code
263review on this branch. If unspecified both here and in the
264default element, `revision` is used instead.
265
Colin Cross5acde752012-03-28 20:15:45 -0700266Attribute `groups`: List of groups to which this project belongs,
Conley Owens971de8e2012-04-16 10:36:08 -0700267whitespace or comma separated. All projects belong to the group
Conley Owensbb1b5f52012-08-13 13:11:18 -0700268"all", and each project automatically belongs to a group of
269its name:`name` and path:`path`. E.g. for
Brian Harring7da13142012-06-15 02:24:20 -0700270, that project
271definition is implicitly in the following manifest groups:
Conley Owensbb1b5f52012-08-13 13:11:18 -0700272default, name:monkeys, and path:barrel-of. If you place a project in the
273group "notdefault", it will not be automatically downloaded by repo.
Che-Liang Chioub2bd91c2012-01-11 11:28:42 +0800274If the project has a parent element, the `name` and `path` here
275are the prefixed ones.
Colin Cross5acde752012-03-28 20:15:45 -0700276
Mani Chandel7a91d512014-07-24 16:27:08 +0530277Attribute `sync-c`: Set to true to only sync the given Git
David Pursehouse4e465202012-11-27 22:20:10 +0900278branch (specified in the `revision` attribute) rather than the
279whole ref space.
280
Mani Chandel7a91d512014-07-24 16:27:08 +0530281Attribute `sync-s`: Set to true to also sync sub-projects.
David Pursehouse4e465202012-11-27 22:20:10 +0900282
Nasser Grainawi909d58b2014-09-19 12:13:04 -0600283Attribute `upstream`: Name of the Git ref in which a sha1
David Pursehouse4e465202012-11-27 22:20:10 +0900284can be found. Used when syncing a revision locked manifest in
285-c mode to avoid having to sync the entire ref space.
286
David Pursehouseede7f122012-11-27 22:25:30 +0900287Attribute `clone-depth`: Set the depth to use when fetching this
288project. If specified, this value will override any value given
289to repo init with the --depth option on the command line.
290
Scott Fandb83b1b2013-02-28 09:34:14 +0800291Attribute `force-path`: Set to true to force this project to create the
292local mirror repository according to its `path` attribute (if supplied)
293rather than the `name` attribute. This attribute only applies to the
294local mirrors syncing, it will be ignored when syncing the projects in a
295client working directory.
296
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400297### Element extend-project
Josh Triplett884a3872014-06-12 14:57:29 -0700298
299Modify the attributes of the named project.
300
301This element is mostly useful in a local manifest file, to modify the
302attributes of an existing project without completely replacing the
303existing project definition. This makes the local manifest more robust
304against changes to the original manifest.
305
306Attribute `path`: If specified, limit the change to projects checked out
307at the specified path, rather than all projects with the given name.
308
309Attribute `groups`: List of additional groups to which this project
310belongs. Same syntax as the corresponding element of `project`.
311
Luis Hector Chavez7d525852018-03-15 09:54:08 -0700312Attribute `revision`: If specified, overrides the revision of the original
313project. Same syntax as the corresponding element of `project`.
314
Kyunam Jobd0aae92020-02-04 11:38:53 +0900315Attribute `remote`: If specified, overrides the remote of the original
316project. Same syntax as the corresponding element of `project`.
317
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400318### Element annotation
James W. Mills24c13082012-04-12 15:04:13 -0500319
320Zero or more annotation elements may be specified as children of a
321project element. Each element describes a name-value pair that will be
322exported into each project's environment during a 'forall' command,
323prefixed with REPO__. In addition, there is an optional attribute
324"keep" which accepts the case insensitive values "true" (default) or
325"false". This attribute determines whether or not the annotation will
326be kept when exported with the manifest subcommand.
327
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400328### Element copyfile
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300329
330Zero or more copyfile elements may be specified as children of a
331project element. Each element describes a src-dest pair of files;
Mike Frysinger3891b752018-10-05 19:26:15 -0400332the "src" file will be copied to the "dest" place during `repo sync`
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300333command.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400334
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300335"src" is project relative, "dest" is relative to the top of the tree.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400336Copying from paths outside of the project or to paths outside of the repo
337client is not allowed.
338
339"src" and "dest" must be files. Directories or symlinks are not allowed.
340Intermediate paths must not be symlinks either.
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300341
Mike Frysinger50d27632019-08-01 18:57:10 -0400342Parent directories of "dest" will be automatically created if missing.
343
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400344### Element linkfile
Ruslan Bilovol54527e72015-09-08 13:11:23 +0300345
346It's just like copyfile and runs at the same time as copyfile but
347instead of copying it creates a symlink.
348
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400349The symlink is created at "dest" (relative to the top of the tree) and
Mike Frysinger04122b72019-07-31 23:32:58 -0400350points to the path specified by "src" which is a path in the project.
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400351
Mike Frysinger50d27632019-08-01 18:57:10 -0400352Parent directories of "dest" will be automatically created if missing.
353
Mike Frysingerc5b172a2019-07-31 17:34:23 -0400354The symlink target may be a file or directory, but it may not point outside
355of the repo client.
356
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400357### Element remove-project
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800358
359Deletes the named project from the internal manifest table, possibly
360allowing a subsequent project element in the same manifest file to
361replace the project with a different source.
362
David Pursehouseb1525bf2012-11-14 08:51:38 +0900363This element is mostly useful in a local manifest file, where
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800364the user can remove a project, and possibly replace it with their
365own definition.
366
Mike Frysinger51e39d52020-12-04 05:32:06 -0500367### Element repo-hooks
368
369NB: See the [practical documentation](./repo-hooks.md) for using repo hooks.
370
371Only one repo-hooks element may be specified at a time.
372Attempting to redefine it will fail to parse.
373
374Attribute `in-project`: The project where the hooks are defined. The value
375must match the `name` attribute (**not** the `path` attribute) of a previously
376defined `project` element.
377
378Attribute `enabled-list`: List of hooks to use, whitespace or comma separated.
379
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400380### Element include
Brian Harring26448742011-04-28 05:04:41 -0700381
382This element provides the capability of including another manifest
383file into the originating manifest. Normal rules apply for the
David Pursehouse9f3406e2012-11-14 08:52:25 +0900384target manifest to include - it must be a usable manifest on its own.
Brian Harring26448742011-04-28 05:04:41 -0700385
David Pursehouse9f3406e2012-11-14 08:52:25 +0900386Attribute `name`: the manifest to include, specified relative to
387the manifest repository's root.
Brian Harring26448742011-04-28 05:04:41 -0700388
Fredrik de Groot352c93b2020-10-06 12:55:14 +0200389Attribute `groups`: List of additional groups to which all projects
390in the included manifest belong. This appends and recurses, meaning
391all projects in sub-manifests carry all parent include groups.
392Same syntax as the corresponding element of `project`.
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800393
Mike Frysingerb8f7bb02018-10-10 01:05:11 -0400394## Local Manifests
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800395
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900396Additional remotes and projects may be added through local manifest
397files stored in `$TOP_DIR/.repo/local_manifests/*.xml`.
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800398
399For example:
400
Mike Frysinger3891b752018-10-05 19:26:15 -0400401 $ ls .repo/local_manifests
402 local_manifest.xml
403 another_local_manifest.xml
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900404
Mike Frysinger3891b752018-10-05 19:26:15 -0400405 $ cat .repo/local_manifests/local_manifest.xml
406
407
408
409 name="tools/manifest" />
410
411 name="platform/manifest" />
412
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800413
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900414Users may add projects to the local manifest(s) prior to a `repo sync`
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800415invocation, instructing repo to automatically download and manage
416these extra projects.
David Pursehouse2d5a0df2012-11-13 02:50:36 +0900417
David Pursehouse52f1e5d2012-11-14 04:53:24 +0900418Manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml` will
419be loaded in alphabetical order.
420
Mike Frysinger4e1fc102020-09-06 14:42:47 -0400421The legacy `$TOP_DIR/.repo/local_manifest.xml` path is no longer supported.