Skip to content

Instantly share code, notes, and snippets.

@anton-yurchenko
Created February 26, 2022 11:00
Show Gist options
  • Save anton-yurchenko/20dafd1907ba27db4f5bbbc4d72cda94 to your computer and use it in GitHub Desktop.
Save anton-yurchenko/20dafd1907ba27db4f5bbbc4d72cda94 to your computer and use it in GitHub Desktop.
Mirror BitBucket Repositories
#!/usr/bin/python
import os
import stashy
projects = [
"PROJ-1",
"PROJ-2",
"PROJ-3",
]
url = "https://XXX/"
user = "XXX"
pwd = "XXX"
stash = stashy.connect(url, user, pwd)
def mkdir(xdir):
if not os.path.exists(xdir):
os.makedirs(xdir)
start_dir = os.getcwd()
for project in stash.projects:
if project["key"] in projects:
print(f"[{project['key']}] {project['name']}")
project_key = project["key"]
mkdir(project_key)
os.chdir(project_key)
for repo in stash.projects[project_key].repos.list():
for url in repo["links"]["clone"]:
clone_url = url["href"]
if (url["name"] == "http"):
x = url["href"].split("/")
clone_url = f"ssh://git@XXX:22/{x[4]}/{x[5]}"
break
repo_dir = clone_url.split("/")[-1].split(".")[0]
cur_dir = os.getcwd()
mkdir(repo_dir)
os.chdir(repo_dir)
try:
os.system(f"git clone --bare {clone_url}")
except Exception as e:
print(f"error mirroring {project['key']}/{repo_dir}")
os.chdir(cur_dir)
os.chdir(start_dir)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment