Просмотр исходного кода

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>
Shawn O. Pearce 17 лет назад
Родитель
Сommit
ae6e0949d1
4 измененных файлов с 26 добавлено и 6 удалено
  1. 10 3
      docs/manifest-format.txt
  2. 8 1
      manifest.py
  3. 3 1
      project.py
  4. 5 1
      remote.py

+ 10 - 3
docs/manifest-format.txt

@@ -23,9 +23,10 @@ following DTD:
   <!ELEMENT manifest (remote*, default?, project*)>
   <!ELEMENT manifest (remote*, default?, project*)>
 
 
   <!ELEMENT remote (EMPTY)>
   <!ELEMENT remote (EMPTY)>
-  <!ATTLIST remote name   ID    #REQUIRED>
-  <!ATTLIST remote fetch  CDATA #REQUIRED>
-  <!ATTLIST remote review CDATA #IMPLIED>
+  <!ATTLIST remote name         ID    #REQUIRED>
+  <!ATTLIST remote fetch        CDATA #REQUIRED>
+  <!ATTLIST remote review       CDATA #IMPLIED>
+  <!ATTLIST remote project-name CDATA #IMPLIED>
 
 
   <!ELEMENT default (EMPTY)>
   <!ELEMENT default (EMPTY)>
   <!ATTLIST default remote   IDREF #IMPLIED>
   <!ATTLIST default remote   IDREF #IMPLIED>
@@ -67,6 +68,12 @@ Attribute `review`: Hostname of the Gerrit server where reviews
 are uploaded to by `repo upload`.  This attribute is optional;
 are uploaded to by `repo upload`.  This attribute is optional;
 if not specified then `repo upload` will not function.
 if not specified then `repo upload` will not function.
 
 
+Attribute `project-name`: Specifies the name of this project used
+by the review server given in the review attribute of this element.
+Only permitted when the remote element is nested inside of a project
+element (see below).  If not given, defaults to the name supplied
+in the project's name attribute.
+
 
 
 Element default
 Element default
 ---------------
 ---------------

+ 8 - 1
manifest.py

@@ -206,10 +206,17 @@ class Manifest(object):
     name = self._reqatt(node, 'name')
     name = self._reqatt(node, 'name')
     fetch = self._reqatt(node, 'fetch')
     fetch = self._reqatt(node, 'fetch')
     review = node.getAttribute('review')
     review = node.getAttribute('review')
+    if review == '':
+      review = None
+
+    projectName = node.getAttribute('project-name')
+    if projectName == '':
+      projectName = None
 
 
     r = Remote(name=name,
     r = Remote(name=name,
                fetch=fetch,
                fetch=fetch,
-               review=review)
+               review=review,
+               projectName=projectName)
 
 
     for n in node.childNodes:
     for n in node.childNodes:
       if n.nodeName == 'require':
       if n.nodeName == 'require':

+ 3 - 1
project.py

@@ -904,7 +904,9 @@ class Project(object):
       remote = self.GetRemote(r.name)
       remote = self.GetRemote(r.name)
       remote.url = r.fetchUrl
       remote.url = r.fetchUrl
       remote.review = r.reviewUrl
       remote.review = r.reviewUrl
-      if remote.projectname is None:
+      if r.projectName:
+        remote.projectname = r.projectName
+      elif remote.projectname is None:
         remote.projectname = self.name
         remote.projectname = self.name
       remote.ResetFetch()
       remote.ResetFetch()
       remote.Save()
       remote.Save()

+ 5 - 1
remote.py

@@ -14,8 +14,12 @@
 # limitations under the License.
 # limitations under the License.
 
 
 class Remote(object):
 class Remote(object):
-  def __init__(self, name, fetch=None, review=None):
+  def __init__(self, name,
+               fetch=None,
+               review=None,
+               projectName=None):
     self.name = name
     self.name = name
     self.fetchUrl = fetch
     self.fetchUrl = fetch
     self.reviewUrl = review
     self.reviewUrl = review
+    self.projectName = projectName
     self.requiredCommits = []
     self.requiredCommits = []