Skip to content

Commit

Permalink
upload: Add topological_topics as a generator
Browse files Browse the repository at this point in the history
  • Loading branch information
jerry-skydio committed Mar 12, 2024
1 parent edb2370 commit e443136
Showing 1 changed file with 27 additions and 2 deletions.
29 changes: 27 additions & 2 deletions revup/topic_stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,21 @@ class Topic:
# Reviews for this topic, keyed by base branch
reviews: Dict[str, Review] = field(default_factory=dict)

def depth_first_iter(self) -> Iterator[Topic]:
seen: Set[str] = set()
for t in self.depth_first_iter_helper(seen):
yield t

def depth_first_iter_helper(self, seen: Set[str]) -> Iterator[Topic]:
if self.name in seen:
raise RevupUsageException(f"Relative Topic cycle found at topic {self.name}")
seen.add(self.name)

if self.relative_topic:
for t in self.relative_topic.depth_first_iter_helper(seen):
yield t
yield self


@dataclass
class TopicStack:
Expand Down Expand Up @@ -234,10 +249,20 @@ def all_reviews_iter(self) -> Iterator[Tuple[str, Topic, str, Review]]:
"""
One liner for common iteration pattern to reduce indentation a bit.
"""
for name, topic in self.topics.items():
for name, topic in self.topological_topics():
for base_branch, review in topic.reviews.items():
yield name, topic, base_branch, review

def topological_topics(self) -> Iterator[Tuple[str, Topic]]:
seen: Set[str] = set()
for _, topic in self.topics.items():
for t in topic.depth_first_iter():
if t.name in seen:
# Don't return any topic more than once
continue
seen.add(t.name)
yield t.name, t

def parse_commit_tags(self, commit_msg: str) -> Tuple[Dict[str, Set[str]], str]:
"""
Parse all commit tags in the commit message and return them in a dict, as well as
Expand Down Expand Up @@ -516,7 +541,7 @@ async def populate_reviews(

seen_topics[name] = topic

for name, topic in list(self.topics.items()):
for name, topic in self.topological_topics():
if topic.relative_topic:
if len(topic.tags[TAG_BRANCH]) == 0:
topic.tags[TAG_BRANCH].update(topic.relative_topic.tags[TAG_BRANCH])
Expand Down

0 comments on commit e443136

Please sign in to comment.