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') |