From cd81dd6403fc8dbe6ec5920c517d9083902c3c1f Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 26 Oct 2012 12:18:00 -0700 Subject: Revert "Represent git-submodule as nested projects" This reverts commit 69998b0c6ff724bf620480140ccce648fec7d6a9. Broke Android's non-gitmodule use case. Conflicts: project.py subcmds/sync.py Change-Id: I68ceeb63d8ee3b939f85a64736bdc81dfa352aed --- manifest_xml.py | 108 ++++++++++++++------------------------------------------ 1 file changed, 26 insertions(+), 82 deletions(-) (limited to 'manifest_xml.py') diff --git a/manifest_xml.py b/manifest_xml.py index 11e4ee54..dd163bed 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -180,25 +180,20 @@ class XmlManifest(object): root.appendChild(e) root.appendChild(doc.createTextNode('')) - def output_projects(parent, parent_node, projects): - for p in projects: - output_project(parent, parent_node, self.projects[p]) + sort_projects = list(self.projects.keys()) + sort_projects.sort() - def output_project(parent, parent_node, p): - if not p.MatchesGroups(groups): - return + for p in sort_projects: + p = self.projects[p] - name = p.name - relpath = p.relpath - if parent: - name = self._UnjoinName(parent.name, name) - relpath = self._UnjoinRelpath(parent.relpath, relpath) + if not p.MatchesGroups(groups): + continue e = doc.createElement('project') - parent_node.appendChild(e) - e.setAttribute('name', name) - if relpath != name: - e.setAttribute('path', relpath) + root.appendChild(e) + e.setAttribute('name', p.name) + if p.relpath != p.name: + e.setAttribute('path', p.relpath) if not d.remote or p.remote.name != d.remote.name: e.setAttribute('remote', p.remote.name) if peg_rev: @@ -236,16 +231,6 @@ class XmlManifest(object): if p.sync_c: e.setAttribute('sync-c', 'true') - if p.subprojects: - sort_projects = [subp.name for subp in p.subprojects] - sort_projects.sort() - output_projects(p, e, sort_projects) - - sort_projects = [key for key in self.projects.keys() - if not self.projects[key].parent] - sort_projects.sort() - output_projects(None, root, sort_projects) - if self._repo_hooks_project: root.appendChild(doc.createTextNode('')) e = doc.createElement('repo-hooks') @@ -398,15 +383,11 @@ class XmlManifest(object): for node in itertools.chain(*node_list): if node.nodeName == 'project': project = self._ParseProject(node) - def recursively_add_projects(project): - if self._projects.get(project.name): - raise ManifestParseError( - 'duplicate project %s in %s' % - (project.name, self.manifestFile)) - self._projects[project.name] = project - for subproject in project.subprojects: - recursively_add_projects(subproject) - recursively_add_projects(project) + if self._projects.get(project.name): + raise ManifestParseError( + 'duplicate project %s in %s' % + (project.name, self.manifestFile)) + self._projects[project.name] = project if node.nodeName == 'repo-hooks': # Get the name of the project and the (space-separated) list of enabled. repo_hooks_project = self._reqatt(node, 'in-project') @@ -556,19 +537,11 @@ class XmlManifest(object): return '\n'.join(cleanLines) - def _JoinName(self, parent_name, name): - return os.path.join(parent_name, name) - - def _UnjoinName(self, parent_name, name): - return os.path.relpath(name, parent_name) - - def _ParseProject(self, node, parent = None): + def _ParseProject(self, node): """ reads a element from the manifest file """ name = self._reqatt(node, 'name') - if parent: - name = self._JoinName(parent.name, name) remote = self._get_remote(node) if remote is None: @@ -613,66 +586,37 @@ class XmlManifest(object): groups = node.getAttribute('groups') groups = [x for x in re.split('[,\s]+', groups) if x] - if parent is None: - relpath, worktree, gitdir = self.GetProjectPaths(name, path) - else: - relpath, worktree, gitdir = self.GetSubprojectPaths(parent, path) - - default_groups = ['all', 'name:%s' % name, 'path:%s' % relpath] + default_groups = ['all', 'name:%s' % name, 'path:%s' % path] groups.extend(set(default_groups).difference(groups)) + if self.IsMirror: + worktree = None + gitdir = os.path.join(self.topdir, '%s.git' % name) + else: + worktree = os.path.join(self.topdir, path).replace('\\', '/') + gitdir = os.path.join(self.repodir, 'projects/%s.git' % path) + project = Project(manifest = self, name = name, remote = remote.ToRemoteSpec(name), gitdir = gitdir, worktree = worktree, - relpath = relpath, + relpath = path, revisionExpr = revisionExpr, revisionId = None, rebase = rebase, groups = groups, sync_c = sync_c, - upstream = upstream, - parent = parent) + upstream = upstream) for n in node.childNodes: if n.nodeName == 'copyfile': self._ParseCopyFile(project, n) if n.nodeName == 'annotation': self._ParseAnnotation(project, n) - if n.nodeName == 'project': - project.subprojects.append(self._ParseProject(n, parent = project)) return project - def GetProjectPaths(self, name, path): - relpath = path - if self.IsMirror: - worktree = None - gitdir = os.path.join(self.topdir, '%s.git' % name) - else: - worktree = os.path.join(self.topdir, path).replace('\\', '/') - gitdir = os.path.join(self.repodir, 'projects', '%s.git' % path) - return relpath, worktree, gitdir - - def GetSubprojectName(self, parent, submodule_path): - return os.path.join(parent.name, submodule_path) - - def _JoinRelpath(self, parent_relpath, relpath): - return os.path.join(parent_relpath, relpath) - - def _UnjoinRelpath(self, parent_relpath, relpath): - return os.path.relpath(relpath, parent_relpath) - - def GetSubprojectPaths(self, parent, path): - relpath = self._JoinRelpath(parent.relpath, path) - gitdir = os.path.join(parent.gitdir, 'subprojects', '%s.git' % path) - if self.IsMirror: - worktree = None - else: - worktree = os.path.join(parent.worktree, path).replace('\\', '/') - return relpath, worktree, gitdir - def _ParseCopyFile(self, project, node): src = self._reqatt(node, 'src') dest = self._reqatt(node, 'dest') -- cgit v1.2.3-54-g00ecf