[Bf-blender-cvs] [07ffcd2b88e] temp-clang-format: Move clang_format_paths to source/tools
Campbell Barton
noreply at git.blender.org
Tue Apr 16 13:25:45 CEST 2019
Commit: 07ffcd2b88eb3ad57948b66916e14b193ad5b66c
Author: Campbell Barton
Date: Tue Apr 16 13:00:11 2019 +0200
Branches: temp-clang-format
https://developer.blender.org/rB07ffcd2b88eb3ad57948b66916e14b193ad5b66c
Move clang_format_paths to source/tools
Needed so branches can update source/tools before migrating.
===================================================================
M GNUmakefile
D build_files/utils/clang_format_paths.py
===================================================================
diff --git a/GNUmakefile b/GNUmakefile
index 84c3aa29203..fc783f4d489 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -515,7 +515,7 @@ update: .FORCE
format: .FORCE
PATH="../lib/${OS_NCASE}/llvm/bin/:$(PATH)" \
- python3 build_files/utils/clang_format_paths.py --expand-tabs $(PATHS)
+ python3 source/tools/utils/clang_format_paths.py --expand-tabs $(PATHS)
# -----------------------------------------------------------------------------
diff --git a/build_files/utils/clang_format_paths.py b/build_files/utils/clang_format_paths.py
deleted file mode 100755
index 06e813f1e8e..00000000000
--- a/build_files/utils/clang_format_paths.py
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env python3
-
-import multiprocessing
-import os
-import sys
-import subprocess
-
-CLANG_FORMAT_CMD = "clang-format"
-VERSION_MIN = (6, 0, 0)
-
-
-extensions = (
- ".c", ".cc", ".cpp", ".cxx",
- ".h", ".hh", ".hpp", ".hxx",
- ".m", ".mm",
- ".osl", ".glsl",
-)
-
-ignore_files = {
- "intern/cycles/render/sobol.cpp", # Too heavy for clang-format
-}
-
-
-def compute_paths(paths):
- # Optionally pass in files to operate on.
- if not paths:
- paths = (
- "intern/atomic",
- "intern/audaspace",
- "intern/clog",
- "intern/cycles",
- "intern/dualcon",
- "intern/eigen",
- "intern/ffmpeg",
- "intern/ghost",
- "intern/glew-mx",
- "intern/guardedalloc",
- "intern/iksolver",
- "intern/locale",
- "intern/memutil",
- "intern/mikktspace",
- "intern/opencolorio",
- "intern/openvdb",
- "intern/rigidbody",
- "intern/string",
- "intern/utfconv",
- "source",
- "tests/gtests",
- )
-
- if os.sep != "/":
- paths = [f.replace("/", os.sep) for f in paths]
- return paths
-
-
-def source_files_from_git(paths):
- cmd = ("git", "ls-tree", "-r", "HEAD", *paths, "--name-only", "-z")
- files = subprocess.check_output(cmd).split(b'\0')
- return [f.decode('ascii') for f in files]
-
-
-def convert_tabs_to_spaces(files):
- for f in files:
- print("TabExpand", f)
- with open(f, 'r', encoding="utf-8") as fh:
- data = fh.read()
- if False:
- # Simple 4 space
- data = data.expandtabs(4)
- else:
- # Complex 2 space
- # because some comments have tabs for alignment.
- def handle(l):
- ls = l.lstrip("\t")
- d = len(l) - len(ls)
- if d != 0:
- return (" " * d) + ls.expandtabs(4)
- else:
- return l.expandtabs(4)
-
- lines = data.splitlines(keepends=True)
- lines = [handle(l) for l in lines]
- data = "".join(lines)
- with open(f, 'w', encoding="utf-8") as fh:
- fh.write(data)
-
-
-def clang_format_version():
- version_output = subprocess.check_output((CLANG_FORMAT_CMD, "-version")).decode('utf-8')
- version = next(iter(v for v in version_output.split() if v[0].isdigit()), None)
- if version is not None:
- version = version.split("-")[0]
- version = tuple(int(n) for n in version.split("."))
- return version
-
-
-def clang_format_file(files):
- cmd = ["clang-format", "-i", "-verbose"] + files
- return subprocess.check_output(cmd, stderr=subprocess.STDOUT)
-
-
-def clang_print_output(output):
- print(output.decode('utf8', errors='ignore').strip())
-
-
-def clang_format(files):
- pool = multiprocessing.Pool()
-
- # Process in chunks to reduce overhead of starting processes.
- cpu_count = multiprocessing.cpu_count()
- chunk_size = min(max(len(files) // cpu_count // 2, 1), 32)
- for i in range(0, len(files), chunk_size):
- files_chunk = files[i:i+chunk_size];
- pool.apply_async(clang_format_file, args=[files_chunk], callback=clang_print_output)
-
- pool.close()
- pool.join()
-
-def argparse_create():
- import argparse
-
- # When --help or no args are given, print this help
- usage_text = "Format source code"
- epilog = "This script runs clang-format on multiple files/directories"
- parser = argparse.ArgumentParser(description=usage_text, epilog=epilog)
- parser.add_argument(
- "--expand-tabs",
- dest="expand_tabs",
- default=False,
- action='store_true',
- help="Run a pre-pass that expands tabs "
- "(default=False)",
- required=False,
- )
- parser.add_argument(
- "paths",
- nargs=argparse.REMAINDER,
- help="All trailing arguments are treated as paths."
- )
-
- return parser
-
-
-def main():
- version = clang_format_version()
- if version is None:
- print("Unable to detect 'clang-format -version'")
- sys.exit(1)
- if version < VERSION_MIN:
- print("Version of clang-format is too old:", version, "<", VERSION_MIN)
- sys.exit(1)
-
- args = argparse_create().parse_args()
-
- paths = compute_paths(args.paths)
- print("Operating on:")
- for p in paths:
- print(" ", p)
-
- files = [
- f for f in source_files_from_git(paths)
- if f.endswith(extensions)
- if f not in ignore_files
- ]
-
- if args.expand_tabs:
- convert_tabs_to_spaces(files)
- clang_format(files)
-
-
-if __name__ == "__main__":
- main()
More information about the Bf-blender-cvs
mailing list