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: if repo.fork or repo.mirror or repo.private:
continue 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") logger.fatal("Could not get name of Forgejo repository")
exit(1) exit(1)
topics_list = from_client.repository.repo_list_topics(
owner=repo.owner.login,
repo=repo.name,
)
if args.filter is not None: if args.filter is not None:
pattern = compile(args.filter) pattern = compile(args.filter)
if pattern.search(repo.name) is not None: if pattern.search(repo.name) is not None:
@ -150,7 +155,11 @@ def main() -> None:
) )
try: 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: except SyncError as error:
logger.fatal("Syncing failed: %s", error) logger.fatal("Syncing failed: %s", error)
exit(2) exit(2)

View file

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

View file

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

View file

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