From 2e6738447eba9c0858ddbd8001e59812838d26f8 Mon Sep 17 00:00:00 2001 From: Ben Segall Date: Wed, 21 Jun 2023 14:23:37 +0000 Subject: [PATCH] reclient: Clear log dir between builds Bug: b/287650736 Change-Id: I87c0226f428211ac99520b024edeaf5ccb6a674c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4629861 Commit-Queue: Ben Segall Reviewed-by: Takuto Ikuta Auto-Submit: Ben Segall --- reclient_helper.py | 4 ++++ tests/ninja_reclient_test.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/reclient_helper.py b/reclient_helper.py index 9668e1ef9..6b1ff377a 100644 --- a/reclient_helper.py +++ b/reclient_helper.py @@ -9,6 +9,7 @@ for any reason e.g. build completion, keyboard interrupt etc.""" import contextlib import hashlib import os +import shutil import subprocess import sys @@ -142,6 +143,9 @@ def set_reproxy_path_flags(out_dir, make_dirs=True): log_dir = os.path.join(tmp_dir, 'logs') cache_dir = find_cache_dir(tmp_dir) if make_dirs: + if os.path.exists(log_dir): + # Clear log dir before each build to ensure correct metric aggregation. + shutil.rmtree(log_dir) os.makedirs(tmp_dir, exist_ok=True) os.makedirs(log_dir, exist_ok=True) os.makedirs(cache_dir, exist_ok=True) diff --git a/tests/ninja_reclient_test.py b/tests/ninja_reclient_test.py index 84d74d1d6..6245e8c21 100755 --- a/tests/ninja_reclient_test.py +++ b/tests/ninja_reclient_test.py @@ -196,6 +196,40 @@ class NinjaReclientTest(trial_dir.TestCase): ]), ]) + @unittest.mock.patch.dict(os.environ, {}) + @unittest.mock.patch('subprocess.call', return_value=0) + @unittest.mock.patch('ninja.main', return_value=0) + @unittest.mock.patch('reclient_metrics.check_status', return_value=True) + def test_ninja_reclient_clears_log_dir(self, mock_metrics_status, mock_ninja, + mock_call): + reclient_bin_dir = os.path.join('src', 'buildtools', 'reclient') + reclient_cfg = os.path.join('src', 'buildtools', 'reclient_cfgs', + 'reproxy.cfg') + write('.gclient', '') + write('.gclient_entries', 'entries = {"buildtools": "..."}') + write(os.path.join(reclient_bin_dir, 'version.txt'), '0.0') + write(reclient_cfg, '0.0') + argv = ["ninja_reclient.py", "-C", "out/a", "chrome"] + + os.makedirs(os.path.join(self.root_dir, "out", "a", ".reproxy_tmp", "logs"), + exist_ok=True) + with open( + os.path.join(self.root_dir, "out", "a", ".reproxy_tmp", "logs", + "reproxy.rpl"), "w") as f: + print("Content", file=f) + + self.assertEqual(0, ninja_reclient.main(argv)) + + self.assertTrue( + os.path.isdir(os.path.join(self.root_dir, "out", "a", ".reproxy_tmp"))) + self.assertTrue( + os.path.isdir( + os.path.join(self.root_dir, "out", "a", ".reproxy_tmp", "logs"))) + self.assertFalse( + os.path.isfile( + os.path.join(self.root_dir, "out", "a", ".reproxy_tmp", "logs", + "reproxy.rpl"))) + @unittest.mock.patch('subprocess.call', return_value=0) @unittest.mock.patch('ninja.main', side_effect=KeyboardInterrupt()) def test_ninja_reclient_ninja_interrupted(self, mock_ninja, mock_call):