@@ -3,7 +3,7 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# You must run this at the root of the eden git repo
|
||||
CPM_DIR=$PWD
|
||||
NPROC=`nproc`
|
||||
NPROC=$(nproc || echo 8)
|
||||
. ./tools/mirror/common.sh
|
||||
. ./tools/cpm/common.sh
|
||||
die() {
|
||||
@@ -24,54 +24,61 @@ help() {
|
||||
--name Set name of clone
|
||||
EOF
|
||||
}
|
||||
[ -z "$SCM_ROOT_DIR" ] && SCM_ROOT_DIR="/usr/local/jails/containers/classic/srv/git/repos"
|
||||
[ -z "$SCM_ROOT_DIR" ] && SCM_ROOT_DIR="/usr/local/jails/containers/cgit-www/srv/git/repos"
|
||||
|
||||
op_initial() {
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
# stuff to parse the cpmfile json and then spit out full repo path
|
||||
REPOS=$(echo "$PACKAGES" \
|
||||
| jq -r 'reduce .[] as $i (""; . + (if $i.git_host == null then "https://github.com" else "https://" + $i.git_host end) + "/" + $i.repo + " ")' \
|
||||
| tr ' ' '\n' | xargs -I {} echo {})
|
||||
# clone the stuff
|
||||
cd $SCM_ROOT_DIR && echo "$REPOS" \
|
||||
| xargs -P $NPROC -I {} sh -c ". $CPM_DIR/tools/mirror/common.sh && git_clone_mirror_repo {}"
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
}
|
||||
op_clone_submodules() {
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
cd $SCM_ROOT_DIR && find . -maxdepth 2 -type d -name '*.git' -print0 \
|
||||
| xargs -0 -I {} sh -c ". $CPM_DIR/tools/mirror/common.sh && git_retrieve_gitmodules {}" \
|
||||
| while IFS= read -r url; do
|
||||
git_clone_mirror_repo $url || echo "skipped $url"
|
||||
done
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
}
|
||||
op_remote_update() {
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
cd $SCM_ROOT_DIR && find . -maxdepth 3 -type d -name '*.git' -print0 \
|
||||
| xargs -0 -P $NPROC -I {} sh -c 'cd {} && git remote update && echo {}'
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
}
|
||||
op_mirror() {
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
[ -z "$URL" ] && die "Specify repo --url"
|
||||
[ -z "$NAME" ] && NAME=$(echo "$URL" | cut -d '/' -f 5)
|
||||
[ -z "$ORG" ] && ORG=$(echo "$URL" | cut -d '/' -f 4)
|
||||
cd $SCM_ROOT_DIR && git clone --mirror $URL $ORG/$NAME || echo "skipped $URL"
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
}
|
||||
|
||||
while true; do
|
||||
case "$1" in
|
||||
--path)
|
||||
shift
|
||||
SCM_ROOT_DIR=$1
|
||||
[ -z "$SCM_ROOT_DIR" ] && "Empty target root dir"
|
||||
;;
|
||||
--initial)
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
# stuff to parse the cpmfile json and then spit out full repo path
|
||||
REPOS=$(echo "$PACKAGES" \
|
||||
| jq -r 'reduce .[] as $i (""; . + (if $i.git_host == null then "https://github.com" else "https://" + $i.git_host end) + "/" + $i.repo + " ")' \
|
||||
| tr ' ' '\n' | xargs -I {} echo {})
|
||||
# clone the stuff
|
||||
cd $SCM_ROOT_DIR && echo "$REPOS" \
|
||||
| xargs -P $NPROC -I {} sh -c ". $CPM_DIR/tools/mirror/common.sh && git_clone_mirror_repo {}"
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
;;
|
||||
--clone-submodules)
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
cd $SCM_ROOT_DIR && find . -maxdepth 2 -type d -name '*.git' -print0 \
|
||||
| xargs -0 -I {} sh -c ". $CPM_DIR/tools/mirror/common.sh && git_retrieve_gitmodules {}" \
|
||||
| while IFS= read -r url; do
|
||||
git_clone_mirror_repo $url || echo "skipped $url"
|
||||
done
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
;;
|
||||
--remote-update)
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
cd $SCM_ROOT_DIR && find . -maxdepth 3 -type d -name '*.git' -print0 \
|
||||
| xargs -0 -P $NPROC -I {} sh -c 'cd {} && git remote update && echo {}'
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
;;
|
||||
--mirror)
|
||||
sudo chmod 777 $SCM_ROOT_DIR
|
||||
[ -z "$URL" ] && die "Specify repo --url"
|
||||
[ -z "$NAME" ] && NAME=$(echo "$URL" | cut -d '/' -f 5)
|
||||
[ -z "$ORG" ] && ORG=$(echo "$URL" | cut -d '/' -f 4)
|
||||
cd $SCM_ROOT_DIR && git clone --mirror $URL $ORG/$NAME || echo "skipped $URL"
|
||||
sudo chmod 755 $SCM_ROOT_DIR
|
||||
;;
|
||||
--url) shift; URL=$1 ;;
|
||||
--name) shift; NAME=$1;;
|
||||
--org) shift; ORG=$1;;
|
||||
--path) shift; SCM_ROOT_DIR=$1; [ -z "$SCM_ROOT_DIR" ] && die "Empty target root dir";;
|
||||
--initial) OP_INITIAL=1;;
|
||||
--clone-submodules) OP_CLONE_SUBMODULES=1;;
|
||||
--remote-update) OP_REMOTE_UPDATE=1;;
|
||||
--mirror) OP_MIRROR=1;;
|
||||
--url) shift; URL=$1; [ -z "$URL" ] && die "Expected url";;
|
||||
--name) shift; NAME=$1; [ -z "$NAME" ] && die "Expected name";;
|
||||
--org) shift; ORG=$1; [ -z "$ORG" ] && die "Expected organisation";;
|
||||
--help) help "$@";;
|
||||
--*) die "Invalid option $1" ;;
|
||||
"$0" | "") break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
[ "$OP_INITIAL" = 1 ] && op_initial
|
||||
[ "$OP_CLONE_SUBMODULES" = 1 ] && op_clone_submodules
|
||||
[ "$OP_REMOTE_UPDATE" = 1 ] && op_remote_update
|
||||
[ "$OP_MIRROR" = 1 ] && op_mirror
|
||||
|
||||
Reference in New Issue
Block a user