summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2008-11-06 10:25:35 -0800
committerShawn O. Pearce <sop@google.com>2008-11-06 11:23:06 -0800
commitae6e0949d187c35d79dbc0b21788fdbb2c65bf78 (patch)
tree7a825c0e8cb24f0df512f62f4e44970026641dda
parent339ba9f6f70b1733f89a5ff89d5f155389a04094 (diff)
downloadgit-repo-ae6e0949d187c35d79dbc0b21788fdbb2c65bf78.tar.gz
Add <remote project-name="..."> attribute within projects
By setting a project-name on a remote nested within a project forks of a project like the Linux kernel can be easily handled by fetching all relevant forks into the same client side project under different remote names. Developers can create branches off different remotes using `git checkout --track -b $myname $remote/$branch` and later `repo upload` automatically redirects to the proper fork project in the code review server. Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--docs/manifest-format.txt13
-rw-r--r--manifest.py9
-rw-r--r--project.py4
-rw-r--r--remote.py6
4 files changed, 26 insertions, 6 deletions
diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt
index 409524bb..2b49d466 100644
--- a/docs/manifest-format.txt
+++ b/docs/manifest-format.txt
@@ -23,9 +23,10 @@ following DTD:
23 <!ELEMENT manifest (remote*, default?, project*)> 23 <!ELEMENT manifest (remote*, default?, project*)>
24 24
25 <!ELEMENT remote (EMPTY)> 25 <!ELEMENT remote (EMPTY)>
26 <!ATTLIST remote name ID #REQUIRED> 26 <!ATTLIST remote name ID #REQUIRED>
27 <!ATTLIST remote fetch CDATA #REQUIRED> 27 <!ATTLIST remote fetch CDATA #REQUIRED>
28 <!ATTLIST remote review CDATA #IMPLIED> 28 <!ATTLIST remote review CDATA #IMPLIED>
29 <!ATTLIST remote project-name CDATA #IMPLIED>
29 30
30 <!ELEMENT default (EMPTY)> 31 <!ELEMENT default (EMPTY)>
31 <!ATTLIST default remote IDREF #IMPLIED> 32 <!ATTLIST default remote IDREF #IMPLIED>
@@ -67,6 +68,12 @@ Attribute `review`: Hostname of the Gerrit server where reviews
67are uploaded to by `repo upload`. This attribute is optional; 68are uploaded to by `repo upload`. This attribute is optional;
68if not specified then `repo upload` will not function. 69if not specified then `repo upload` will not function.
69 70
71Attribute `project-name`: Specifies the name of this project used
72by the review server given in the review attribute of this element.
73Only permitted when the remote element is nested inside of a project
74element (see below). If not given, defaults to the name supplied
75in the project's name attribute.
76
70 77
71Element default 78Element default
72--------------- 79---------------
diff --git a/manifest.py b/manifest.py
index ea68b682..65455687 100644
--- a/manifest.py
+++ b/manifest.py
@@ -206,10 +206,17 @@ class Manifest(object):
206 name = self._reqatt(node, 'name') 206 name = self._reqatt(node, 'name')
207 fetch = self._reqatt(node, 'fetch') 207 fetch = self._reqatt(node, 'fetch')
208 review = node.getAttribute('review') 208 review = node.getAttribute('review')
209 if review == '':
210 review = None
211
212 projectName = node.getAttribute('project-name')
213 if projectName == '':
214 projectName = None
209 215
210 r = Remote(name=name, 216 r = Remote(name=name,
211 fetch=fetch, 217 fetch=fetch,
212 review=review) 218 review=review,
219 projectName=projectName)
213 220
214 for n in node.childNodes: 221 for n in node.childNodes:
215 if n.nodeName == 'require': 222 if n.nodeName == 'require':
diff --git a/project.py b/project.py
index 2a4adf73..9509cb98 100644
--- a/project.py
+++ b/project.py
@@ -904,7 +904,9 @@ class Project(object):
904 remote = self.GetRemote(r.name) 904 remote = self.GetRemote(r.name)
905 remote.url = r.fetchUrl 905 remote.url = r.fetchUrl
906 remote.review = r.reviewUrl 906 remote.review = r.reviewUrl
907 if remote.projectname is None: 907 if r.projectName:
908 remote.projectname = r.projectName
909 elif remote.projectname is None:
908 remote.projectname = self.name 910 remote.projectname = self.name
909 remote.ResetFetch() 911 remote.ResetFetch()
910 remote.Save() 912 remote.Save()
diff --git a/remote.py b/remote.py
index 27a8f7a7..3bc30a59 100644
--- a/remote.py
+++ b/remote.py
@@ -14,8 +14,12 @@
14# limitations under the License. 14# limitations under the License.
15 15
16class Remote(object): 16class Remote(object):
17 def __init__(self, name, fetch=None, review=None): 17 def __init__(self, name,
18 fetch=None,
19 review=None,
20 projectName=None):
18 self.name = name 21 self.name = name
19 self.fetchUrl = fetch 22 self.fetchUrl = fetch
20 self.reviewUrl = review 23 self.reviewUrl = review
24 self.projectName = projectName
21 self.requiredCommits = [] 25 self.requiredCommits = []