summaryrefslogtreecommitdiffstats
path: root/tests/test_git_superproject.py
diff options
context:
space:
mode:
authorRaman Tenneti <rtenneti@google.com>2021-05-02 19:47:29 -0700
committerRaman Tenneti <rtenneti@google.com>2021-05-03 05:13:23 +0000
commitfeb28914bd17aacc2d251516e504a33f991f86c4 (patch)
tree66865f9cb25d6134acb02e63502636c366a963cd /tests/test_git_superproject.py
parentd1f3e149df4482ee24feee038c88df32fbc77380 (diff)
downloadgit-repo-feb28914bd17aacc2d251516e504a33f991f86c4.tar.gz
superproject: Don't update the commit ids of projects if remote is different.
1) Skip setting the revision id (commit id) for the projects whose remote doesn't match superproject's remote. 2) exp-superproject/superproject_override.xml includes local_manfiest's projects. When we load this XML, don't reload projects from local.xml (otherwise we will get duplicate projects errors). Tested the code with the following commands. $ ./run_tests -v + Test with local.xml $ repo_dev init -u sso://android.git.corp.google.com/platform/manifest -b master --use-superproject --partial-clone --clone-filter=blob:limit=10M && mkdir -p .repo/local_manifests && (gcertstatus -quiet=true || gcert) && ln -s /google/src/head/depot/google3/wireless/android/build_tools/aosp/manifests/mirror-aosp-master-with-vendor/local.xml .repo/local_manifests/local.xml $ repo_dev sync -c -j8 + Test without local.xml $ repo_dev init -u sso://android.git.corp.google.com/platform/manifest -b master --partial-clone --clone-filter=blob:limit=10M --repo-rev=main --use-superproject $ repo_dev sync -c -j8 Bug: [google internal] b/186395810 Change-Id: I4e9d4ac2d94a9fc0cef0ccd787b6310758009e86 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/304882 Tested-by: Raman Tenneti <rtenneti@google.com> Reviewed-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'tests/test_git_superproject.py')
-rw-r--r--tests/test_git_superproject.py70
1 files changed, 57 insertions, 13 deletions
diff --git a/tests/test_git_superproject.py b/tests/test_git_superproject.py
index 9550949b..5c1455f5 100644
--- a/tests/test_git_superproject.py
+++ b/tests/test_git_superproject.py
@@ -141,12 +141,12 @@ class SuperprojectTestCase(unittest.TestCase):
141 manifest_xml = fp.read() 141 manifest_xml = fp.read()
142 self.assertEqual( 142 self.assertEqual(
143 manifest_xml, 143 manifest_xml,
144 '<?xml version="1.0" ?><manifest>' + 144 '<?xml version="1.0" ?><manifest>'
145 '<remote name="default-remote" fetch="http://localhost"/>' + 145 '<remote name="default-remote" fetch="http://localhost"/>'
146 '<default remote="default-remote" revision="refs/heads/main"/>' + 146 '<default remote="default-remote" revision="refs/heads/main"/>'
147 '<project name="platform/art" path="art" revision="ABCDEF" ' + 147 '<project name="platform/art" path="art" revision="ABCDEF" '
148 'groups="notdefault,platform-' + self.platform + '"/>' + 148 'groups="notdefault,platform-' + self.platform + '"/>'
149 '<superproject name="superproject"/>' + 149 '<superproject name="superproject"/>'
150 '</manifest>') 150 '</manifest>')
151 151
152 def test_superproject_update_project_revision_id(self): 152 def test_superproject_update_project_revision_id(self):
@@ -168,13 +168,57 @@ class SuperprojectTestCase(unittest.TestCase):
168 manifest_xml = fp.read() 168 manifest_xml = fp.read()
169 self.assertEqual( 169 self.assertEqual(
170 manifest_xml, 170 manifest_xml,
171 '<?xml version="1.0" ?><manifest>' + 171 '<?xml version="1.0" ?><manifest>'
172 '<remote name="default-remote" fetch="http://localhost"/>' + 172 '<remote name="default-remote" fetch="http://localhost"/>'
173 '<default remote="default-remote" revision="refs/heads/main"/>' + 173 '<default remote="default-remote" revision="refs/heads/main"/>'
174 '<project name="platform/art" path="art" ' + 174 '<project name="platform/art" path="art" '
175 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" ' + 175 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" '
176 'groups="notdefault,platform-' + self.platform + '"/>' + 176 'groups="notdefault,platform-' + self.platform + '"/>'
177 '<superproject name="superproject"/>' + 177 '<superproject name="superproject"/>'
178 '</manifest>')
179
180 def test_superproject_update_project_revision_id_with_different_remotes(self):
181 """Test update of commit ids of a manifest with mutiple remotes."""
182 manifest = self.getXmlManifest("""
183<manifest>
184 <remote name="default-remote" fetch="http://localhost" />
185 <remote name="goog" fetch="http://localhost2" />
186 <default remote="default-remote" revision="refs/heads/main" />
187 <superproject name="superproject"/>
188 <project path="vendor/x" name="platform/vendor/x" remote="goog" groups="vendor"
189 revision="master-with-vendor" clone-depth="1" />
190 <project path="art" name="platform/art" groups="notdefault,platform-""" + self.platform + """
191 " /></manifest>
192""")
193 self.maxDiff = None
194 self._superproject = git_superproject.Superproject(manifest, self.repodir)
195 self.assertEqual(len(self._superproject._manifest.projects), 2)
196 projects = self._superproject._manifest.projects
197 data = ('160000 commit 2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea\tart\x00'
198 '160000 commit e9d25da64d8d365dbba7c8ee00fe8c4473fe9a06\tbootable/recovery\x00')
199 with mock.patch.object(self._superproject, '_Init', return_value=True):
200 with mock.patch.object(self._superproject, '_Fetch', return_value=True):
201 with mock.patch.object(self._superproject,
202 '_LsTree',
203 return_value=data):
204 # Create temporary directory so that it can write the file.
205 os.mkdir(self._superproject._superproject_path)
206 manifest_path = self._superproject.UpdateProjectsRevisionId(projects)
207 self.assertIsNotNone(manifest_path)
208 with open(manifest_path, 'r') as fp:
209 manifest_xml = fp.read()
210 self.assertEqual(
211 manifest_xml,
212 '<?xml version="1.0" ?><manifest>'
213 '<remote name="default-remote" fetch="http://localhost"/>'
214 '<remote name="goog" fetch="http://localhost2"/>'
215 '<default remote="default-remote" revision="refs/heads/main"/>'
216 '<project name="platform/art" path="art" '
217 'revision="2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea" '
218 'groups="notdefault,platform-' + self.platform + '"/>'
219 '<project name="platform/vendor/x" path="vendor/x" remote="goog" '
220 'revision="master-with-vendor" groups="vendor" clone-depth="1"/>'
221 '<superproject name="superproject"/>'
178 '</manifest>') 222 '</manifest>')
179 223
180 224