blob: db48668a92b399eb60df97eb0c225bb9ccf99053 [file] [log] [blame]
Shawn O. Pearce3e548192008-11-04 11:19:36 -08001repo Manifest Format
2====================
3
4A repo manifest describes the structure of a repo client; that is
5the directories that are visible and where they should be obtained
6from with git.
7
8The basic structure of a manifest is a bare Git repository holding
9a single 'default.xml' XML file in the top level directory.
10
11Manifests are inherently version controlled, since they are kept
12within a Git repository. Updates to manifests are automatically
13obtained by clients during `repo sync`.
14
15
16XML File Format
17---------------
18
19A manifest XML file (e.g. 'default.xml') roughly conforms to the
20following DTD:
21
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080022
Doug Anderson2b8db3c2010-11-01 15:08:06 -070023
24 remote*,
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080025 default?,
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -070026 manifest-server?,
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080027 remove-project*,
Doug Anderson37282b42011-03-04 11:54:18 -080028 project*,
29 repo-hooks?)>
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080030
Doug Anderson2b8db3c2010-11-01 15:08:06 -070031
32
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080033
34
Yestin Sunb292b982012-07-02 07:32:50 -070035
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080036
37
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080038
39
40
41
Shawn O. Pearce6392c872011-09-22 17:44:31 -070042
Anatol Pomazau79770d22012-04-20 14:41:59 -070043
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -070044
45
46
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080047
James W. Mills24c13082012-04-12 15:04:13 -050048
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080049
50
51
52
Colin Cross5acde752012-03-28 20:15:45 -070053
Anatol Pomazau79770d22012-04-20 14:41:59 -070054
James W. Mills24c13082012-04-12 15:04:13 -050055
56
57
58
59
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080060
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080061
62
Doug Anderson37282b42011-03-04 11:54:18 -080063
64
65
66
Brian Harring26448742011-04-28 05:04:41 -070067
68
69
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -080070 ]>
Shawn O. Pearce3e548192008-11-04 11:19:36 -080071
72A description of the elements and their attributes follows.
73
74
75Element manifest
76----------------
77
78The root element of the file.
79
80
81Element remote
82--------------
83
84One or more remote elements may be specified. Each remote element
85specifies a Git URL shared by one or more projects and (optionally)
86the Gerrit review server those projects upload changes through.
87
88Attribute `name`: A short name unique to this manifest file. The
89name specified here is used as the remote name in each project's
90.git/config, and is therefore automatically available to commands
91like `git fetch`, `git remote`, `git pull` and `git push`.
92
Yestin Sunb292b982012-07-02 07:32:50 -070093Attribute `alias`: The alias, if specified, is used to override
94`name` to be set as the remote name in each project's .git/config.
95Its value can be duplicated while attribute `name` has to be unique
96in the manifest file. This helps each project to be able to have
97same remote name which actually points to different remote url.
98
Shawn O. Pearce3e548192008-11-04 11:19:36 -080099Attribute `fetch`: The Git URL prefix for all projects which use
100this remote. Each project's name is appended to this prefix to
101form the actual URL used to clone the project.
102
103Attribute `review`: Hostname of the Gerrit server where reviews
104are uploaded to by `repo upload`. This attribute is optional;
105if not specified then `repo upload` will not function.
106
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800107Element default
108---------------
109
110At most one default element may be specified. Its remote and
111revision attributes are used when a project element does not
112specify its own remote or revision attribute.
113
114Attribute `remote`: Name of a previously defined remote element.
115Project elements lacking a remote attribute of their own will use
116this remote.
117
118Attribute `revision`: Name of a Git branch (e.g. `master` or
119`refs/heads/master`). Project elements lacking their own
120revision attribute will use this revision.
121
122
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700123Element manifest-server
124-----------------------
125
126At most one manifest-server may be specified. The url attribute
127is used to specify the URL of a manifest server, which is an
128XML RPC service that will return a manifest in which each project
129is pegged to a known good revision for the current branch and
130target.
131
132The manifest server should implement:
133
134 GetApprovedManifest(branch, target)
135
136The target to use is defined by environment variables TARGET_PRODUCT
137and TARGET_BUILD_VARIANT. These variables are used to create a string
138of the form $TARGET_PRODUCT-$TARGET_BUILD_VARIANT, e.g. passion-userdebug.
139If one of those variables or both are not present, the program will call
David Pursehousedaa851f2012-08-21 13:52:18 +0900140GetApprovedManifest without the target parameter and the manifest server
Nico Sallembiena1bfd2c2010-04-06 10:40:01 -0700141should choose a reasonable default target.
142
143
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800144Element project
145---------------
146
147One or more project elements may be specified. Each element
148describes a single Git repository to be cloned into the repo
149client workspace.
150
151Attribute `name`: A unique name for this project. The project's
152name is appended onto its remote's fetch URL to generate the actual
153URL to configure the Git remote with. The URL gets formed as:
154
155 ${remote_fetch}/${project_name}.git
156
157where ${remote_fetch} is the remote's fetch attribute and
158${project_name} is the project's name attribute. The suffix ".git"
David Pursehousedaa851f2012-08-21 13:52:18 +0900159is always appended as repo assumes the upstream is a forest of
Shawn O. Pearce3e548192008-11-04 11:19:36 -0800160bare Git repositories.
161
162The project name must match the name Gerrit knows, if Gerrit is
163being used for code reviews.
164
165Attribute `path`: An optional path relative to the top directory
166of the repo client where the Git working directory for this project
167should be placed. If not supplied the project name is used.
168
169Attribute `remote`: Name of a previously defined remote element.
170If not supplied the remote given by the default element is used.
171
172Attribute `revision`: Name of the Git branch the manifest wants
173to track for this project. Names can be relative to refs/heads
174(e.g. just "master") or absolute (e.g. "refs/heads/master").
175Tags and/or explicit SHA-1s should work in theory, but have not
176been extensively tested. If not supplied the revision given by
177the default element is used.
178
Colin Cross5acde752012-03-28 20:15:45 -0700179Attribute `groups`: List of groups to which this project belongs,
Conley Owens971de8e2012-04-16 10:36:08 -0700180whitespace or comma separated. All projects belong to the group
Brian Harring7da13142012-06-15 02:24:20 -0700181"default", and each project automatically belongs to a group of
182it's name:`name` and path:`path`. E.g. for
183, that project
184definition is implicitly in the following manifest groups:
185default, name:monkeys, and path:barrel-of.
Colin Cross5acde752012-03-28 20:15:45 -0700186
James W. Mills24c13082012-04-12 15:04:13 -0500187Element annotation
188------------------
189
190Zero or more annotation elements may be specified as children of a
191project element. Each element describes a name-value pair that will be
192exported into each project's environment during a 'forall' command,
193prefixed with REPO__. In addition, there is an optional attribute
194"keep" which accepts the case insensitive values "true" (default) or
195"false". This attribute determines whether or not the annotation will
196be kept when exported with the manifest subcommand.
197
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800198Element remove-project
199----------------------
200
201Deletes the named project from the internal manifest table, possibly
202allowing a subsequent project element in the same manifest file to
203replace the project with a different source.
204
205This element is mostly useful in the local_manifest.xml, where
206the user can remove a project, and possibly replace it with their
207own definition.
208
Brian Harring26448742011-04-28 05:04:41 -0700209Element include
210---------------
211
212This element provides the capability of including another manifest
213file into the originating manifest. Normal rules apply for the
214target manifest to include- it must be a usable manifest on it's own.
215
216Attribute `name`; the manifest to include, specified relative to
217the manifest repositories root.
218
Shawn O. Pearce03eaf072008-11-20 11:42:22 -0800219
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800220Local Manifest
221==============
222
223Additional remotes and projects may be added through a local
224manifest, stored in `$TOP_DIR/.repo/local_manifest.xml`.
225
226For example:
227
Shawn O. Pearce43c3d9e2009-03-04 14:26:50 -0800228 $ cat .repo/local_manifest.xml
229
230
231
232 name="tools/manifest" />
233
234 name="platform/manifest" />
235
Shawn O. Pearce70cd4ab2008-11-06 08:48:44 -0800236
237Users may add projects to the local manifest prior to a `repo sync`
238invocation, instructing repo to automatically download and manage
239these extra projects.