Skip to content

Commit 4326daa

Browse files
committed
[__main__] add indeterminate progress indicators during processing
1 parent 5e98ed5 commit 4326daa

File tree

1 file changed

+57
-50
lines changed

1 file changed

+57
-50
lines changed

lib/fdiff/__main__.py

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import sys
66
from typing import Iterable, Iterator, List, Optional, Text, Tuple
77

8+
from rich.console import Console
9+
810
from . import __version__
911
from .color import color_unified_diff_line
1012
from .diff import external_diff, u_diff
@@ -105,6 +107,9 @@ def run(argv: List[Text]) -> None:
105107
#
106108
# /////////////////////////////////////////////////////////
107109

110+
# instantiate a rich Console
111+
console = Console()
112+
108113
# parse explicitly included or excluded tables in
109114
# the command line arguments
110115
# set as a Python list if it was defined on the command line
@@ -137,24 +142,25 @@ def run(argv: List[Text]) -> None:
137142
sys.exit(1)
138143

139144
try:
140-
ext_diff: Iterable[Tuple[Text, Optional[int]]] = external_diff(
141-
args.external,
142-
args.PREFILE,
143-
args.POSTFILE,
144-
include_tables=include_list,
145-
exclude_tables=exclude_list,
146-
use_multiprocess=use_mp,
147-
)
148-
149-
# write stdout from external tool
150-
for line, exit_code in ext_diff:
151-
# format with color if color flag is entered on command line
152-
if args.color:
153-
sys.stdout.write(color_unified_diff_line(line))
154-
else:
155-
sys.stdout.write(line)
156-
if exit_code is not None:
157-
sys.exit(exit_code)
145+
with console.status("Processing...", spinner="dots10"):
146+
ext_diff: Iterable[Tuple[Text, Optional[int]]] = external_diff(
147+
args.external,
148+
args.PREFILE,
149+
args.POSTFILE,
150+
include_tables=include_list,
151+
exclude_tables=exclude_list,
152+
use_multiprocess=use_mp,
153+
)
154+
155+
# write stdout from external tool
156+
for line, exit_code in ext_diff:
157+
# format with color if color flag is entered on command line
158+
if args.color:
159+
sys.stdout.write(color_unified_diff_line(line))
160+
else:
161+
sys.stdout.write(line)
162+
if exit_code is not None:
163+
sys.exit(exit_code)
158164
except Exception as e:
159165
sys.stderr.write(f"[*] ERROR: {e}{os.linesep}")
160166
sys.exit(1)
@@ -163,38 +169,39 @@ def run(argv: List[Text]) -> None:
163169
# Unified diff
164170
# ---------------
165171
# perform the unified diff analysis
166-
try:
167-
uni_diff: Iterator[Text] = u_diff(
168-
args.PREFILE,
169-
args.POSTFILE,
170-
context_lines=args.lines,
171-
include_tables=include_list,
172-
exclude_tables=exclude_list,
173-
use_multiprocess=use_mp,
174-
)
175-
except Exception as e:
176-
sys.stderr.write(f"[*] ERROR: {e}{os.linesep}")
177-
sys.exit(1)
178-
179-
# re-define the line contents of the diff iterable
180-
# if head or tail is requested
181-
if args.head:
182-
iterable = head(uni_diff, args.head)
183-
elif args.tail:
184-
iterable = tail(uni_diff, args.tail)
185-
else:
186-
iterable = uni_diff
187-
188-
# print unified diff results to standard output stream
189-
has_diff = False
190-
if args.color:
191-
for line in iterable:
192-
has_diff = True
193-
sys.stdout.write(color_unified_diff_line(line))
194-
else:
195-
for line in iterable:
196-
has_diff = True
197-
sys.stdout.write(line)
172+
with console.status("Processing...", spinner="dots10"):
173+
try:
174+
uni_diff: Iterator[Text] = u_diff(
175+
args.PREFILE,
176+
args.POSTFILE,
177+
context_lines=args.lines,
178+
include_tables=include_list,
179+
exclude_tables=exclude_list,
180+
use_multiprocess=use_mp,
181+
)
182+
except Exception as e:
183+
sys.stderr.write(f"[*] ERROR: {e}{os.linesep}")
184+
sys.exit(1)
185+
186+
# re-define the line contents of the diff iterable
187+
# if head or tail is requested
188+
if args.head:
189+
iterable = head(uni_diff, args.head)
190+
elif args.tail:
191+
iterable = tail(uni_diff, args.tail)
192+
else:
193+
iterable = uni_diff
194+
195+
# print unified diff results to standard output stream
196+
has_diff = False
197+
if args.color:
198+
for line in iterable:
199+
has_diff = True
200+
sys.stdout.write(color_unified_diff_line(line))
201+
else:
202+
for line in iterable:
203+
has_diff = True
204+
sys.stdout.write(line)
198205

199206
# if no difference was found, tell the user instead of
200207
# simply closing with zero exit status code.

0 commit comments

Comments
 (0)