fix topic sync
This commit is contained in:
parent
11b9f2454e
commit
c5be0e1e3d
4 changed files with 26 additions and 6 deletions
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue