Commit e1a9c8db authored by Edward Lesmes's avatar Edward Lesmes Committed by LUCI CQ

Reland "metrics: Use vpython3 instead of sys.executable"

This is a reland of 310e1e81

Use subprocess2, which will set shell=True when running on Windows.

Original change's description:
> metrics: Use vpython3 instead of sys.executable
>
> Apparently, uploading metrics might happen after sys.executable
> has been deleted.
>
> Bug: 1068263
> Change-Id: Id4ab465bb97d146b688f42fb2002e29372e65555
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2148879
> Commit-Queue: Anthony Polito <apolito@google.com>
> Reviewed-by: Anthony Polito <apolito@google.com>

Bug: 1068263
Change-Id: I19c915f3e8862ae3248b01e0eccdbdf0bfda7369
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2150170Reviewed-by: 's avatarJosip Sokcevic <sokcevic@google.com>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
parent 8073a502
......@@ -9,7 +9,6 @@ import contextlib
import functools
import json
import os
import subprocess
import sys
import tempfile
import threading
......@@ -24,6 +23,7 @@ except ImportError: # For Py3 compatibility
import detect_host_arch
import gclient_utils
import metrics_utils
import subprocess2
DEPOT_TOOLS = os.path.dirname(os.path.abspath(__file__))
......@@ -184,7 +184,7 @@ class MetricsCollector(object):
# We invoke a subprocess, and use stdin.write instead of communicate(),
# so that we are able to return immediately, leaving the upload running in
# the background.
p = subprocess.Popen([sys.executable, UPLOAD_SCRIPT], stdin=subprocess.PIPE)
p = subprocess2.Popen(['vpython3', UPLOAD_SCRIPT], stdin=subprocess2.PIPE)
p.stdin.write(json.dumps(self._reported_metrics).encode('utf-8'))
def _collect_metrics(self, func, command_name, *args, **kwargs):
......
......@@ -46,7 +46,7 @@ class MetricsCollectorTest(unittest.TestCase):
# version.
mock.patch('metrics.metrics_utils.CURRENT_VERSION', 0).start()
mock.patch('metrics.urllib', self.urllib).start()
mock.patch('metrics.subprocess.Popen', self.Popen).start()
mock.patch('metrics.subprocess2.Popen', self.Popen).start()
mock.patch('metrics.gclient_utils.FileWrite', self.FileWrite).start()
mock.patch('metrics.gclient_utils.FileRead', self.FileRead).start()
mock.patch('metrics.metrics_utils.print_notice', self.print_notice).start()
......@@ -138,7 +138,7 @@ class MetricsCollectorTest(unittest.TestCase):
self.default_metrics.update(update_metrics or {})
# Assert we invoked the script to upload them.
self.Popen.assert_called_with(
[sys.executable, metrics.UPLOAD_SCRIPT], stdin=metrics.subprocess.PIPE)
['vpython3', metrics.UPLOAD_SCRIPT], stdin=metrics.subprocess2.PIPE)
# Assert we collected the right metrics.
write_call = self.Popen.return_value.stdin.write.call_args
collected_metrics = json.loads(write_call[0][0])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment