Managing Stale Repos and Branches

Is there a way to determine what branches and repositories are not being used so we can slate them for decommission? When we migrated from GitLab to Stash we had nearly 100 repos that were little labs that people created and just left untouched. 

I'd like to have a way to find repositories or branches that have not had commits to them in the past, say six months. Is there a tool for this or has anyone used Stash's APIs to accomplish something like this?

1 answer

This can be done with the REST API and a script - basically the steps are:

  • retrieve all the repositories
  • for each repository get the branches ordered by modification date (most recent first)
  • get the latest commit on the top branch - that should be the most recent commit to the repo

I've put together a small Python script that does this - the only dependency is the Requests library for easier HTTP. You'll need to change some variables at the top to match your environment.

import requests
import datetime
 
STASH_URL = 'http://localhost:7990/stash'
USERNAME = 'admin'
PASSWORD = 'admin'
auth = (USERNAME, PASSWORD)

THRESHOLD = datetime.datetime.now() - datetime.timedelta(weeks=26) # only show repos with commits older than half a year ago

repos = requests.get(STASH_URL + '/rest/api/1.0/repos?limit=9999', auth=auth)
values = repos.json()['values']
print("Searching %d repos..." % len(values))
for repo in values:
  repo = (repo['project']['key'], repo['slug'])
  branches_request = requests.get(STASH_URL + '/rest/api/1.0/projects/%s/repos/%s/branches?orderBy=MODIFICATION&limit=1' % repo, auth=auth)
  branches = branches_request.json()['values']
  if len(branches) > 0:
    most_recent_branch = branches[0]
    most_recent_commit = most_recent_branch['latestChangeset']
    commit_request = requests.get(STASH_URL + '/rest/api/1.0/projects/%s/repos/%s/commits/%s' % (repo + (most_recent_commit,)), auth=auth)
    commit = commit_request.json()
    commit_date = datetime.datetime.fromtimestamp(commit['authorTimestamp'] / 1000)
    if commit_date <= THRESHOLD:
      print("Most recent commit in repo %s in project %s was at %s by %s (%s)" % (repo + (commit_date, commit['author']['name'], commit['message'])))

Suggest an answer

Log in or Sign up to answer
Atlassian Community Anniversary

Happy Anniversary, Atlassian Community!

This community is celebrating its one-year anniversary and Atlassian co-founder Mike Cannon-Brookes has all the feels.

Read more
Community showcase
Piotr Plewa
Published Dec 27, 2017 in Bitbucket

Recipe: Deploying AWS Lambda functions with Bitbucket Pipelines

Bitbucket Pipelines helps me manage and automate a number of serverless deployments to AWS Lambda and this is how I do it. I'm building Node.js Lambda functions using node-lambda&nbsp...

1,936 views 1 5
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you