mirror of
https://gerrit.googlesource.com/git-repo
synced 2025-06-26 20:17:52 +00:00
sync: Track last completed fetch/checkout
Save the latest time any project is fetched and checked out. This will be used to detect partial checkouts. Bug: b/286126621 Change-Id: I53b264dc70ba168d506076dbd693ef79a696b61d Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/380514 Commit-Queue: Gavin Mak <gavinmak@google.com> Reviewed-by: Joanna Wang <jojwang@google.com> Tested-by: Gavin Mak <gavinmak@google.com>
This commit is contained in:
@ -14,6 +14,8 @@
|
||||
"""Unittests for the subcmds/sync.py module."""
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
@ -104,6 +106,79 @@ def test_cli_jobs(argv, jobs_manifest, jobs, jobs_net, jobs_check):
|
||||
assert opts.jobs_checkout == jobs_check
|
||||
|
||||
|
||||
class LocalSyncState(unittest.TestCase):
|
||||
"""Tests for _LocalSyncState."""
|
||||
|
||||
_TIME = 10
|
||||
|
||||
def setUp(self):
|
||||
"""Common setup."""
|
||||
self.repodir = tempfile.mkdtemp(".repo")
|
||||
self.manifest = mock.MagicMock(
|
||||
repodir=self.repodir,
|
||||
)
|
||||
self.state = self._new_state()
|
||||
|
||||
def tearDown(self):
|
||||
"""Common teardown."""
|
||||
shutil.rmtree(self.repodir)
|
||||
|
||||
def _new_state(self):
|
||||
with mock.patch("time.time", return_value=self._TIME):
|
||||
return sync._LocalSyncState(self.manifest)
|
||||
|
||||
def test_set(self):
|
||||
"""Times are set."""
|
||||
p = mock.MagicMock(relpath="projA")
|
||||
self.state.SetFetchTime(p)
|
||||
self.state.SetCheckoutTime(p)
|
||||
self.assertEqual(self.state.GetFetchTime(p), self._TIME)
|
||||
self.assertEqual(self.state.GetCheckoutTime(p), self._TIME)
|
||||
|
||||
def test_update(self):
|
||||
"""Times are updated."""
|
||||
with open(self.state._path, "w") as f:
|
||||
f.write(
|
||||
"""
|
||||
{
|
||||
"projB": {
|
||||
"last_fetch": 5,
|
||||
"last_checkout": 7
|
||||
}
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
# Initialize state to read from the new file.
|
||||
self.state = self._new_state()
|
||||
projA = mock.MagicMock(relpath="projA")
|
||||
projB = mock.MagicMock(relpath="projB")
|
||||
self.assertEqual(self.state.GetFetchTime(projA), None)
|
||||
self.assertEqual(self.state.GetFetchTime(projB), 5)
|
||||
self.assertEqual(self.state.GetCheckoutTime(projB), 7)
|
||||
|
||||
self.state.SetFetchTime(projA)
|
||||
self.state.SetFetchTime(projB)
|
||||
self.assertEqual(self.state.GetFetchTime(projA), self._TIME)
|
||||
self.assertEqual(self.state.GetFetchTime(projB), self._TIME)
|
||||
self.assertEqual(self.state.GetCheckoutTime(projB), 7)
|
||||
|
||||
def test_save_to_file(self):
|
||||
"""Data is saved under repodir."""
|
||||
p = mock.MagicMock(relpath="projA")
|
||||
self.state.SetFetchTime(p)
|
||||
self.state.Save()
|
||||
self.assertEqual(
|
||||
os.listdir(self.repodir), [".repo_localsyncstate.json"]
|
||||
)
|
||||
|
||||
def test_nonexistent_project(self):
|
||||
"""Unsaved projects don't have data."""
|
||||
p = mock.MagicMock(relpath="projC")
|
||||
self.assertEqual(self.state.GetFetchTime(p), None)
|
||||
self.assertEqual(self.state.GetCheckoutTime(p), None)
|
||||
|
||||
|
||||
class GetPreciousObjectsState(unittest.TestCase):
|
||||
"""Tests for _GetPreciousObjectsState."""
|
||||
|
||||
|
Reference in New Issue
Block a user