33
33
import subprocess
34
34
import io
35
35
import sys
36
+
from concurrent.futures import ThreadPoolExecutor,wait,FIRST_EXCEPTION
36
37
from shutil import which
37
38
39
+
def _apply_format(filename, lines, base_command, args):
40
+
"""Apply format on filename."""
41
+
if args.i and args.verbose:
42
+
print('Formatting', filename)
43
+
44
+
command = base_command[:]
45
+
command.extend(lines)
46
+
command.append(filename)
47
+
p = subprocess.Popen(command, stdout=subprocess.PIPE,
48
+
stderr=None, stdin=subprocess.PIPE)
49
+
stdout, _ = p.communicate()
50
+
if p.returncode != 0:
51
+
sys.exit(p.returncode)
52
+
53
+
if not args.i:
54
+
with open(filename) as f:
55
+
code = f.readlines()
56
+
formatted_code = io.StringIO(stdout.decode('utf-8')).readlines()
57
+
diff = difflib.unified_diff(code, formatted_code,
58
+
filename, filename,
59
+
'(before formatting)', '(after formatting)')
60
+
diff_string = ''.join(diff)
61
+
if len(diff_string) > 0:
62
+
sys.stdout.write(diff_string)
63
+
38
64
def main():
39
65
parser = argparse.ArgumentParser(description=
40
66
'Reformat changed lines in diff. Without -i '
@@ -108,39 +134,29 @@ def main():
108
134
binary = which('google-java-format') or '/usr/bin/google-java-format'
109
135
base_command = [binary]
110
136
111
-
# Reformat files containing changes in place.
112
-
for filename, lines in lines_by_file.items():
113
-
if args.i and args.verbose:
114
-
print('Formatting', filename)
115
-
command = base_command[:]
116
-
if args.i:
117
-
command.append('-i')
118
-
if args.aosp:
119
-
command.append('--aosp')
120
-
if args.skip_sorting_imports:
121
-
command.append('--skip-sorting-imports')
122
-
if args.skip_removing_unused_imports:
123
-
command.append('--skip-removing-unused-imports')
124
-
if args.skip_javadoc_formatting:
125
-
command.append('--skip-javadoc-formatting')
126
-
command.extend(lines)
127
-
command.append(filename)
128
-
p = subprocess.Popen(command, stdout=subprocess.PIPE,
129
-
stderr=None, stdin=subprocess.PIPE)
130
-
stdout, stderr = p.communicate()
131
-
if p.returncode != 0:
132
-
sys.exit(p.returncode);
133
-
134
-
if not args.i:
135
-
with open(filename) as f:
136
-
code = f.readlines()
137
-
formatted_code = io.StringIO(stdout.decode('utf-8')).readlines()
138
-
diff = difflib.unified_diff(code, formatted_code,
139
-
filename, filename,
140
-
'(before formatting)', '(after formatting)')
141
-
diff_string = ''.join(diff)
142
-
if len(diff_string) > 0:
143
-
sys.stdout.write(diff_string)
137
+
if args.i:
138
+
base_command.append('-i')
139
+
if args.aosp:
140
+
base_command.append('--aosp')
141
+
if args.skip_sorting_imports:
142
+
base_command.append('--skip-sorting-imports')
143
+
if args.skip_removing_unused_imports:
144
+
base_command.append('--skip-removing-unused-imports')
145
+
if args.skip_javadoc_formatting:
146
+
base_command.append('--skip-javadoc-formatting')
147
+
148
+
with ThreadPoolExecutor() as executor:
149
+
format_futures = []
150
+
for filename, lines in lines_by_file.items():
151
+
format_futures.append(
152
+
executor.submit(_apply_format, filename, lines, base_command, args)
153
+
)
154
+
155
+
done, _ = wait(format_futures, return_when=FIRST_EXCEPTION)
156
+
for future in done:
157
+
if exception := future.exception():
158
+
executor.shutdown(wait=True, cancel_futures=True)
159
+
sys.exit(exception.args[0])
144
160
145
161
if __name__ == '__main__':
146
162
main()
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4