Guest User

Untitled

a guest
Dec 27th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. #!/usr/bin/python
  2. #
  3. # @author Jason LeMonier
  4. #
  5. # Clone ALL Projects & Repositories for a given stash url
  6. #
  7. # Loop through all projects: [P1, P2, ...]
  8. # P1 > for each project make a directory with the key "P1"
  9. # Then clone every repository inside of directory P1
  10. # Backup a directory, create P2, ...
  11. #
  12. # Added ACTION_FLAG bit so the same logic can run fetch --all on every repository and/or clone.
  13.  
  14. import sys
  15. import os
  16. import stashy
  17.  
  18. ACTION_FLAG = 1 # Bit: +1=Clone, +2=fetch --all
  19.  
  20. url = os.environ["STASH_URL"] # "https://mystash.com/stash"
  21. user = os.environ["STASH_USER"] # joedoe"
  22. pwd = os.environ["STASH_PWD"] # Yay123
  23.  
  24. stash = stashy.connect(url, user, pwd)
  25.  
  26. def mkdir(xdir):
  27. if not os.path.exists(xdir):
  28. os.makedirs(xdir)
  29.  
  30. def run_cmd(cmd):
  31. print ("Directory cwd: %s "%(os.getcwd() ))
  32. print ("Running Command: n %s " %(cmd))
  33. os.system(cmd)
  34.  
  35. start_dir = os.getcwd()
  36.  
  37. for project in stash.projects:
  38. pk = project_key = project["key"]
  39. mkdir(pk)
  40. os.chdir(pk)
  41.  
  42. for repo in stash.projects[project_key].repos.list():
  43. for url in repo["links"]["clone"]:
  44. href = url["href"]
  45. repo_dir = href.split("/")[-1].split(".")[0]
  46.  
  47. if (url["name"] == "http"):
  48. print (" url.href: %s"% href) # https://joedoe@mystash.com/stash/scm/app/ae.git
  49. print ("Directory cwd: %s Project: %s"%(os.getcwd(), pk))
  50.  
  51. if ACTION_FLAG & 1 > 0:
  52. if not os.path.exists(repo_dir):
  53. run_cmd("git clone %s" % url["href"])
  54. else:
  55. print ("Directory: %s/%s exists already. Skipping clone. "%(os.getcwd(), repo_dir))
  56.  
  57. if ACTION_FLAG & 2 > 0:
  58. # chdir into directory "ae" based on url of this repo, fetch, chdir back
  59. cur_dir = os.getcwd()
  60. os.chdir(repo_dir)
  61. run_cmd("git fetch --all ")
  62. os.chdir(cur_dir)
  63.  
  64. break
  65.  
  66. os.chdir(start_dir) # avoiding ".." in case of incorrect git directories
  67.  
  68. #!/usr/bin/ruby
  69. #
  70. # @author Bill Cernansky
  71. #
  72. # List and count all repos on a Bitbucket server, arranged by project, to STDOUT.
  73. #
  74. require 'json'
  75.  
  76. bbserver = 'server.domain.com'
  77. bbuser = 'username'
  78. bbpassword = 'password'
  79. bbmaxrepos = 2000 # Increase if you have more than 2000 repos
  80.  
  81. reposRaw = JSON.parse(`curl -s -u '#{bbuser}':'#{bbpassword}' -X GET https://#{bbserver}/rest/api/1.0/repos?limit=#{bbmaxrepos}`)
  82.  
  83. projects = {}
  84.  
  85. repoCount = reposRaw['values'].count
  86.  
  87. reposRaw['values'].each do |r|
  88. projID = r['project']['key']
  89. if projects[projID].nil?
  90. projects[projID] = {}
  91. projects[projID]['name'] = r['project']['name']
  92. projects[projID]['repos'] = {}
  93. end
  94. repoName = r['name']
  95. projects[projID]['repos'][repoName] = r['links']['clone'][0]['href']
  96. end
  97.  
  98. privateProjCount = projects.keys.grep(/^~/).count
  99. publicProjCount = projects.keys.count - privateProjCount
  100.  
  101. reportText = ''
  102. privateRepoCount = 0
  103. projects.keys.sort.each do |p|
  104. # Personal project slugs always start with tilde
  105. isPrivate = p[0] == '~'
  106. projRepoCount = projects[p]['repos'].keys.count
  107. privateRepoCount += projRepoCount if isPrivate
  108. reportText += "nProject: #{p} : #{projects[p]['name']}n #{projRepoCount} #{isPrivate ? 'PERSONAL' : 'Public'} repositoriesn"
  109.  
  110. projects[p]['repos'].keys.each do |r|
  111. reportText += sprintf(" %-30s : %sn", r, projects[p]['repos'][r])
  112. end
  113. end
  114.  
  115. puts "BITBUCKET REPO REPORTnn"
  116. puts sprintf(" Total Projects: %4d Public: %4d Personal: %4d", projects.keys.count, publicProjCount, privateProjCount)
  117. puts sprintf(" Total Repos: %4d Public: %4d Personal: %4d", repoCount, repoCount - privateRepoCount, privateRepoCount)
  118. puts reportText
Add Comment
Please, Sign In to add comment