Created by
E.Z. Hart
| #!/bin/ash
# Bitbucket backup script
# backups all repos (including wiki and issues) of a user
#
# requires (in PATH):
# - hg (http://mercurial.selenic.com)
# - git (http://git-scm.com)
# - jq (http://stedolan.github.io/jq/)
# - curl (http://curl.haxx.se)
#
# variables that must be set
# - USER_NAME: the user name
# - API_KEY: api key of the user
# - BACKUP_LOCATION: the base path to store the backup
backup_hg () {
if [ -d "$1" ]; then
cd $1
hg pull
else
hg clone ssh://hg@bitbucket.org/$2 $1
fi
}
backup_git () {
if [ -d "$1" ]; then
cd $1
git pull
else
git clone git@bitbucket.org:$2 $1
fi
}
backup_scm () {
TYPE=$3
REPO=$2
REPO_BACKUP_LOCATION=$BACKUP_LOCATION/$REPO
REPO_REMOTE_PATH=$REPO
if [ "git" = "$1" ]; then
REPO_REMOTE_PATH=$REPO_REMOTE_PATH.git
fi
if [ "repo" = "$TYPE" ]; then
REPO_BACKUP_LOCATION=$REPO_BACKUP_LOCATION/repo
elif [ "wiki" = "$TYPE" ]; then
REPO_BACKUP_LOCATION=$REPO_BACKUP_LOCATION/wiki
REPO_REMOTE_PATH=$REPO_REMOTE_PATH/wiki
fi
if [ "hg" = "$1" ]; then
backup_hg $REPO_BACKUP_LOCATION $REPO_REMOTE_PATH
elif [ "git" = "$1" ]; then
backup_git $REPO_BACKUP_LOCATION $REPO_REMOTE_PATH
fi
}
mkdir -p $BACKUP_LOCATION
repositories=`curl --cacert cacert.pem -s -S --user $USER_NAME:$API_KEY https://api.bitbucket.org/2.0/repositories/$USER_NAME\?pagelen\=100 | jq -r '.values[] | "\(.full_name) \(.scm) \(.has_issues) \(.has_wiki)"'`
OIFS="$IFS"
IFS=$'\n'
for repository in $repositories
do
repository_name=`echo $repository | cut -d ' ' -f1`
has_issues=`echo $repository | cut -d ' ' -f3`
has_wiki=`echo $repository | cut -d ' ' -f4`
scm=`echo $repository | cut -d ' ' -f2`
echo "backing up $repository_name"
echo "backing up $repository_name repo"
backup_scm $scm $repository_name repo
if [ "true" = "$has_wiki" ]; then
echo "backing up $repository_name wiki"
backup_scm $scm $repository_name wiki
fi
if [ "true" = "$has_issues" ]; then
echo "backing up $repository_name issues"
ISSUES_BACKUP_LOCATION=$BACKUP_LOCATION/$repository_name/issues
mkdir -p $ISSUES_BACKUP_LOCATION
curl --cacert cacert.pem -s -S --user $USER_NAME:$API_KEY https://api.bitbucket.org/1.0/repositories/$repository_name/issues > $ISSUES_BACKUP_LOCATION/issues.json
fi
done
IFS="$OIFS"
|