blob: ecdb73c546c382fcb511ee667cf2db0b610e4b61 [file] [log] [blame]
#!/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