From 7954de13b79182e299163307c430ad96f9cdbd38 Mon Sep 17 00:00:00 2001 From: Raman Tenneti Date: Wed, 28 Jul 2021 14:36:49 -0700 Subject: sync: Added logging of repo sync state and config options for analysis. git_config.py: + Added SyncAnalysisState class, which saves the following data into the config object. ++ sys.argv, options, superproject's logging data. ++ repo.*, branch.* and remote.* parameters from config object. ++ current time as synctime. ++ Version number of the object. + All the keys for the above data are prepended with 'repo.syncstate.' + Added GetSyncAnalysisStateData and UpdateSyncAnalysisState methods to GitConfig object to save/get the above data. git_trace2_event_log.py: + Added LogConfigEvents method with code from DefParamRepoEvents to log events. sync.py: + superproject_logging_data is a dictionary that collects all the superproject data that is to be logged as trace2 event. + Sync at the end logs the previously saved syncstate.* parameters as previous_sync_state. Then it calls config's UpdateSyncAnalysisState to save and log all the current options, superproject logged data. docs/internal-fs-layout.md: + Added doc string explaining [repo.syncstate ...] sections of .repo/manifests.git/config file. test_git_config.py: + Added unit test for the new methods of GitConfig object. Tested: $ ./run_tests $ repo_dev init --use-superproject -u https://android.googlesource.com/platform/manifest Tested it by running the following command multiple times. $ repo_dev sync -j 20 repo sync has finished successfully Verified config file has [syncstate ...] data saved. Bug: [google internal] b/188573450 Change-Id: I1f914ce50f3382111b72940ca56de7c41b53d460 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/313123 Tested-by: Raman Tenneti Reviewed-by: Mike Frysinger Reviewed-by: Xin Li --- tests/test_git_config.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'tests/test_git_config.py') diff --git a/tests/test_git_config.py b/tests/test_git_config.py index 3300c12f..44ff5974 100644 --- a/tests/test_git_config.py +++ b/tests/test_git_config.py @@ -104,6 +104,23 @@ class GitConfigReadOnlyTests(unittest.TestCase): for key, value in TESTS: self.assertEqual(value, self.config.GetInt('section.%s' % (key,))) + def test_GetSyncAnalysisStateData(self): + """Test config entries with a sync state analysis data.""" + superproject_logging_data = {} + superproject_logging_data['test'] = False + options = type('options', (object,), {})() + options.verbose = 'true' + TESTS = ( + ('superproject.test', 'false'), + ('options.verbose', 'true'), + ('main.version', '1'), + ) + self.config.UpdateSyncAnalysisState(options, superproject_logging_data) + sync_data = self.config.GetSyncAnalysisStateData() + for key, value in TESTS: + self.assertEqual(sync_data[f'{git_config.SYNC_STATE_PREFIX}{key}'], value) + self.assertTrue(sync_data[f'{git_config.SYNC_STATE_PREFIX}main.synctime']) + class GitConfigReadWriteTests(unittest.TestCase): """Read/write tests of the GitConfig class.""" -- cgit v1.2.3-54-g00ecf