diff --git a/aider_gitea/__main__.py b/aider_gitea/__main__.py index 7742579..a10730b 100644 --- a/aider_gitea/__main__.py +++ b/aider_gitea/__main__.py @@ -25,7 +25,10 @@ def parse_args(): help='Base URL for the Gitea instance, e.g., https://gitfub.space/api/v1', ) parser.add_argument('--owner', required=True, help='Owner of the repository') - parser.add_argument('--repo', required=True, help='Repository name') + parser.add_argument( + '--repo', + help='Repository name. If not specified, all repositories for the owner will be scanned.', + ) parser.add_argument( '--base-branch', default='main', @@ -58,15 +61,36 @@ def main(): ) try: while True: - logger.info('Checking for new issues...') - handle_issues(args, client, seen_issues_db) - logger.info(f'Sleeping for {args.interval} seconds...') - time.sleep(args.interval) + if args.repo: + logger.info('Checking for new issues...') + handle_issues(args, client, seen_issues_db) + logger.info(f'Sleeping for {args.interval} seconds...') + time.sleep(args.interval) + else: + repositories = client.get_user_repositories(args.owner) + for repo in repositories: + args_copy = argparse.Namespace() + args_copy.gitea_url = args.gitea_url + args_copy.owner = args.owner + args_copy.repo = repo + args_copy.base_branch = args.base_branch + handle_issues(args_copy, client, seen_issues_db) + time.sleep(args.interval) except KeyboardInterrupt: logger.exception('Daemon stopped by user') else: # One-off run - handle_issues(args, client, seen_issues_db) + if args.repo: + handle_issues(args, client, seen_issues_db) + else: + repositories = client.get_user_repositories(args.owner) + for repo in repositories: + args_copy = argparse.Namespace() + args_copy.gitea_url = args.gitea_url + args_copy.owner = args.owner + args_copy.repo = repo + args_copy.base_branch = args.base_branch + handle_issues(args_copy, client, seen_issues_db) if __name__ == '__main__': diff --git a/aider_gitea/gitea_client.py b/aider_gitea/gitea_client.py index 1603fb6..dd25cd4 100644 --- a/aider_gitea/gitea_client.py +++ b/aider_gitea/gitea_client.py @@ -106,3 +106,19 @@ class GiteaClient: if any(label.get('name') == 'aider' for label in issue.get('labels', [])) ] return issues + + def get_user_repositories(self, owner: str) -> list: + """ + Get a list of repositories for a given user. + + Args: + owner (str): The owner of the repositories. + + Returns: + list: A list of repository names. + """ + url = f'{self.gitea_url}/users/{owner}/repos' + response = self.session.get(url) + response.raise_for_status() + repos = response.json() + return [repo['name'] for repo in repos]