summaryrefslogtreecommitdiffstats
path: root/manifest_xml.py
diff options
context:
space:
mode:
Diffstat (limited to 'manifest_xml.py')
-rw-r--r--manifest_xml.py42
1 files changed, 40 insertions, 2 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index d496337c..3c8fadd6 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -32,7 +32,7 @@ else:
32from git_config import GitConfig 32from git_config import GitConfig
33from git_refs import R_HEADS, HEAD 33from git_refs import R_HEADS, HEAD
34from project import RemoteSpec, Project, MetaProject 34from project import RemoteSpec, Project, MetaProject
35from error import ManifestParseError 35from error import ManifestParseError, ManifestInvalidRevisionError
36 36
37MANIFEST_FILE_NAME = 'manifest.xml' 37MANIFEST_FILE_NAME = 'manifest.xml'
38LOCAL_MANIFEST_NAME = 'local_manifest.xml' 38LOCAL_MANIFEST_NAME = 'local_manifest.xml'
@@ -568,10 +568,11 @@ class XmlManifest(object):
568 gitdir = gitdir, 568 gitdir = gitdir,
569 objdir = gitdir, 569 objdir = gitdir,
570 worktree = None, 570 worktree = None,
571 relpath = None, 571 relpath = name or None,
572 revisionExpr = m.revisionExpr, 572 revisionExpr = m.revisionExpr,
573 revisionId = None) 573 revisionId = None)
574 self._projects[project.name] = [project] 574 self._projects[project.name] = [project]
575 self._paths[project.relpath] = project
575 576
576 def _ParseRemote(self, node): 577 def _ParseRemote(self, node):
577 """ 578 """
@@ -845,3 +846,40 @@ class XmlManifest(object):
845 raise ManifestParseError("no %s in <%s> within %s" % 846 raise ManifestParseError("no %s in <%s> within %s" %
846 (attname, node.nodeName, self.manifestFile)) 847 (attname, node.nodeName, self.manifestFile))
847 return v 848 return v
849
850 def projectsDiff(self, manifest):
851 """return the projects differences between two manifests.
852
853 The diff will be from self to given manifest.
854
855 """
856 fromProjects = self.paths
857 toProjects = manifest.paths
858
859 fromKeys = fromProjects.keys()
860 fromKeys.sort()
861 toKeys = toProjects.keys()
862 toKeys.sort()
863
864 diff = {'added': [], 'removed': [], 'changed': [], 'unreachable': []}
865
866 for proj in fromKeys:
867 if not proj in toKeys:
868 diff['removed'].append(fromProjects[proj])
869 else:
870 fromProj = fromProjects[proj]
871 toProj = toProjects[proj]
872 try:
873 fromRevId = fromProj.GetCommitRevisionId()
874 toRevId = toProj.GetCommitRevisionId()
875 except ManifestInvalidRevisionError:
876 diff['unreachable'].append((fromProj, toProj))
877 else:
878 if fromRevId != toRevId:
879 diff['changed'].append((fromProj, toProj))
880 toKeys.remove(proj)
881
882 for proj in toKeys:
883 diff['added'].append(toProjects[proj])
884
885 return diff