diff --git a/clone_repos.py b/clone_repos.py new file mode 100644 index 0000000..0c0ff10 --- /dev/null +++ b/clone_repos.py @@ -0,0 +1,56 @@ +import requests +from git import Repo +import os + +def read_config(): + os.chdir("/external/repos") + current_dir = os.getcwd() + print("Current directory:", current_dir) + with open("./config.txt", "r") as file: + lines = file.readlines() + url = lines[0].strip() + token = lines[1].strip() + return url, token + +def main(): + # Read URL and token from config file + url, token = read_config() + + # Perform request + headers = {"Authorization": f"Bearer {token}"} + # r = requests.get(url, headers=headers) + page = 1 + + while True: + # Perform request with pagination + headers = {"Authorization": f"Bearer {token}"} + params = {"page": page} + r = requests.get(url, headers=headers, params=params) + + # Check if there are no more pages + if not r.json()["data"]: + break + + # Loop through each repository returned, cloning it + # Loop through each repository returned + for repository in r.json()["data"]: + repo_path = "repos/" + repository["full_name"] + + # Check if the repository is already cloned + if os.path.exists(repo_path): + # Update the existing clone + repo = Repo(repo_path) + repo.remotes.origin.pull() + else: + # Clone the repository + Repo.clone_from(repository["clone_url"], repo_path, depth=1) + + # Increment page number + page += 1 + # Check if there are no more pages or repositories + if not r.json()["data"]: + break + + +if __name__ == "__main__": + main()