| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- repo Manifest Format
- ====================
- A repo manifest describes the structure of a repo client; that is
- the directories that are visible and where they should be obtained
- from with git.
- The basic structure of a manifest is a bare Git repository holding
- a single 'default.xml' XML file in the top level directory.
- Manifests are inherently version controlled, since they are kept
- within a Git repository. Updates to manifests are automatically
- obtained by clients during `repo sync`.
- XML File Format
- ---------------
- A manifest XML file (e.g. 'default.xml') roughly conforms to the
- following DTD:
- <!DOCTYPE manifest [
- <!ELEMENT manifest (notice?,
- remote*,
- default?,
- manifest-server?,
- remove-project*,
- project*,
- repo-hooks?)>
-
- <!ELEMENT notice (#PCDATA)>
-
- <!ELEMENT remote (EMPTY)>
- <!ATTLIST remote name ID #REQUIRED>
- <!ATTLIST remote fetch CDATA #REQUIRED>
- <!ATTLIST remote review CDATA #IMPLIED>
-
- <!ELEMENT default (EMPTY)>
- <!ATTLIST default remote IDREF #IMPLIED>
- <!ATTLIST default revision CDATA #IMPLIED>
- <!ATTLIST default sync-j CDATA #IMPLIED>
- <!ELEMENT manifest-server (EMPTY)>
- <!ATTLIST url CDATA #REQUIRED>
-
- <!ELEMENT project (EMPTY)>
- <!ATTLIST project name CDATA #REQUIRED>
- <!ATTLIST project path CDATA #IMPLIED>
- <!ATTLIST project remote IDREF #IMPLIED>
- <!ATTLIST project revision CDATA #IMPLIED>
-
- <!ELEMENT remove-project (EMPTY)>
- <!ATTLIST remove-project name CDATA #REQUIRED>
- <!ELEMENT repo-hooks (EMPTY)>
- <!ATTLIST repo-hooks in-project CDATA #REQUIRED>
- <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED>
- ]>
- A description of the elements and their attributes follows.
- Element manifest
- ----------------
- The root element of the file.
- Element remote
- --------------
- One or more remote elements may be specified. Each remote element
- specifies a Git URL shared by one or more projects and (optionally)
- the Gerrit review server those projects upload changes through.
- Attribute `name`: A short name unique to this manifest file. The
- name specified here is used as the remote name in each project's
- .git/config, and is therefore automatically available to commands
- like `git fetch`, `git remote`, `git pull` and `git push`.
- Attribute `fetch`: The Git URL prefix for all projects which use
- this remote. Each project's name is appended to this prefix to
- form the actual URL used to clone the project.
- Attribute `review`: Hostname of the Gerrit server where reviews
- are uploaded to by `repo upload`. This attribute is optional;
- if not specified then `repo upload` will not function.
- Element default
- ---------------
- At most one default element may be specified. Its remote and
- revision attributes are used when a project element does not
- specify its own remote or revision attribute.
- Attribute `remote`: Name of a previously defined remote element.
- Project elements lacking a remote attribute of their own will use
- this remote.
- Attribute `revision`: Name of a Git branch (e.g. `master` or
- `refs/heads/master`). Project elements lacking their own
- revision attribute will use this revision.
- Element manifest-server
- -----------------------
- At most one manifest-server may be specified. The url attribute
- is used to specify the URL of a manifest server, which is an
- XML RPC service that will return a manifest in which each project
- is pegged to a known good revision for the current branch and
- target.
- The manifest server should implement:
- GetApprovedManifest(branch, target)
- The target to use is defined by environment variables TARGET_PRODUCT
- and TARGET_BUILD_VARIANT. These variables are used to create a string
- of the form $TARGET_PRODUCT-$TARGET_BUILD_VARIANT, e.g. passion-userdebug.
- If one of those variables or both are not present, the program will call
- GetApprovedManifest without the target paramater and the manifest server
- should choose a reasonable default target.
- Element project
- ---------------
- One or more project elements may be specified. Each element
- describes a single Git repository to be cloned into the repo
- client workspace.
- Attribute `name`: A unique name for this project. The project's
- name is appended onto its remote's fetch URL to generate the actual
- URL to configure the Git remote with. The URL gets formed as:
- ${remote_fetch}/${project_name}.git
- where ${remote_fetch} is the remote's fetch attribute and
- ${project_name} is the project's name attribute. The suffix ".git"
- is always appended as repo assumes the upstream is a forrest of
- bare Git repositories.
- The project name must match the name Gerrit knows, if Gerrit is
- being used for code reviews.
- Attribute `path`: An optional path relative to the top directory
- of the repo client where the Git working directory for this project
- should be placed. If not supplied the project name is used.
- Attribute `remote`: Name of a previously defined remote element.
- If not supplied the remote given by the default element is used.
- Attribute `revision`: Name of the Git branch the manifest wants
- to track for this project. Names can be relative to refs/heads
- (e.g. just "master") or absolute (e.g. "refs/heads/master").
- Tags and/or explicit SHA-1s should work in theory, but have not
- been extensively tested. If not supplied the revision given by
- the default element is used.
- Element remove-project
- ----------------------
- Deletes the named project from the internal manifest table, possibly
- allowing a subsequent project element in the same manifest file to
- replace the project with a different source.
- This element is mostly useful in the local_manifest.xml, where
- the user can remove a project, and possibly replace it with their
- own definition.
- Local Manifest
- ==============
- Additional remotes and projects may be added through a local
- manifest, stored in `$TOP_DIR/.repo/local_manifest.xml`.
- For example:
- $ cat .repo/local_manifest.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <manifest>
- <project path="manifest"
- name="tools/manifest" />
- <project path="platform-manifest"
- name="platform/manifest" />
- </manifest>
- Users may add projects to the local manifest prior to a `repo sync`
- invocation, instructing repo to automatically download and manage
- these extra projects.
|