#!/bin/bash ###################################################################### # boostrap_develop.sh # Copyright (C) 2013 LEAP # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ###################################################################### set -e # Exit immediately if a command exits with a non-zero status. REPOSITORIES="bitmask_client leap_pycommon soledad keymanager leap_mail" PACKAGES="leap_pycommon keymanager soledad/common soledad/client soledad/server leap_mail bitmask_client" REPOS_ROOT=`pwd` # Root path for all the needed repositories PS4=">> " # for debugging # Escape code esc=`echo -en "\033"` # Set colors cc_green="${esc}[0;32m" cc_yellow="${esc}[0;33m" cc_blue="${esc}[0;34m" cc_red="${esc}[0;31m" cc_normal=`echo -en "${esc}[m\017"` clone_repos() { status="cloning repositories" echo "${cc_green}Status: $status...${cc_normal}" set -x # show commands if [[ "$1" == "ro" ]]; then # read-only remotes: src="https://leap.se/git" else # read-write remotes: src="ssh://gitolite@leap.se" fi for repo in $REPOSITORIES; do [ ! -d $repo ] && git clone $src/$repo done set +x echo "${cc_green}Status: $status done!${cc_normal}" } checkout_develop(){ status="checkout develop" echo "${cc_green}Status: $status...${cc_normal}" set -x # show commands # get the latest develop in every repo for repo in $REPOSITORIES; do cd $REPOS_ROOT/$repo git checkout -f develop done set +x echo "${cc_green}Status: $status done!${cc_normal}" } update_repos() { status="updating repositories" echo "${cc_green}Status: $status...${cc_normal}" set -x # show commands # get the latest develop in every repo for repo in $REPOSITORIES; do cd $REPOS_ROOT/$repo git checkout -f develop git fetch origin; git fetch --tags origin git reset --hard origin/develop done set +x echo "${cc_green}Status: $status done!${cc_normal}" } create_venv() { status="creating virtualenv" echo "${cc_green}Status: $status...${cc_normal}" set -x # show commands # create and activate the virtualenv cd $REPOS_ROOT virtualenv bitmask.venv && source ./bitmask.venv/bin/activate # symlink PySide to the venv cd $REPOS_ROOT/bitmask_client ./pkg/postmkvenv.sh set +x echo "${cc_green}Status: $status done.${cc_normal}" } setup_develop() { status="installing packages" echo "${cc_green}Status: $status...${cc_normal}" set -x # show commands # do a setup develop in every package for package in $PACKAGES; do cd $REPOS_ROOT/$package python setup.py develop --always-unzip done # hack to solve gnupg version problem pip uninstall -y gnupg && pip install gnupg set +x echo "${cc_green}Status: $status done.${cc_normal}" } finish(){ echo "${cc_green}Status: process completed.${cc_normal}" echo "You can run the client with the following command:" echo -n "${cc_yellow}" echo " shell> source bitmask.venv/bin/activate" echo " shell> python bitmask_client/src/leap/bitmask/app.py -d" echo "${cc_normal}" echo "or with this script using:" echo "${cc_yellow} shell> $0 run${cc_normal}" echo } initialize() { clone_repos $1 checkout_develop create_venv setup_develop # make: compile ui and resources in client make finish } update() { update_repos source $REPOS_ROOT/bitmask.venv/bin/activate setup_develop # make: compile ui and resources in client make finish } run() { shift # remove 'run' from arg list passthrough_args=$@ echo "${cc_green}Status: running client...${cc_normal}" source bitmask.venv/bin/activate set -x python bitmask_client/src/leap/bitmask/app.py -d $passthrough_args set +x } help() { echo ">> LEAP developer helper" echo "Bootstraps the environment to start developing the bitmask client" echo "with all the needed repositories and dependencies." echo echo "Usage: $0 {init | update | run | help}" echo echo " init : Initialize repositories, create virtualenv and \`python setup.py develop\` all." echo " You can use \`init ro\` in order to use the https remotes if you don't have rw access." echo " update : Update the repositories and install new deps (if needed)." echo " run : Runs the client (any extra parameters will be sent to the app)." echo " help : Show this help" echo } case "$1" in init) initialize $2 ;; update) update ;; run) run "$@" ;; *) help ;; esac