blob: 1a25a2b520f52aa1af1369be4c9c97ee3fb57f9b [file] [log] [blame]
#!/usr/bin/env python2
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import subprocess
import sys
args = sys.argv[1:]
inputfiles = [a for a in args if not a.startswith('-')]
contents = ''
if '-' in args or not inputfiles:
contents = sys.stdin.read()
# Tarball builds may or may not have depot_tools in $PATH. In the former case,
# running 'clang-format' will call back into this script infinitely. Strip off
# directories from $PATH one-by-one until either the system clang-format is
# used or there's no usable clang-format.
env = os.environ.copy()
if 'TARBALL_CLANG_FORMAT_WRAPPER' in env:
env['PATH'] = os.pathsep.join(env['PATH'].split(os.pathsep)[1:])
env['TARBALL_CLANG_FORMAT_WRAPPER'] = ''
# Try formatting with the system clang-format.
try:
proc = subprocess.Popen(
['clang-format'] + args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=env)
stdout, stderr = proc.communicate(input=contents)
# Ignore if clang-format fails. Eg: it may be too old to support C++14.
if proc.returncode == 0:
sys.stdout.write(stdout)
sys.stderr.write(stderr)
sys.exit(0)
except OSError:
# Ignore if clang-format is not installed.
pass
# If any failure happens, continue with unformatted files.
sys.stdout.write(contents)
for inputfile in inputfiles:
sys.stdout.write(open(inputfile).read())