diff options
Diffstat (limited to 'manifest.py')
| -rw-r--r-- | manifest.py | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/manifest.py b/manifest.py index 32a7e513..da2bb25f 100644 --- a/manifest.py +++ b/manifest.py | |||
| @@ -18,7 +18,7 @@ import sys | |||
| 18 | import xml.dom.minidom | 18 | import xml.dom.minidom |
| 19 | 19 | ||
| 20 | from git_config import GitConfig, IsId | 20 | from git_config import GitConfig, IsId |
| 21 | from project import Project, MetaProject, R_HEADS | 21 | from project import Project, MetaProject, R_HEADS, HEAD |
| 22 | from remote import Remote | 22 | from remote import Remote |
| 23 | from error import ManifestParseError | 23 | from error import ManifestParseError |
| 24 | 24 | ||
| @@ -73,6 +73,76 @@ class Manifest(object): | |||
| 73 | except OSError, e: | 73 | except OSError, e: |
| 74 | raise ManifestParseError('cannot link manifest %s' % name) | 74 | raise ManifestParseError('cannot link manifest %s' % name) |
| 75 | 75 | ||
| 76 | def _RemoteToXml(self, r, doc, root): | ||
| 77 | e = doc.createElement('remote') | ||
| 78 | root.appendChild(e) | ||
| 79 | e.setAttribute('name', r.name) | ||
| 80 | e.setAttribute('fetch', r.fetchUrl) | ||
| 81 | if r.reviewUrl is not None: | ||
| 82 | e.setAttribute('review', r.reviewUrl) | ||
| 83 | if r.projectName is not None: | ||
| 84 | e.setAttribute('project-name', r.projectName) | ||
| 85 | |||
| 86 | def Save(self, fd, peg_rev=False): | ||
| 87 | """Write the current manifest out to the given file descriptor. | ||
| 88 | """ | ||
| 89 | doc = xml.dom.minidom.Document() | ||
| 90 | root = doc.createElement('manifest') | ||
| 91 | doc.appendChild(root) | ||
| 92 | |||
| 93 | d = self.default | ||
| 94 | sort_remotes = list(self.remotes.keys()) | ||
| 95 | sort_remotes.sort() | ||
| 96 | |||
| 97 | for r in sort_remotes: | ||
| 98 | self._RemoteToXml(self.remotes[r], doc, root) | ||
| 99 | if self.remotes: | ||
| 100 | root.appendChild(doc.createTextNode('')) | ||
| 101 | |||
| 102 | have_default = False | ||
| 103 | e = doc.createElement('default') | ||
| 104 | if d.remote: | ||
| 105 | have_default = True | ||
| 106 | e.setAttribute('remote', d.remote.name) | ||
| 107 | if d.revision: | ||
| 108 | have_default = True | ||
| 109 | e.setAttribute('revision', d.revision) | ||
| 110 | if have_default: | ||
| 111 | root.appendChild(e) | ||
| 112 | root.appendChild(doc.createTextNode('')) | ||
| 113 | |||
| 114 | sort_projects = list(self.projects.keys()) | ||
| 115 | sort_projects.sort() | ||
| 116 | |||
| 117 | for p in sort_projects: | ||
| 118 | p = self.projects[p] | ||
| 119 | e = doc.createElement('project') | ||
| 120 | root.appendChild(e) | ||
| 121 | e.setAttribute('name', p.name) | ||
| 122 | if p.relpath != p.name: | ||
| 123 | e.setAttribute('path', p.relpath) | ||
| 124 | if not d.remote or p.remote.name != d.remote.name: | ||
| 125 | e.setAttribute('remote', p.remote.name) | ||
| 126 | if peg_rev: | ||
| 127 | if self.IsMirror: | ||
| 128 | e.setAttribute('revision', | ||
| 129 | p.bare_git.rev_parse(p.revision + '^0')) | ||
| 130 | else: | ||
| 131 | e.setAttribute('revision', | ||
| 132 | p.work_git.rev_parse(HEAD + '^0')) | ||
| 133 | elif not d.revision or p.revision != d.revision: | ||
| 134 | e.setAttribute('revision', p.revision) | ||
| 135 | |||
| 136 | for r in p.extraRemotes: | ||
| 137 | self._RemoteToXml(p.extraRemotes[r], doc, e) | ||
| 138 | for c in p.copyfiles: | ||
| 139 | ce = doc.createElement('copyfile') | ||
| 140 | ce.setAttribute('src', c.src) | ||
| 141 | ce.setAttribute('dest', c.dest) | ||
| 142 | e.appendChild(ce) | ||
| 143 | |||
| 144 | doc.writexml(fd, '', ' ', '\n', 'UTF-8') | ||
| 145 | |||
| 76 | @property | 146 | @property |
| 77 | def projects(self): | 147 | def projects(self): |
| 78 | self._Load() | 148 | self._Load() |
| @@ -324,7 +394,7 @@ class Manifest(object): | |||
| 324 | if not self.IsMirror: | 394 | if not self.IsMirror: |
| 325 | # src is project relative; | 395 | # src is project relative; |
| 326 | # dest is relative to the top of the tree | 396 | # dest is relative to the top of the tree |
| 327 | project.AddCopyFile(src, os.path.join(self.topdir, dest)) | 397 | project.AddCopyFile(src, dest, os.path.join(self.topdir, dest)) |
| 328 | 398 | ||
| 329 | def _get_remote(self, node): | 399 | def _get_remote(self, node): |
| 330 | name = node.getAttribute('remote') | 400 | name = node.getAttribute('remote') |
