Skip to content

Commit b08f445

Browse files
authored
🐛 Make file processing with ClassDefVisitor deterministic (#118)
1 parent dda0b55 commit b08f445

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

bump_pydantic/main.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55
import time
66
import traceback
7+
from collections import deque
78
from pathlib import Path
89
from typing import Any, Dict, Iterable, List, Set, Tuple, Type, TypeVar, Union
910

@@ -66,7 +67,7 @@ def main(
6667
all_files = [path]
6768
else:
6869
package = path
69-
all_files = list(package.glob("**/*.py"))
70+
all_files = sorted(package.glob("**/*.py"))
7071

7172
filtered_files = [file for file in all_files if not any(match_glob(file, pattern) for pattern in ignore)]
7273
files = [str(file.relative_to(".")) for file in filtered_files]
@@ -84,12 +85,12 @@ def main(
8485
scratch: dict[str, Any] = {}
8586
with Progress(*Progress.get_default_columns(), transient=True) as progress:
8687
task = progress.add_task(description="Looking for Pydantic Models...", total=len(files))
87-
queue: List[str] = [files[0]]
88+
queue = deque(files)
8889
visited: Set[str] = set()
8990

9091
while queue:
9192
# Queue logic
92-
filename = queue.pop()
93+
filename = queue.popleft()
9394
visited.add(filename)
9495
progress.advance(task)
9596

@@ -111,11 +112,7 @@ def main(
111112
# Queue logic
112113
next_file = visitor.next_file(visited)
113114
if next_file is not None:
114-
queue.append(next_file)
115-
116-
missing_files = set(files) - visited
117-
if not queue and missing_files:
118-
queue.append(next(iter(missing_files)))
115+
queue.appendleft(next_file)
119116

120117
start_time = time.time()
121118

0 commit comments

Comments
 (0)