-
Notifications
You must be signed in to change notification settings - Fork 171
/
weave.sh
executable file
·65 lines (57 loc) · 1.59 KB
/
weave.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/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