Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- #
- # @author Jason LeMonier
- #
- # Clone ALL Projects & Repositories for a given stash url
- #
- # Loop through all projects: [P1, P2, ...]
- # P1 > for each project make a directory with the key "P1"
- # Then clone every repository inside of directory P1
- # Backup a directory, create P2, ...
- #
- # Added ACTION_FLAG bit so the same logic can run fetch --all on every repository and/or clone.
- import sys
- import os
- import stashy
- ACTION_FLAG = 1 # Bit: +1=Clone, +2=fetch --all
- url = os.environ["STASH_URL"] # "https://mystash.com/stash"
- user = os.environ["STASH_USER"] # joedoe"
- pwd = os.environ["STASH_PWD"] # Yay123
- stash = stashy.connect(url, user, pwd)
- def mkdir(xdir):
- if not os.path.exists(xdir):
- os.makedirs(xdir)
- def run_cmd(cmd):
- print ("Directory cwd: %s "%(os.getcwd() ))
- print ("Running Command: n %s " %(cmd))
- os.system(cmd)
- start_dir = os.getcwd()
- for project in stash.projects:
- pk = project_key = project["key"]
- mkdir(pk)
- os.chdir(pk)
- for repo in stash.projects[project_key].repos.list():
- for url in repo["links"]["clone"]:
- href = url["href"]
- repo_dir = href.split("/")[-1].split(".")[0]
- if (url["name"] == "http"):
- print (" url.href: %s"% href) # https://joedoe@mystash.com/stash/scm/app/ae.git
- print ("Directory cwd: %s Project: %s"%(os.getcwd(), pk))
- if ACTION_FLAG & 1 > 0:
- if not os.path.exists(repo_dir):
- run_cmd("git clone %s" % url["href"])
- else:
- print ("Directory: %s/%s exists already. Skipping clone. "%(os.getcwd(), repo_dir))
- if ACTION_FLAG & 2 > 0:
- # chdir into directory "ae" based on url of this repo, fetch, chdir back
- cur_dir = os.getcwd()
- os.chdir(repo_dir)
- run_cmd("git fetch --all ")
- os.chdir(cur_dir)
- break
- os.chdir(start_dir) # avoiding ".." in case of incorrect git directories
- #!/usr/bin/ruby
- #
- # @author Bill Cernansky
- #
- # List and count all repos on a Bitbucket server, arranged by project, to STDOUT.
- #
- require 'json'
- bbserver = 'server.domain.com'
- bbuser = 'username'
- bbpassword = 'password'
- bbmaxrepos = 2000 # Increase if you have more than 2000 repos
- reposRaw = JSON.parse(`curl -s -u '#{bbuser}':'#{bbpassword}' -X GET https://#{bbserver}/rest/api/1.0/repos?limit=#{bbmaxrepos}`)
- projects = {}
- repoCount = reposRaw['values'].count
- reposRaw['values'].each do |r|
- projID = r['project']['key']
- if projects[projID].nil?
- projects[projID] = {}
- projects[projID]['name'] = r['project']['name']
- projects[projID]['repos'] = {}
- end
- repoName = r['name']
- projects[projID]['repos'][repoName] = r['links']['clone'][0]['href']
- end
- privateProjCount = projects.keys.grep(/^~/).count
- publicProjCount = projects.keys.count - privateProjCount
- reportText = ''
- privateRepoCount = 0
- projects.keys.sort.each do |p|
- # Personal project slugs always start with tilde
- isPrivate = p[0] == '~'
- projRepoCount = projects[p]['repos'].keys.count
- privateRepoCount += projRepoCount if isPrivate
- reportText += "nProject: #{p} : #{projects[p]['name']}n #{projRepoCount} #{isPrivate ? 'PERSONAL' : 'Public'} repositoriesn"
- projects[p]['repos'].keys.each do |r|
- reportText += sprintf(" %-30s : %sn", r, projects[p]['repos'][r])
- end
- end
- puts "BITBUCKET REPO REPORTnn"
- puts sprintf(" Total Projects: %4d Public: %4d Personal: %4d", projects.keys.count, publicProjCount, privateProjCount)
- puts sprintf(" Total Repos: %4d Public: %4d Personal: %4d", repoCount, repoCount - privateRepoCount, privateRepoCount)
- puts reportText
Add Comment
Please, Sign In to add comment