summaryrefslogtreecommitdiffstats
path: root/tests/test_subcmds_sync.py
diff options
context:
space:
mode:
authorJosip Sokcevic <sokcevic@google.com>2024-02-22 16:38:00 -0800
committerLUCI <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-02-27 17:28:33 +0000
commit5554572f02537b8646139d59ab520e59e1d5f7b3 (patch)
treed730611b566ec7f691619dc9a6c08b7e3d6b958e /tests/test_subcmds_sync.py
parent97ca50f5f946c39e8ecd00c7e6ea78e90b4bb6dd (diff)
downloadgit-repo-5554572f02537b8646139d59ab520e59e1d5f7b3.tar.gz
sync: Introduce git checkout levelsv2.42
If a repo manifest is updated so that project B is placed within a project A, and if project A had content in new B's location in the old checkout, then repo sync could break depending on checkout order, since B can't be checked out before A. This change introduces checkout levels which enforces right sequence of checkouts while still allowing for parallel checkout. In an example above, A will always be checked out first before B. BUG=b:325119758 TEST=./run_tests, manual sync on ChromeOS repository Change-Id: Ib3b5e4d2639ca56620a1e4c6bf76d7b1ab805250 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/410421 Tested-by: Josip Sokcevic <sokcevic@google.com> Reviewed-by: Greg Edelston <gredelston@google.com> Commit-Queue: Josip Sokcevic <sokcevic@google.com> Reviewed-by: Gavin Mak <gavinmak@google.com>
Diffstat (limited to 'tests/test_subcmds_sync.py')
-rw-r--r--tests/test_subcmds_sync.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/test_subcmds_sync.py b/tests/test_subcmds_sync.py
index af6bbef7..13e23e34 100644
--- a/tests/test_subcmds_sync.py
+++ b/tests/test_subcmds_sync.py
@@ -304,6 +304,32 @@ class LocalSyncState(unittest.TestCase):
304 self.assertEqual(self.state.GetFetchTime(projA), 5) 304 self.assertEqual(self.state.GetFetchTime(projA), 5)
305 305
306 306
307class SafeCheckoutOrder(unittest.TestCase):
308 def test_no_nested(self):
309 p_f = mock.MagicMock(relpath="f")
310 p_foo = mock.MagicMock(relpath="foo")
311 out = sync._SafeCheckoutOrder([p_f, p_foo])
312 self.assertEqual(out, [[p_f, p_foo]])
313
314 def test_basic_nested(self):
315 p_foo = p_foo = mock.MagicMock(relpath="foo")
316 p_foo_bar = mock.MagicMock(relpath="foo/bar")
317 out = sync._SafeCheckoutOrder([p_foo, p_foo_bar])
318 self.assertEqual(out, [[p_foo], [p_foo_bar]])
319
320 def test_complex_nested(self):
321 p_foo = mock.MagicMock(relpath="foo")
322 p_foo_bar = mock.MagicMock(relpath="foo/bar")
323 p_foo_bar_baz_baq = mock.MagicMock(relpath="foo/bar/baz/baq")
324 p_bar = mock.MagicMock(relpath="bar")
325 out = sync._SafeCheckoutOrder(
326 [p_foo_bar_baz_baq, p_foo, p_foo_bar, p_bar]
327 )
328 self.assertEqual(
329 out, [[p_bar, p_foo], [p_foo_bar], [p_foo_bar_baz_baq]]
330 )
331
332
307class GetPreciousObjectsState(unittest.TestCase): 333class GetPreciousObjectsState(unittest.TestCase):
308 """Tests for _GetPreciousObjectsState.""" 334 """Tests for _GetPreciousObjectsState."""
309 335