diff options
-rw-r--r-- | docs/manifest-format.txt | 7 | ||||
-rw-r--r-- | git_config.py | 5 | ||||
-rw-r--r-- | manifest_xml.py | 10 | ||||
-rw-r--r-- | project.py | 4 |
4 files changed, 25 insertions, 1 deletions
diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 8fd9137c..2a07f199 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt | |||
@@ -35,6 +35,7 @@ following DTD: | |||
35 | <!ATTLIST remote name ID #REQUIRED> | 35 | <!ATTLIST remote name ID #REQUIRED> |
36 | <!ATTLIST remote alias CDATA #IMPLIED> | 36 | <!ATTLIST remote alias CDATA #IMPLIED> |
37 | <!ATTLIST remote fetch CDATA #REQUIRED> | 37 | <!ATTLIST remote fetch CDATA #REQUIRED> |
38 | <!ATTLIST remote pushurl CDATA #IMPLIED> | ||
38 | <!ATTLIST remote review CDATA #IMPLIED> | 39 | <!ATTLIST remote review CDATA #IMPLIED> |
39 | <!ATTLIST remote revision CDATA #IMPLIED> | 40 | <!ATTLIST remote revision CDATA #IMPLIED> |
40 | 41 | ||
@@ -125,6 +126,12 @@ Attribute `fetch`: The Git URL prefix for all projects which use | |||
125 | this remote. Each project's name is appended to this prefix to | 126 | this remote. Each project's name is appended to this prefix to |
126 | form the actual URL used to clone the project. | 127 | form the actual URL used to clone the project. |
127 | 128 | ||
129 | Attribute `pushurl`: The Git "push" URL prefix for all projects | ||
130 | which use this remote. Each project's name is appended to this | ||
131 | prefix to form the actual URL used to "git push" the project. | ||
132 | This attribute is optional; if not specified then "git push" | ||
133 | will use the same URL as the `fetch` attribute. | ||
134 | |||
128 | Attribute `review`: Hostname of the Gerrit server where reviews | 135 | Attribute `review`: Hostname of the Gerrit server where reviews |
129 | are uploaded to by `repo upload`. This attribute is optional; | 136 | are uploaded to by `repo upload`. This attribute is optional; |
130 | if not specified then `repo upload` will not function. | 137 | if not specified then `repo upload` will not function. |
diff --git a/git_config.py b/git_config.py index f76cd04e..f474a1c9 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -572,6 +572,7 @@ class Remote(object): | |||
572 | self._config = config | 572 | self._config = config |
573 | self.name = name | 573 | self.name = name |
574 | self.url = self._Get('url') | 574 | self.url = self._Get('url') |
575 | self.pushUrl = self._Get('pushurl') | ||
575 | self.review = self._Get('review') | 576 | self.review = self._Get('review') |
576 | self.projectname = self._Get('projectname') | 577 | self.projectname = self._Get('projectname') |
577 | self.fetch = list(map(RefSpec.FromString, | 578 | self.fetch = list(map(RefSpec.FromString, |
@@ -701,6 +702,10 @@ class Remote(object): | |||
701 | """Save this remote to the configuration. | 702 | """Save this remote to the configuration. |
702 | """ | 703 | """ |
703 | self._Set('url', self.url) | 704 | self._Set('url', self.url) |
705 | if self.pushUrl is not None: | ||
706 | self._Set('pushurl', self.pushUrl + '/' + self.projectname) | ||
707 | else: | ||
708 | self._Set('pushurl', self.pushUrl) | ||
704 | self._Set('review', self.review) | 709 | self._Set('review', self.review) |
705 | self._Set('projectname', self.projectname) | 710 | self._Set('projectname', self.projectname) |
706 | self._Set('fetch', list(map(str, self.fetch))) | 711 | self._Set('fetch', list(map(str, self.fetch))) |
diff --git a/manifest_xml.py b/manifest_xml.py index 295493de..9c882af6 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
@@ -64,11 +64,13 @@ class _XmlRemote(object): | |||
64 | name, | 64 | name, |
65 | alias=None, | 65 | alias=None, |
66 | fetch=None, | 66 | fetch=None, |
67 | pushUrl=None, | ||
67 | manifestUrl=None, | 68 | manifestUrl=None, |
68 | review=None, | 69 | review=None, |
69 | revision=None): | 70 | revision=None): |
70 | self.name = name | 71 | self.name = name |
71 | self.fetchUrl = fetch | 72 | self.fetchUrl = fetch |
73 | self.pushUrl = pushUrl | ||
72 | self.manifestUrl = manifestUrl | 74 | self.manifestUrl = manifestUrl |
73 | self.remoteAlias = alias | 75 | self.remoteAlias = alias |
74 | self.reviewUrl = review | 76 | self.reviewUrl = review |
@@ -104,6 +106,7 @@ class _XmlRemote(object): | |||
104 | remoteName = self.remoteAlias | 106 | remoteName = self.remoteAlias |
105 | return RemoteSpec(remoteName, | 107 | return RemoteSpec(remoteName, |
106 | url=url, | 108 | url=url, |
109 | pushUrl=self.pushUrl, | ||
107 | review=self.reviewUrl, | 110 | review=self.reviewUrl, |
108 | orig_name=self.name) | 111 | orig_name=self.name) |
109 | 112 | ||
@@ -160,6 +163,8 @@ class XmlManifest(object): | |||
160 | root.appendChild(e) | 163 | root.appendChild(e) |
161 | e.setAttribute('name', r.name) | 164 | e.setAttribute('name', r.name) |
162 | e.setAttribute('fetch', r.fetchUrl) | 165 | e.setAttribute('fetch', r.fetchUrl) |
166 | if r.pushUrl is not None: | ||
167 | e.setAttribute('pushurl', r.pushUrl) | ||
163 | if r.remoteAlias is not None: | 168 | if r.remoteAlias is not None: |
164 | e.setAttribute('alias', r.remoteAlias) | 169 | e.setAttribute('alias', r.remoteAlias) |
165 | if r.reviewUrl is not None: | 170 | if r.reviewUrl is not None: |
@@ -639,6 +644,9 @@ class XmlManifest(object): | |||
639 | if alias == '': | 644 | if alias == '': |
640 | alias = None | 645 | alias = None |
641 | fetch = self._reqatt(node, 'fetch') | 646 | fetch = self._reqatt(node, 'fetch') |
647 | pushUrl = node.getAttribute('pushurl') | ||
648 | if pushUrl == '': | ||
649 | pushUrl = None | ||
642 | review = node.getAttribute('review') | 650 | review = node.getAttribute('review') |
643 | if review == '': | 651 | if review == '': |
644 | review = None | 652 | review = None |
@@ -646,7 +654,7 @@ class XmlManifest(object): | |||
646 | if revision == '': | 654 | if revision == '': |
647 | revision = None | 655 | revision = None |
648 | manifestUrl = self.manifestProject.config.GetString('remote.origin.url') | 656 | manifestUrl = self.manifestProject.config.GetString('remote.origin.url') |
649 | return _XmlRemote(name, alias, fetch, manifestUrl, review, revision) | 657 | return _XmlRemote(name, alias, fetch, pushUrl, manifestUrl, review, revision) |
650 | 658 | ||
651 | def _ParseDefault(self, node): | 659 | def _ParseDefault(self, node): |
652 | """ | 660 | """ |
@@ -320,11 +320,13 @@ class RemoteSpec(object): | |||
320 | def __init__(self, | 320 | def __init__(self, |
321 | name, | 321 | name, |
322 | url=None, | 322 | url=None, |
323 | pushUrl=None, | ||
323 | review=None, | 324 | review=None, |
324 | revision=None, | 325 | revision=None, |
325 | orig_name=None): | 326 | orig_name=None): |
326 | self.name = name | 327 | self.name = name |
327 | self.url = url | 328 | self.url = url |
329 | self.pushUrl = pushUrl | ||
328 | self.review = review | 330 | self.review = review |
329 | self.revision = revision | 331 | self.revision = revision |
330 | self.orig_name = orig_name | 332 | self.orig_name = orig_name |
@@ -1825,6 +1827,7 @@ class Project(object): | |||
1825 | 1827 | ||
1826 | remote = RemoteSpec(self.remote.name, | 1828 | remote = RemoteSpec(self.remote.name, |
1827 | url=url, | 1829 | url=url, |
1830 | pushUrl=self.remote.pushUrl, | ||
1828 | review=self.remote.review, | 1831 | review=self.remote.review, |
1829 | revision=self.remote.revision) | 1832 | revision=self.remote.revision) |
1830 | subproject = Project(manifest=self.manifest, | 1833 | subproject = Project(manifest=self.manifest, |
@@ -2346,6 +2349,7 @@ class Project(object): | |||
2346 | if self.remote.url: | 2349 | if self.remote.url: |
2347 | remote = self.GetRemote(self.remote.name) | 2350 | remote = self.GetRemote(self.remote.name) |
2348 | remote.url = self.remote.url | 2351 | remote.url = self.remote.url |
2352 | remote.pushUrl = self.remote.pushUrl | ||
2349 | remote.review = self.remote.review | 2353 | remote.review = self.remote.review |
2350 | remote.projectname = self.name | 2354 | remote.projectname = self.name |
2351 | 2355 | ||