summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGavin Mak <gavinmak@google.com>2023-08-22 03:10:01 +0000
committerLUCI <gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-08-22 17:13:43 +0000
commit321b7934b5e8e316b7fa4dc306e055d3d6d351ff (patch)
treed05109fa2394c764ab13d9bbe7937eead3342550
parent5a3a5f7cec40c70d8c5ceb473f828e1149724962 (diff)
downloadgit-repo-321b7934b5e8e316b7fa4dc306e055d3d6d351ff.tar.gz
sync: Ignore repo project when checking partial syncs
The repo project is fetched at most once a day and should be ignored when checking if the tree is partially synced. Bug: b/286126621, b/271507654 Change-Id: I684ed1669c3b3b9605162f8cc9d57185bb3dfe8e Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/383494 Commit-Queue: Gavin Mak <gavinmak@google.com> Tested-by: Gavin Mak <gavinmak@google.com> Reviewed-by: Josip Sokcevic <sokcevic@google.com>
-rw-r--r--subcmds/sync.py6
-rw-r--r--tests/test_subcmds_sync.py22
2 files changed, 25 insertions, 3 deletions
diff --git a/subcmds/sync.py b/subcmds/sync.py
index df536892..bbe03722 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -2007,7 +2007,11 @@ class _LocalSyncState(object):
2007 """Return whether a partial sync state is detected.""" 2007 """Return whether a partial sync state is detected."""
2008 self._Load() 2008 self._Load()
2009 prev_checkout_t = None 2009 prev_checkout_t = None
2010 for data in self._state.values(): 2010 for path, data in self._state.items():
2011 if path == self._manifest.repoProject.relpath:
2012 # The repo project isn't included in most syncs so we should
2013 # ignore it here.
2014 continue
2011 checkout_t = data.get(self._LAST_CHECKOUT) 2015 checkout_t = data.get(self._LAST_CHECKOUT)
2012 if not checkout_t: 2016 if not checkout_t:
2013 return True 2017 return True
diff --git a/tests/test_subcmds_sync.py b/tests/test_subcmds_sync.py
index 7cc93e39..b43fe18e 100644
--- a/tests/test_subcmds_sync.py
+++ b/tests/test_subcmds_sync.py
@@ -119,6 +119,7 @@ class LocalSyncState(unittest.TestCase):
119 self.repodir = tempfile.mkdtemp(".repo") 119 self.repodir = tempfile.mkdtemp(".repo")
120 self.manifest = mock.MagicMock( 120 self.manifest = mock.MagicMock(
121 repodir=self.repodir, 121 repodir=self.repodir,
122 repoProject=mock.MagicMock(relpath=".repo/repo"),
122 ) 123 )
123 self.state = self._new_state() 124 self.state = self._new_state()
124 125
@@ -126,8 +127,8 @@ class LocalSyncState(unittest.TestCase):
126 """Common teardown.""" 127 """Common teardown."""
127 shutil.rmtree(self.repodir) 128 shutil.rmtree(self.repodir)
128 129
129 def _new_state(self): 130 def _new_state(self, time=_TIME):
130 with mock.patch("time.time", return_value=self._TIME): 131 with mock.patch("time.time", return_value=time):
131 return sync._LocalSyncState(self.manifest) 132 return sync._LocalSyncState(self.manifest)
132 133
133 def test_set(self): 134 def test_set(self):
@@ -202,6 +203,23 @@ class LocalSyncState(unittest.TestCase):
202 self.state.SetCheckoutTime(projB) 203 self.state.SetCheckoutTime(projB)
203 self.assertEqual(self.state.IsPartiallySynced(), True) 204 self.assertEqual(self.state.IsPartiallySynced(), True)
204 205
206 def test_ignore_repo_project(self):
207 """Sync data for repo project is ignored when checking partial sync."""
208 p = mock.MagicMock(relpath="projA")
209 self.state.SetFetchTime(p)
210 self.state.SetCheckoutTime(p)
211 self.state.SetFetchTime(self.manifest.repoProject)
212 self.state.Save()
213 self.assertEqual(self.state.IsPartiallySynced(), False)
214
215 self.state = self._new_state(self._TIME + 1)
216 self.state.SetFetchTime(self.manifest.repoProject)
217 self.assertEqual(
218 self.state.GetFetchTime(self.manifest.repoProject), self._TIME + 1
219 )
220 self.assertEqual(self.state.GetFetchTime(p), self._TIME)
221 self.assertEqual(self.state.IsPartiallySynced(), False)
222
205 def test_nonexistent_project(self): 223 def test_nonexistent_project(self):
206 """Unsaved projects don't have data.""" 224 """Unsaved projects don't have data."""
207 p = mock.MagicMock(relpath="projC") 225 p = mock.MagicMock(relpath="projC")