diff options
| author | Conley Owens <cco3@android.com> | 2014-05-08 18:38:32 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-05-08 18:38:33 +0000 |
| commit | e9f75b1782dbf6ce9a8f22256316dbb66cdbab11 (patch) | |
| tree | 1f645764ff04aa5f104b9c3eb9d287f09c80dddc | |
| parent | a35e4021619eac80ebc162b91f42c919a145bd5b (diff) | |
| parent | 36ea2fb6ee0f42144d44cf9aa7196bfa3b56e9e6 (diff) | |
| download | git-repo-e9f75b1782dbf6ce9a8f22256316dbb66cdbab11.tar.gz | |
Merge "Enable remotes to define their own revision"
| -rw-r--r-- | docs/manifest-format.txt | 8 | ||||
| -rw-r--r-- | manifest_xml.py | 22 | ||||
| -rw-r--r-- | project.py | 7 |
3 files changed, 28 insertions, 9 deletions
diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index e48b75fe..f187bfaf 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt | |||
| @@ -35,6 +35,7 @@ following DTD: | |||
| 35 | <!ATTLIST remote alias CDATA #IMPLIED> | 35 | <!ATTLIST remote alias CDATA #IMPLIED> |
| 36 | <!ATTLIST remote fetch CDATA #REQUIRED> | 36 | <!ATTLIST remote fetch CDATA #REQUIRED> |
| 37 | <!ATTLIST remote review CDATA #IMPLIED> | 37 | <!ATTLIST remote review CDATA #IMPLIED> |
| 38 | <!ATTLIST remote revision CDATA #IMPLIED> | ||
| 38 | 39 | ||
| 39 | <!ELEMENT default (EMPTY)> | 40 | <!ELEMENT default (EMPTY)> |
| 40 | <!ATTLIST default remote IDREF #IMPLIED> | 41 | <!ATTLIST default remote IDREF #IMPLIED> |
| @@ -112,6 +113,10 @@ Attribute `review`: Hostname of the Gerrit server where reviews | |||
| 112 | are uploaded to by `repo upload`. This attribute is optional; | 113 | are uploaded to by `repo upload`. This attribute is optional; |
| 113 | if not specified then `repo upload` will not function. | 114 | if not specified then `repo upload` will not function. |
| 114 | 115 | ||
| 116 | Attribute `revision`: Name of a Git branch (e.g. `master` or | ||
| 117 | `refs/heads/master`). Remotes with their own revision will override | ||
| 118 | the default revision. | ||
| 119 | |||
| 115 | Element default | 120 | Element default |
| 116 | --------------- | 121 | --------------- |
| 117 | 122 | ||
| @@ -208,7 +213,8 @@ to track for this project. Names can be relative to refs/heads | |||
| 208 | (e.g. just "master") or absolute (e.g. "refs/heads/master"). | 213 | (e.g. just "master") or absolute (e.g. "refs/heads/master"). |
| 209 | Tags and/or explicit SHA-1s should work in theory, but have not | 214 | Tags and/or explicit SHA-1s should work in theory, but have not |
| 210 | been extensively tested. If not supplied the revision given by | 215 | been extensively tested. If not supplied the revision given by |
| 211 | the default element is used. | 216 | the remote element is used if applicable, else the default |
| 217 | element is used. | ||
| 212 | 218 | ||
| 213 | Attribute `dest-branch`: Name of a Git branch (e.g. `master`). | 219 | Attribute `dest-branch`: Name of a Git branch (e.g. `master`). |
| 214 | When using `repo upload`, changes will be submitted for code | 220 | When using `repo upload`, changes will be submitted for code |
diff --git a/manifest_xml.py b/manifest_xml.py index a79f7142..fdc31778 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
| @@ -63,12 +63,14 @@ class _XmlRemote(object): | |||
| 63 | alias=None, | 63 | alias=None, |
| 64 | fetch=None, | 64 | fetch=None, |
| 65 | manifestUrl=None, | 65 | manifestUrl=None, |
| 66 | review=None): | 66 | review=None, |
| 67 | revision=None): | ||
| 67 | self.name = name | 68 | self.name = name |
| 68 | self.fetchUrl = fetch | 69 | self.fetchUrl = fetch |
| 69 | self.manifestUrl = manifestUrl | 70 | self.manifestUrl = manifestUrl |
| 70 | self.remoteAlias = alias | 71 | self.remoteAlias = alias |
| 71 | self.reviewUrl = review | 72 | self.reviewUrl = review |
| 73 | self.revision = revision | ||
| 72 | self.resolvedFetchUrl = self._resolveFetchUrl() | 74 | self.resolvedFetchUrl = self._resolveFetchUrl() |
| 73 | 75 | ||
| 74 | def __eq__(self, other): | 76 | def __eq__(self, other): |
| @@ -159,6 +161,8 @@ class XmlManifest(object): | |||
| 159 | e.setAttribute('alias', r.remoteAlias) | 161 | e.setAttribute('alias', r.remoteAlias) |
| 160 | if r.reviewUrl is not None: | 162 | if r.reviewUrl is not None: |
| 161 | e.setAttribute('review', r.reviewUrl) | 163 | e.setAttribute('review', r.reviewUrl) |
| 164 | if r.revision is not None: | ||
| 165 | e.setAttribute('revision', r.revision) | ||
| 162 | 166 | ||
| 163 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): | 167 | def Save(self, fd, peg_rev=False, peg_rev_upstream=True): |
| 164 | """Write the current manifest out to the given file descriptor. | 168 | """Write the current manifest out to the given file descriptor. |
| @@ -240,7 +244,8 @@ class XmlManifest(object): | |||
| 240 | if d.remote: | 244 | if d.remote: |
| 241 | remoteName = d.remote.remoteAlias or d.remote.name | 245 | remoteName = d.remote.remoteAlias or d.remote.name |
| 242 | if not d.remote or p.remote.name != remoteName: | 246 | if not d.remote or p.remote.name != remoteName: |
| 243 | e.setAttribute('remote', p.remote.name) | 247 | remoteName = p.remote.name |
| 248 | e.setAttribute('remote', remoteName) | ||
| 244 | if peg_rev: | 249 | if peg_rev: |
| 245 | if self.IsMirror: | 250 | if self.IsMirror: |
| 246 | value = p.bare_git.rev_parse(p.revisionExpr + '^0') | 251 | value = p.bare_git.rev_parse(p.revisionExpr + '^0') |
| @@ -252,8 +257,10 @@ class XmlManifest(object): | |||
| 252 | # isn't our value, and the if the default doesn't already have that | 257 | # isn't our value, and the if the default doesn't already have that |
| 253 | # covered. | 258 | # covered. |
| 254 | e.setAttribute('upstream', p.revisionExpr) | 259 | e.setAttribute('upstream', p.revisionExpr) |
| 255 | elif not d.revisionExpr or p.revisionExpr != d.revisionExpr: | 260 | else: |
| 256 | e.setAttribute('revision', p.revisionExpr) | 261 | revision = self.remotes[remoteName].revision or d.revisionExpr |
| 262 | if not revision or revision != p.revisionExpr: | ||
| 263 | e.setAttribute('revision', p.revisionExpr) | ||
| 257 | 264 | ||
| 258 | for c in p.copyfiles: | 265 | for c in p.copyfiles: |
| 259 | ce = doc.createElement('copyfile') | 266 | ce = doc.createElement('copyfile') |
| @@ -592,8 +599,11 @@ class XmlManifest(object): | |||
| 592 | review = node.getAttribute('review') | 599 | review = node.getAttribute('review') |
| 593 | if review == '': | 600 | if review == '': |
| 594 | review = None | 601 | review = None |
| 602 | revision = node.getAttribute('revision') | ||
| 603 | if revision == '': | ||
| 604 | revision = None | ||
| 595 | manifestUrl = self.manifestProject.config.GetString('remote.origin.url') | 605 | manifestUrl = self.manifestProject.config.GetString('remote.origin.url') |
| 596 | return _XmlRemote(name, alias, fetch, manifestUrl, review) | 606 | return _XmlRemote(name, alias, fetch, manifestUrl, review, revision) |
| 597 | 607 | ||
| 598 | def _ParseDefault(self, node): | 608 | def _ParseDefault(self, node): |
| 599 | """ | 609 | """ |
| @@ -686,7 +696,7 @@ class XmlManifest(object): | |||
| 686 | raise ManifestParseError("no remote for project %s within %s" % | 696 | raise ManifestParseError("no remote for project %s within %s" % |
| 687 | (name, self.manifestFile)) | 697 | (name, self.manifestFile)) |
| 688 | 698 | ||
| 689 | revisionExpr = node.getAttribute('revision') | 699 | revisionExpr = node.getAttribute('revision') or remote.revision |
| 690 | if not revisionExpr: | 700 | if not revisionExpr: |
| 691 | revisionExpr = self._default.revisionExpr | 701 | revisionExpr = self._default.revisionExpr |
| 692 | if not revisionExpr: | 702 | if not revisionExpr: |
| @@ -259,10 +259,12 @@ class RemoteSpec(object): | |||
| 259 | def __init__(self, | 259 | def __init__(self, |
| 260 | name, | 260 | name, |
| 261 | url = None, | 261 | url = None, |
| 262 | review = None): | 262 | review = None, |
| 263 | revision = None): | ||
| 263 | self.name = name | 264 | self.name = name |
| 264 | self.url = url | 265 | self.url = url |
| 265 | self.review = review | 266 | self.review = review |
| 267 | self.revision = revision | ||
| 266 | 268 | ||
| 267 | class RepoHook(object): | 269 | class RepoHook(object): |
| 268 | """A RepoHook contains information about a script to run as a hook. | 270 | """A RepoHook contains information about a script to run as a hook. |
| @@ -1658,7 +1660,8 @@ class Project(object): | |||
| 1658 | 1660 | ||
| 1659 | remote = RemoteSpec(self.remote.name, | 1661 | remote = RemoteSpec(self.remote.name, |
| 1660 | url = url, | 1662 | url = url, |
| 1661 | review = self.remote.review) | 1663 | review = self.remote.review, |
| 1664 | revision = self.remote.revision) | ||
| 1662 | subproject = Project(manifest = self.manifest, | 1665 | subproject = Project(manifest = self.manifest, |
| 1663 | name = name, | 1666 | name = name, |
| 1664 | remote = remote, | 1667 | remote = remote, |
