@@ -6,7 +6,7 @@ import sys
66import os.path as path
77import os
88import argparse
9−
9+from multiprocessing import Pool
1010
1111BAT_OPTIONS = [
1212 "--no-config",
@@ -38,68 +38,79 @@ def get_options(source):
3838 return options
3939
4040
41+def create_highlighted_version(args):
42+ output_basepath, source = args
43+ env = os.environ.copy()
44+ env.pop("BAT_CACHE_PATH", None)
45+ env.pop("BAT_CONFIG_DIR", None)
46+ env.pop("BAT_CONFIG_PATH", None)
47+ env.pop("BAT_OPTS", None)
48+ env.pop("BAT_PAGER", None)
49+ env.pop("BAT_STYLE", None)
50+ env.pop("BAT_TABS", None)
51+ env.pop("BAT_THEME", None)
52+ env.pop("NO_COLOR", None)
53+ env.pop("PAGER", None)
54+ env["COLORTERM"] = "truecolor" # make sure to output 24bit colors
55+
56+ source_dirname = path.basename(path.dirname(source))
57+ source_filename = path.basename(source)
58+
59+ if source_filename in SKIP_FILENAMES:
60+ return
61+
62+ bat_output = subprocess.check_output(
63+ ["bat"] + get_options(source) + [source],
64+ stderr=subprocess.PIPE,
65+ env=env,
66+ )
67+
68+ output_dir = path.join(output_basepath, source_dirname)
69+ output_path = path.join(output_dir, source_filename)
70+
71+ os.makedirs(output_dir, exist_ok=True)
72+
73+ with open(output_path, "wb") as output_file:
74+ output_file.write(bat_output)
75+
76+ print("Created '{}'".format(output_path))
77+
78+
4179def create_highlighted_versions(output_basepath):
4280 root = os.path.dirname(os.path.abspath(__file__))
43− sources = path.join(root, "source", "*")
81+ source_paths = path.join(root, "source", "*")
4482
45− for source in glob.glob(path.join(sources, "*")) + glob.glob(
46− path.join(sources, ".*")
83+ sources = []
84+ for source in glob.glob(path.join(source_paths, "*")) + glob.glob(
85+ path.join(source_paths, ".*")
4786 ):
48− try:
49− env = os.environ.copy()
50− env.pop("BAT_CACHE_PATH", None)
51− env.pop("BAT_CONFIG_DIR", None)
52− env.pop("BAT_CONFIG_PATH", None)
53− env.pop("BAT_OPTS", None)
54− env.pop("BAT_PAGER", None)
55− env.pop("BAT_STYLE", None)
56− env.pop("BAT_TABS", None)
57− env.pop("BAT_THEME", None)
58− env.pop("NO_COLOR", None)
59− env.pop("PAGER", None)
60− env["COLORTERM"] = "truecolor" # make sure to output 24bit colors
61−
62− source_dirname = path.basename(path.dirname(source))
63− source_filename = path.basename(source)
64−
65− if source_filename in SKIP_FILENAMES:
66− continue
67−
68− bat_output = subprocess.check_output(
69− ["bat"] + get_options(source) + [source],
70− stderr=subprocess.PIPE,
71− env=env,
72− )
73−
74− output_dir = path.join(output_basepath, source_dirname)
75− output_path = path.join(output_dir, source_filename)
76−
77− os.makedirs(output_dir, exist_ok=True)
78−
79− with open(output_path, "wb") as output_file:
80− output_file.write(bat_output)
81−
82− print("Created '{}'".format(output_path))
83− except subprocess.CalledProcessError as err:
84− print(
85− "=== Error: Could not highlight source file '{}".format(source),
86− file=sys.stderr,
87− )
88− print(
89− "=== bat stdout:\n{}".format(err.stdout.decode("utf-8")),
90− file=sys.stderr,
91− )
92− print(
93− "=== bat stderr:\n{}".format(err.stderr.decode("utf-8")),
94− file=sys.stderr,
95− )
96− sys.exit(1)
97− except FileNotFoundError:
98− print(
99− "Error: Could not execute 'bat'. Please make sure that the executable "
100− "is available on the PATH."
101− )
102− sys.exit(1)
87+ sources.append((output_basepath, source))
88+
89+ try:
90+ with Pool() as p:
91+ p.map(create_highlighted_version, sources)
92+ except subprocess.CalledProcessError as err:
93+ print(
94+ "=== Error: Could not highlight source file '{}".format(source),
95+ file=sys.stderr,
96+ )
97+ print(
98+ "=== bat stdout:\n{}".format(err.stdout.decode("utf-8")),
99+ file=sys.stderr,
100+ )
101+ print(
102+ "=== bat stderr:\n{}".format(err.stderr.decode("utf-8")),
103+ file=sys.stderr,
104+ )
105+ return False
106+ except FileNotFoundError:
107+ print(
108+ "Error: Could not execute 'bat'. Please make sure that the executable "
109+ "is available on the PATH."
110+ )
111+ return False
112+
113+ return True
103114
104115
105116if __name__ == "__main__":
@@ -118,4 +129,5 @@ if __name__ == "__main__":
118129
119130 args = parser.parse_args()
120131
121− create_highlighted_versions(output_basepath=args.output)
132+ if not create_highlighted_versions(output_basepath=args.output):
133+ sys.exit(1)