#!/bin/bash -x set -e USE_BITMAP_INDEX=${USE_BITMAP_INDEX:-"0"} MANIFEST_URL=$TUNASYNC_UPSTREAM_URL/weave/manifest MANIFEST_DIR=$TUNASYNC_WORKING_DIR/.manifest MANIFEST_XML_REPOLIST=$(dirname $0)/helpers/manifest-xml-repolist.py IGNORED_REPO=( # these are private repos "weave/tests" "weave/libuweave" "weave/cocoapods" ) export GIT_TERMINAL_PROMPT=0 function contains() { for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done return 1 } function git_clone_or_pull { URL=$1 DIRECTORY=$2 MIRROR=$3 if [[ -z $MIRROR ]]; then if [[ -d $DIRECTORY ]]; then git -C $DIRECTORY pull else git clone $URL $DIRECTORY fi else if [[ -d $DIRECTORY ]]; then git -C $DIRECTORY remote update else git clone --mirror $URL $DIRECTORY fi fi } function git_repack() { echo "Start writing bitmap index" while read repo; do cd $repo size=$(du -sm .|cut -f1) if [[ "$size" -gt "100" ]]; then echo $repo, ${size}M git repack -a -b -d fi done < <(find $TUNASYNC_WORKING_DIR -not -path "$MANIFEST_DIR/.git/*" -type f -name HEAD -exec dirname '{}' ';') } git_clone_or_pull $MANIFEST_URL $MANIFEST_DIR for repo in $($MANIFEST_XML_REPOLIST $MANIFEST_DIR/default.xml weave); do contains $repo ${IGNORED_REPO[@]} && continue echo $TUNASYNC_UPSTREAM_URL/$repo if [[ -z ${DRY_RUN:-} ]]; then git_clone_or_pull $TUNASYNC_UPSTREAM_URL/$repo $TUNASYNC_WORKING_DIR/$repo yes fi done if [[ -z ${DRY_RUN:-} && "$USE_BITMAP_INDEX" == "1" ]]; then git_repack fi