| #!/bin/bash -e |
| |
| #This is a small script that helps pulling and cloning in multiple repositories. |
| |
| ########################## MUST READ NOTE ###################################### |
| |
| ##### Note 1 ##### |
| #add the following settings into the SSH key config file ~/.ssh/config |
| #note: remove the # when adding into the config file, and replace the |
| #<the_ssh_key_filename> with the public key file name of the key authorized by Marvell |
| |
| #Host 52.74.198.37 |
| # HostName 52.74.198.37 |
| # Port 443 |
| # PreferredAuthentications publickey |
| # IdentityFile ~/.ssh/<the_ssh_key_filename> |
| # User git |
| |
| ##### Note 2 ##### |
| #Usage examples: |
| ##Clone all repos: |
| ##./ugit.sh clone |
| |
| ##Update all repos: |
| ##./ugit.sh pull |
| |
| ##### Note3 ###### |
| #After ugit.sh finished code clone, there is guide on how to prepare and start the build here |
| # openwrt/docs/marvell/howto/start_and_build.txt |
| |
| ########################### NOTE END ########################################## |
| |
| # For display color |
| RESET="\033[0m" |
| RED="\033[0;31m" |
| BROWN="\033[0;33m" |
| |
| # The top repo dir path |
| if [ -z ${OWRT_ROOT+x} ]; then |
| if [ -z ${TOP_DIR} ]; then |
| TOP_DIR=`pwd` |
| fi |
| else |
| TOP_DIR=${OWRT_ROOT}; |
| fi |
| |
| #The list of repos other than the top repo (openwrt) which contains the script |
| #Note: REPOPATHS is path + repo name, the path is relative to TOP_DIR |
| # The sequence should be exactly same as in mgit.sh. |
| |
| #repos in openwrt top folder |
| REPOPATHS="dl" |
| #Feeds repos |
| REPOPATHS+=" external/management external/routing external/subpack" |
| #Marvell repos |
| REPOPATHS+=" marvell/linux marvell/lte-telephony marvell/obm marvell/services marvell/swd marvell/uboot marvell/fota marvell/webui" |
| |
| |
| ############################################################################### |
| # Actual code, don't touch: |
| |
| usage() |
| { |
| echo "Usage : $0 <pull|clone|status>" |
| cd - &>/dev/null |
| exit 1 |
| } |
| |
| clone_repos() |
| { |
| BASE_URL="git@52.74.198.37" |
| echo "Using base URL: '${BASE_URL}'" |
| |
| TOPREPO="openwrt" |
| if [ ! -d ".git" ]; then |
| if [ -d "$TOPREPO" ]; then |
| cd ${TOPREPO} |
| git pull |
| else |
| mkdir -p "${TOPREPO}" |
| git clone "${BASE_URL}:${TOPREPO}.git" "${TOPREPO}" |
| cd ${TOPREPO} |
| fi |
| else |
| #TOPNAME=$(basename $(git remote show -n origin | grep Fetch | cut -d: -f3-)) |
| TOPNAME=$(basename $(git rev-parse --show-toplevel)) |
| if [[ "${TOPNAME}" = "${TOPREPO}" ]]; then |
| git pull |
| else |
| if [ -d "$TOPREPO" ]; then |
| cd ${TOPREPO} |
| git pull |
| else |
| mkdir -p "${TOPREPO}" |
| git clone "${BASE_URL}:${TOPREPO}.git" "${TOPREPO}" |
| cd ${TOPREPO} |
| fi |
| fi |
| fi |
| |
| for REPOPATH in $REPOPATHS ; do |
| REPO=$(basename "${REPOPATH}") |
| if [ ! -d "$REPOPATH" ]; then |
| mkdir -p "${REPOPATH}" |
| git clone "${BASE_URL}:${REPO}_ow.git" "${REPOPATH}" |
| else |
| echo "Updating existing repo: ${REPOPATH}" |
| pushd ${REPOPATH} &>/dev/null |
| git pull |
| popd &>/dev/null |
| fi |
| done |
| } |
| |
| run_command_in_dirs() |
| { |
| CMD=$1 |
| |
| #the top repo |
| echo -e "Processing command in $RED"openwrt"$RESET" |
| eval $CMD |
| echo -e "\r\n" |
| |
| for REPOPATH in $REPOPATHS ; do |
| REPO=$(basename "${REPOPATH}") |
| if [ -d "$REPOPATH" ]; then |
| echo -e "Processing command in $RED${REPOPATH}$RESET" |
| pushd ${REPOPATH} &>/dev/null |
| eval $CMD |
| popd &>/dev/null |
| echo -e "\r\n" |
| else |
| echo -e "Skipping non-existent dir: $RED${REPOPATH}$RESET\r\n" |
| fi |
| done |
| } |
| |
| cd ${TOP_DIR} |
| if [ $# -lt 1 ]; then |
| usage |
| fi |
| |
| case "$1" in |
| clone) |
| clone_repos |
| ;; |
| pull) |
| run_command_in_dirs "git pull" |
| ;; |
| status) |
| run_command_in_dirs "git status" |
| ;; |
| *) |
| usage |
| ;; |
| esac |
| cd - &>/dev/null |