summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/manifest-format.txt7
-rw-r--r--git_config.py5
-rw-r--r--manifest_xml.py10
-rw-r--r--project.py4
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
125this remote. Each project's name is appended to this prefix to 126this remote. Each project's name is appended to this prefix to
126form the actual URL used to clone the project. 127form the actual URL used to clone the project.
127 128
129Attribute `pushurl`: The Git "push" URL prefix for all projects
130which use this remote. Each project's name is appended to this
131prefix to form the actual URL used to "git push" the project.
132This attribute is optional; if not specified then "git push"
133will use the same URL as the `fetch` attribute.
134
128Attribute `review`: Hostname of the Gerrit server where reviews 135Attribute `review`: Hostname of the Gerrit server where reviews
129are uploaded to by `repo upload`. This attribute is optional; 136are uploaded to by `repo upload`. This attribute is optional;
130if not specified then `repo upload` will not function. 137if 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 """
diff --git a/project.py b/project.py
index 0a86a718..142258e4 100644
--- a/project.py
+++ b/project.py
@@ -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