forked from mix86/deploy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeploy.sh
105 lines (94 loc) · 2.08 KB
/
deploy.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env bash
# deploy settings
REMOTE=""
REMOTE_PATH=""
REMOTE_USER=""
EXCLUDES=""
UPDATE_REMOTE=false
DELETE_EXCLUDED=true
DELETE_NOT_EXISTING=true
# default excludes
DEFAULT_EXCLUDES="
--exclude=.git
--exclude=.gitignore
--exclude=.hg
--exclude=.hgignore
--exclude=.hgcheck
--exclude=.svn
--exclude=*.pyc
--exclude=.DS_Store
--exclude=.idea
--exclude=.deploy
--exclude=log
--exclude=debian
--exclude=.ropeproject
--exclude=*.sublime-workspace
"
REVERSE=false
DRY_RUN=""
PROJECT=`pwd`
SED="sed -Ee"
retry=0
until [[ -f $PROJECT/.deploy ]]
do
if [[ $retry -gt 32 ]]; then
echo "Can't find \".deploy\" file" >&2
exit 1
fi
PROJECT="$PROJECT/.."
retry=$(($retry+1))
done
cd $PROJECT
PROJECT=`pwd`
. $PROJECT/.deploy
EXCLUDES="$EXCLUDES $DEFAULT_EXCLUDES"
while [ $1 ]
do
case $1 in
"--dry" )
echo "This is dry run. No real sync executed."
DRY_RUN="-n"
;;
"--reverse" )
REVERSE=true
;;
"--with"*)
WITH=`echo $1 | $SED 's/--with=(.+)/\1/g'`
EXCLUDES=`echo $EXCLUDES | tr " " "\n" | grep -v $WITH`
;;
* )
echo "Unknown option: $1" >&2
exit 1
;;
esac
shift
done
if [[ -z $REMOTE_USER ]]; then
REMOTE_USER=$USER
fi
OPT_UPDATE=""
if $UPDATE_REMOTE ; then
OPT_UPDATE="--update"
fi
DEL_EX=""
if $DELETE_EXCLUDED ; then
DEL_EX="--delete-excluded"
fi
DEL_NOT_EX=""
if $DELETE_NOT_EXISTING ; then
DEL_NOT_EX="--delete --force"
fi
if $REVERSE ; then
PROJECT_NAME=`echo $PROJECT | $SED 's/[a-zA-Z0-1\/]+\/([a-zA-Z0-9]+)/\1/'`
echo $REMOTE_USER@$REMOTE:$REMOTE_PATH/$PROJECT_NAME" => "$PROJECT/..
rsync -rv $DRY_RUN $OPT_UPDATE --executability $EXCLUDES \
$REMOTE_USER@$REMOTE:$REMOTE_PATH/$PROJECT_NAME $PROJECT/..
else
for REMOTE_SERVER in "${REMOTES[@]}"
do
echo $PROJECT" => "$REMOTE_SERVER:$REMOTE_PATH
rsync -rvL $DRY_RUN $OPT_UPDATE $DEL_EX $DEL_NOT_EX --executability \
$EXCLUDES $PROJECT $REMOTE_USER@$REMOTE_SERVER:$REMOTE_PATH
done
fi
exit 0