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 <bentekkie@google.com>
Reviewed-by: Takuto Ikuta <tikuta@chromium.org>
Auto-Submit: Ben Segall <bentekkie@google.com>
changes/61/4629861/5
Ben Segall 2 years ago committed by LUCI CQ
parent 4ec095fa85
commit 2e6738447e

@ -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)

@ -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):

Loading…
Cancel
Save