diff --git a/git_superproject.py b/git_superproject.py
index 8f1e04d..0c47706 100644
--- a/git_superproject.py
+++ b/git_superproject.py
@@ -298,6 +298,9 @@ class Superproject(object):
path = project.relpath
if not path:
return True
+ # Skip the project with revisionId.
+ if project.revisionId:
+ return True
# Skip the project if it comes from the local manifest.
return any(s.startswith(LOCAL_MANIFEST_GROUP_PREFIX) for s in project.groups)
diff --git a/tests/test_git_superproject.py b/tests/test_git_superproject.py
index d612f4e..c3f8853 100644
--- a/tests/test_git_superproject.py
+++ b/tests/test_git_superproject.py
@@ -294,8 +294,7 @@ class SuperprojectTestCase(unittest.TestCase):
self.git_event_log)
self.assertEqual(len(self._superproject._manifest.projects), 2)
projects = self._superproject._manifest.projects
- data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00'
- '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tbootable/recovery\x00')
+ data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00')
with mock.patch.object(self._superproject, '_Init', return_value=True):
with mock.patch.object(self._superproject, '_Fetch', return_value=True):
with mock.patch.object(self._superproject,
@@ -324,6 +323,54 @@ class SuperprojectTestCase(unittest.TestCase):
''
'')
+ def test_superproject_update_project_revision_id_with_pinned_manifest(self):
+ """Test update of commit ids of a pinned manifest."""
+ manifest = self.getXmlManifest("""
+
+
+
+
+
+
+
+""")
+ self.maxDiff = None
+ self._superproject = git_superproject.Superproject(manifest, self.repodir,
+ self.git_event_log)
+ self.assertEqual(len(self._superproject._manifest.projects), 3)
+ projects = self._superproject._manifest.projects
+ data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00'
+ '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tvendor/x\x00')
+ with mock.patch.object(self._superproject, '_Init', return_value=True):
+ with mock.patch.object(self._superproject, '_Fetch', return_value=True):
+ with mock.patch.object(self._superproject,
+ '_LsTree',
+ return_value=data):
+ # Create temporary directory so that it can write the file.
+ os.mkdir(self._superproject._superproject_path)
+ update_result = self._superproject.UpdateProjectsRevisionId(projects)
+ self.assertIsNotNone(update_result.manifest_path)
+ self.assertFalse(update_result.fatal)
+ with open(update_result.manifest_path, 'r') as fp:
+ manifest_xml_data = fp.read()
+ # Verify platform/vendor/x's project revision hasn't changed.
+ self.assertEqual(
+ sort_attributes(manifest_xml_data),
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ '')
+
if __name__ == '__main__':
unittest.main()