""" Gather all commits from a specific branch of a repository in a GitHub organization. """ import requests GITHUB_TOKEN = "your_personal_access_token" ORGANIZATION = "your_organization" REPOSITORY = "your_repository" BRANCH = "your_branch" # Headers for authentication headers = { "Authorization": f"token {GITHUB_TOKEN}", "Accept": "application/vnd.github.v3+json", } # Define a timeout value (in seconds) TIMEOUT = 10 def get_commit_log(org, repo, branch): """ Get the full commit log for a repository branch """ commits = [] page = 1 while True: url = ( f"https://api.github.com/repos/{org}/{repo}/commits?sha={branch}" f"&page={page}&per_page=100" ) response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() page_commits = response.json() if not page_commits: break commits.extend(page_commits) page += 1 return commits def get_commit_details(org, repo, sha): """ Get detailed information for a specific commit """ url = f"https://api.github.com/repos/{org}/{repo}/commits/{sha}" response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() if __name__ == "__main__": try: # Get the full commit log for the specified branch commit_log = get_commit_log(ORGANIZATION, REPOSITORY, BRANCH) print( f"Total commits in the repository '{REPOSITORY}' on branch " f"'{BRANCH}': {len(commit_log)}" ) # Get detailed information for each commit for commit in commit_log: sha_hash = commit["sha"] commit_details = get_commit_details(ORGANIZATION, REPOSITORY, sha_hash) print(f"\nCommit SHA: {commit_details['sha']}") print( f"Author: {commit_details['commit']['author']['name']} " f"<{commit_details['commit']['author']['email']}>" ) print(f"Date: {commit_details['commit']['author']['date']}") print(f"Message: {commit_details['commit']['message']}") print(f"URL: {commit_details['html_url']}") print("Files changed:") for file in commit_details["files"]: print(f" - {file['filename']} ({file['status']})") print( f" Additions: {file['additions']}, " f"Deletions: {file['deletions']}, " f"Changes: {file['changes']}" ) except requests.exceptions.Timeout: print("The request timed out") except requests.exceptions.RequestException as e: print(f"An error occurred: {e}")