1
0
Fork 0

fix topic sync

This commit is contained in:
Lukas Wurzinger 2025-05-02 01:11:00 +02:00
parent 11b9f2454e
commit c5be0e1e3d
No known key found for this signature in database
4 changed files with 26 additions and 6 deletions

View file

@ -135,10 +135,15 @@ def main() -> None:
if repo.fork or repo.mirror or repo.private:
continue
if repo.name is None:
if repo.owner is None or repo.owner.login is None or repo.name is None:
logger.fatal("Could not get name of Forgejo repository")
exit(1)
topics_list = from_client.repository.repo_list_topics(
owner=repo.owner.login,
repo=repo.name,
)
if args.filter is not None:
pattern = compile(args.filter)
if pattern.search(repo.name) is not None:
@ -150,7 +155,11 @@ def main() -> None:
)
try:
synced_repo = syncer.sync(from_repo=repo, description=description)
synced_repo = syncer.sync(
from_repo=repo,
description=description,
topics=topics_list.topics if topics_list.topics is not None else [],
)
except SyncError as error:
logger.fatal("Syncing failed: %s", error)
exit(2)

View file

@ -37,6 +37,7 @@ class ForgejoSyncer(Syncer):
self: Self,
from_repo: ForgejoRepository,
description: str,
topics: list[str],
) -> SyncedRepository:
assert from_repo.name is not None
self.logger.info("Synchronizing %s", from_repo.name)
@ -79,8 +80,6 @@ class ForgejoSyncer(Syncer):
wiki_branch=from_repo.wiki_branch,
)
self.logger.info("Updated Forgejo repository %s", edited_repo.full_name)
if (
edited_repo.owner is None
or edited_repo.owner.login is None
@ -91,6 +90,14 @@ class ForgejoSyncer(Syncer):
):
raise SyncError("received malformed Forgejo repository")
self.client.repository.repo_update_topics(
owner=edited_repo.owner.login,
repo=edited_repo.name,
topics=topics,
)
self.logger.info("Updated Forgejo repository %s", edited_repo.full_name)
return SyncedRepository(
new_owner=edited_repo.owner.login,
orig_owner=from_repo.owner.login,

View file

@ -52,6 +52,7 @@ class GithubSyncer(Syncer):
self: Self,
from_repo: ForgejoRepository,
description: str,
topics: list[str],
) -> SyncedRepository:
if from_repo.name is None:
raise SyncError("could not get Forgejo repository name")
@ -140,7 +141,7 @@ class GithubSyncer(Syncer):
self.logger.info("Updated GitHub repository %s", repo.full_name)
repo.replace_topics(from_repo.topics if from_repo.topics is not None else [])
repo.replace_topics(topics=topics)
self.logger.info("Replaced topics on GitHub repository %s", repo.full_name)

View file

@ -23,7 +23,10 @@ class SyncedRepository:
class Syncer(ABC):
@abstractmethod
def sync(
self: Self, from_repo: ForgejoRepository, description: str
self: Self,
from_repo: ForgejoRepository,
description: str,
topics: list[str],
) -> SyncedRepository:
pass