Daemon mode should monitor all user's repositories if specific repository haven't been specified #37

Merged
Jmaa merged 1 commits from jmaa/issue-35-daemon-mode-should-monitor-all-users-repositories-if-specific-repository-havent-been-specified into main 2025-04-13 20:59:42 +00:00
2 changed files with 46 additions and 6 deletions

View File

@ -25,7 +25,10 @@ def parse_args():
help='Base URL for the Gitea instance, e.g., https://gitfub.space/api/v1', 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('--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( parser.add_argument(
'--base-branch', '--base-branch',
default='main', default='main',
@ -58,15 +61,36 @@ def main():
) )
try: try:
while True: while True:
if args.repo:
logger.info('Checking for new issues...') logger.info('Checking for new issues...')
handle_issues(args, client, seen_issues_db) handle_issues(args, client, seen_issues_db)
logger.info(f'Sleeping for {args.interval} seconds...') logger.info(f'Sleeping for {args.interval} seconds...')
time.sleep(args.interval) 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: except KeyboardInterrupt:
logger.exception('Daemon stopped by user') logger.exception('Daemon stopped by user')
else: else:
# One-off run # One-off run
if args.repo:
handle_issues(args, client, seen_issues_db) 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__': if __name__ == '__main__':

View File

@ -106,3 +106,19 @@ class GiteaClient:
if any(label.get('name') == 'aider' for label in issue.get('labels', [])) if any(label.get('name') == 'aider' for label in issue.get('labels', []))
] ]
return issues 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]