Skip to content

Instantly share code, notes, and snippets.

@eeichinger
Last active March 26, 2024 20:57
Show Gist options
  • Save eeichinger/babbdf99d8fe21fef8634d56f29defba to your computer and use it in GitHub Desktop.
Save eeichinger/babbdf99d8fe21fef8634d56f29defba to your computer and use it in GitHub Desktop.
script to clone all repositories in a bitbucket server (aka stash) project
# this script uses syntax for bitbucket server.
# For bitbucket cloud see https://confluence.atlassian.com/bitbucket/use-the-bitbucket-cloud-rest-apis-222724129.html
#
# Note: replace username, password and PROJECTNAME with your values
USERNAME=xxxx
PASSWORD=xxxx
PROJECTNAME=xxxxx
# jq syntax helpful links:
# - http://stackoverflow.com/questions/30601278/how-to-extract-keys-from-multiple-nested-arrays-using-jq
# - http://stackoverflow.com/questions/18592173/select-objects-based-on-value-of-variable-in-object-using-jq
curl -s -u $USERNAME:$PASSWORD https://bitbucket.example.com/rest/api/1.0/projects/$PROJECTNAME/repos/ \
| jq -r '.values[].links.clone[] | select(.name=="ssh") | .href' \
| xargs -I {} echo "git clone '{}'" > clone_repos.sh
@jensim
Copy link

jensim commented Feb 2, 2021

@sreddy31 Im glad it works

I think your problem might be with nbsp in the terminal you are using
I often trip on that the shell treats different whiteSpace differently
Hitting Space is not the same as Shift+Space
Have you tried sanitizing your input in some way
If you use any of JetBrains IDEs, they will highlight strange whiteSpace if you paste it into a scratch file..

@sreddy31
Copy link

sreddy31 commented Feb 2, 2021

@Jenism checked and double checked. I am using Ubuntu 18.04 LTS.
Same issue on my Mac too.
Fetching projects [00:00:00] [########################################] 2/2 (eta:0s)
Failed loading user repos due to 'Failed fetching users from bitbucket, status code: 401 Unauthorized.'
Working repos [00:00:00] [########################################] 2/2 (eta:0s)

But, if I export the password as env variable and run the command, it works like a charm.

Your work has helped me save a lot of my time and I sincerely appreciate your efforts.

@MOURIK
Copy link

MOURIK commented Feb 3, 2021

i have issues with this script.
then after some changes as below it works:
curl -D -X GET -H "Content-Type: application/json" https://$USERNAAME:$user-token@bitbucket.example.com/rest/api/1.0/projects/$PROJECTNAME/repos/
thanks.

@jensim
Copy link

jensim commented Feb 3, 2021

@Jenism checked and double checked. I am using Ubuntu 18.04 LTS.
Same issue on my Mac too.
Fetching projects [00:00:00] [########################################] 2/2 (eta:0s)
Failed loading user repos due to 'Failed fetching users from bitbucket, status code: 401 Unauthorized.'
Working repos [00:00:00] [########################################] 2/2 (eta:0s)

But, if I export the password as env variable and run the command, it works like a charm.

Your work has helped me save a lot of my time and I sincerely appreciate your efforts.

Im really glad to hear it has helped another person out there 🥳
I created a issue on my project to track this issue
jensim/bitbucket_server_cli#21
Ill see to it as soon as i have some time to spare!

@yves-vogl
Copy link

I've modified it a little bit.

curl -s -u "$ORG_USER:$ORG_PASS" "https://api.bitbucket.org/2.0/repositories/$ORG_TEAM?q=project.key%3D%22${ORG_PROJECT}%22&pagelen=100" \
| jq -r '.values[] | {slug:.slug, links:.links.clone[] } | select(.links.name=="ssh") | "git clone \(.links.href) \(.slug)"' | sort > clone-repos.sh

Make sure that you do not have more than 100 repos. In this case you need to add pagination, e.g. in a while-loop.

https://developer.atlassian.com/bitbucket/api/2/reference/meta/pagination

@Jenism
Copy link

Jenism commented Dec 2, 2021

@sreddy31 mentioned wrong person :D typo probably, should have mentioned @jensim not me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment