-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathgenerate.sh
More file actions
executable file
·228 lines (211 loc) · 7.7 KB
/
generate.sh
File metadata and controls
executable file
·228 lines (211 loc) · 7.7 KB
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#!/bin/bash -e
#
# Author: Lixipeng <lixipeng@hihuron.com>
#
# Description: Shell command used to generate sample openstack
# project which base on stable/liberty version.
#
# Usage: ./generate -m <manager_name> <project_name> <project_path>
#
# Global variable defination
MANAGER_NAME=${MANAGER_NAME:-}
PROJECT_NAME=${PROJECT_NAME:-}
PROJECT_PATH=${PROJECT_PATH:-}
GENERATOR_PATH=${GENERATOR_PATH:-`pwd`}
# Generator help usage
function generator_help() {
echo -e "\033[32m"
echo -e "Usage:\n
generator [-m|--manager-name=MANAGER_NAME] \
PROJECT_NAME PROJET_PATH"
echo -e "Options:\n
-h|--help: Show usage\n
-m|--manager-name: Add manager for this project\n
and set name as manager-name"
echo -e "\033[0m"
}
# Check whether param value is empty,
# If empty, exit with code 0
function check_empty() {
check_param=$1
check_val=$2
if [ "$check_val" = "" ]; then
echo "Param $check_param is empty."
exit 0
fi
}
# Check whether param value is a folder,
# If it is folder, exit with code 0
function check_exist() {
check_param=$1
check_val=$2
if [ ! -d "$check_val" ]; then
echo "Path $check_param is exist."
exit 0
fi
}
# Replace key value from file lists
function replace_file() {
files=$1
replace_old=$2
replace_new=$3
for item in $files;
do
sed -i "s/$replace_old/$replace_new/g" $PROJECT_PATH/$item
done
}
# Fetch arguments
if [[ "$1" = "-h" || "$1" = "--help" ]]; then
generator_help
exit 0
elif [[ "$1" = "-m" || "$1" = "--manager-name" ]]; then
MANAGER_NAME=$2
check_empty "Manager name" $MANAGER_NAME
PROJECT_NAME=$3
check_empty "Project name" $PROJECT_NAME
PROJECT_PATH=$4
check_empty "Project path" $PROJECT_PATH
check_exist "Project path" $PROJECT_PATH
elif [ "$1" = "" ]; then
generator_help
exit 0
else
PROJECT_NAME=$1
check_empty "Project name" $PROJECT_NAME
PROJECT_PATH=$2
check_empty "Project path" $PROJECT_PATH
check_exist "Project path" $PROJECT_PATH
fi
PROJECT_PATH="$PROJECT_PATH/$PROJECT_NAME"
# Check whether PROJECT_NAME = MANAGER_NAME
if [ $PROJECT_NAME = $MANAGER_NAME ]; then
echo "Project name must be unequal with manager name."
exit 0
fi
# Make project dir
if [ -d $PROJECT_PATH ]; then
echo "$PROJECT_PATH is exist now!!!"
exit 0
fi
mkdir $PROJECT_PATH
# Copy template files to project dir
cp -r $GENERATOR_PATH/template/* $PROJECT_PATH
cp $GENERATOR_PATH/template/.gitignore $PROJECT_PATH
cp $GENERATOR_PATH/template/.testr.conf $PROJECT_PATH
# Set first char of PROJECT_NAME upper
PROJECT_NAME_C=`echo $PROJECT_NAME|sed 's/^\(.\)/\U\1/g'`
# Set all chars of PROJECT_NAME upper
PROJECT_NAME_A=`echo $PROJECT_NAME|tr '[:lower:]' '[:upper:]'`
# Replace <project_name> with PROJECT_NAME
project_files="*.py
tox.ini
setup.cfg
run_tests.sh
*.conf
etc/*/*.conf
etc/*/*.ini
etc/*/*.conf.sample
etc/*/*/*.filters
.testr.conf
pylintrc
tools/*.py
tools/*.sh
tools/bandit.yaml
tools/config/*.sh
releasenotes/source/conf.py
.gitignore
\<project_name\>/*.py
\<project_name\>/*/*.py
\<project_name\>/*/*/*.py
\<project_name\>/*/*/*/*.py
\<project_name\>/*/*/*/*/*.py
\<project_name\>/api/schemas/v1.1/*.rng
\<project_name\>/testing/*.rst
\<project_name\>/db/sqlalchemy/migrate_repo/*.cfg
\<project_name\>/config/*.conf
\<project_name\>/locale/*.pot"
replace_file "$project_files" "<project_name>" "$PROJECT_NAME"
# Replace <Project_name> with PROJECT_NAME_C
Project_files="tools/*.py
releasenotes/source/conf.py
releasenotes/source/index.rst
*.rst
run_tests.sh
etc/*/api-paste.ini
\<project_name\>/testing/*.rst
\<project_name\>/*.py
\<project_name\>/*/*.py
\<project_name\>/*/*/*.py
\<project_name\>/*/*/*/*.py
\<project_name\>/*/*/*/*/*.py"
replace_file "$Project_files" "<Project_name>" "$PROJECT_NAME_C"
# Replace <PROJECT_NAME> with $PROJECT_NAME_A
PROJECT_files="tools/config/generate_sample.sh
*.rst
\<project_name\>/*.py
\<project_name\>/api/*.py"
replace_file "$PROJECT_files" "<PROJECT_NAME>" "$PROJECT_NAME_A"
# Rename files with <project_name>, and use PROJECT_NAME instead
# For etc/<project_name>
cp -r $PROJECT_PATH/etc/\<project_name\> $PROJECT_PATH/etc/$PROJECT_NAME
rm -r $PROJECT_PATH/etc/\<project_name\>
# For /etc/<project_name>/README-<project_name>.conf.sample
cp $PROJECT_PATH/etc/$PROJECT_NAME/README-\<project_name\>.conf.sample \
$PROJECT_PATH/etc/$PROJECT_NAME/README-${PROJECT_NAME}.conf.sample
rm $PROJECT_PATH/etc/$PROJECT_NAME/README-\<project_name\>.conf.sample
# For etc/<project_name>/rootwrap.d/<project_name>.filters
cp $PROJECT_PATH/etc/$PROJECT_NAME/rootwrap.d/\<project_name\>.filters \
$PROJECT_PATH/etc/$PROJECT_NAME/rootwrap.d/${PROJECT_NAME}.filters
rm $PROJECT_PATH/etc/$PROJECT_NAME/rootwrap.d/\<project_name\>.filters
# For ./<project_name>
cp -r $PROJECT_PATH/\<project_name\> $PROJECT_PATH/$PROJECT_NAME
rm -r $PROJECT_PATH/\<project_name\>
# For ./<project_name>/config/generate_<project_name>_opts.py
cp -r $PROJECT_PATH/$PROJECT_NAME/config/generate_\<project_name\>_opts.py \
$PROJECT_PATH/$PROJECT_NAME/config/generate_${PROJECT_NAME}_opts.py
rm -r $PROJECT_PATH/$PROJECT_NAME/config/generate_\<project_name\>_opts.py
# For ./<project_name>/config/<project_name>-config-generator.conf
cp -r $PROJECT_PATH/$PROJECT_NAME/config/\<project_name\>-config-generator.conf \
$PROJECT_PATH/$PROJECT_NAME/config/${PROJECT_NAME}-config-generator.conf
rm -r $PROJECT_PATH/$PROJECT_NAME/config/\<project_name\>-config-generator.conf
# For ./<project_name>/locale/<project_name>-log-info.pot
cp -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>-log-info.pot \
$PROJECT_PATH/$PROJECT_NAME/locale/${PROJECT_NAME}-log-info.pot
rm -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>-log-info.pot
# For ./<project_name>/locale/<project_name>-log-warning.pot
cp -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>-log-warning.pot \
$PROJECT_PATH/$PROJECT_NAME/locale/${PROJECT_NAME}-log-warning.pot
rm -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>-log-warning.pot
# For ./<project_name>/locale/<project_name>.pot
cp -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>.pot \
$PROJECT_PATH/$PROJECT_NAME/locale/${PROJECT_NAME}.pot
rm -r $PROJECT_PATH/$PROJECT_NAME/locale/\<project_name\>.pot
# For ./<project_name>/db/sqlalchemy/migrate_repo/versions/001_<project_name>_init.py
cp -r $PROJECT_PATH/$PROJECT_NAME/db/sqlalchemy/migrate_repo/versions/001_\<project_name\>_init.py \
$PROJECT_PATH/$PROJECT_NAME/db/sqlalchemy/migrate_repo/versions/001_${PROJECT_NAME}_init.py
rm -r $PROJECT_PATH/$PROJECT_NAME/db/sqlalchemy/migrate_repo/versions/001_\<project_name\>_init.py
# Generate manager
if [ "$MANAGER_NAME" = "" ]; then
rm -r $PROJECT_PATH/$PROJECT_NAME/\<manager_service_name\>
rm -r $PROJECT_PATH/$PROJECT_NAME/cmd/\<manager_service_name\>.py
else
# Set first char of MANAGER_NAME upper
MANAGER_NAME_C=`echo $MANAGER_NAME|sed 's/^\(.\)/\U\1/g'`
# Rename \<manager_service_name\> with MANAGER_NAME
cp -r $PROJECT_PATH/$PROJECT_NAME/\<manager_service_name\> \
$PROJECT_PATH/$PROJECT_NAME/$MANAGER_NAME
rm -r $PROJECT_PATH/$PROJECT_NAME/\<manager_service_name\>
cp -r $PROJECT_PATH/$PROJECT_NAME/cmd/\<manager_service_name\>.py \
$PROJECT_PATH/$PROJECT_NAME/cmd/${MANAGER_NAME}.py
rm -r $PROJECT_PATH/$PROJECT_NAME/cmd/\<manager_service_name\>.py
manager_files="$PROJECT_NAME/*.py
$PROJECT_NAME/*/*.py
$PROJECT_NAME/*/*/*.py
$PROJECT_NAME/*/*/*/*.py
$PROJECT_NAME/*/*/*/*/*.py"
replace_file "$manager_files" "<manager_service_name>" "$MANAGER_NAME"
Manager_files="$PROJECT_NAME/*/*.py
$PROJECT_NAME/*/*/*.py"
replace_file "$Manager_files" "<Manager_service_name>" "$MANAGER_NAME_C"
fi
echo "Generate project $PROJECT_NAME successful."