-
Notifications
You must be signed in to change notification settings - Fork 0
/
ml
163 lines (151 loc) · 5.01 KB
/
ml
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
#!/bin/bash
###############################################################################
# Copyright 2012 MarkLogic Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
hash ruby 2>&- || { echo >&2 "Ruby is required to run the ml scripts."; exit 1; }
usage()
{
printf "Usage: ml new app-name --server-version=[version-number] [--branch=branch] [--app-type=mvc|hybrid|rest] [--git]\n
use --git to automatically configure a git repo
use --branch to specify the GitHub branch of the Roxy project your project
will be based on (master, dev)
use --app-type to specify the project type:
mvc: a Roxy MVC project
rest: a MarkLogic REST API project
hybrid: a hybrid of both types
use --force to force installation into an existing directory\n"
}
PARAMS=("${@}")
if [ "$1" == 'new' ]
then
shift
if [ "$1" == '-h' ] || [ "$1" == '--help' ]
then
usage
elif [ $1 ]
then
# check if we are already in a valid Roxy project
if [ -e deploy/lib/ml.rb ]
then
read -r -n 1 -p "Running ml new from within a Roxy project is not recommended. Continue? [y/N] " response
printf "\n"
if ! [[ $response = Y ]]
then
exit 1
fi
fi
app_name="$1"
shift
hash git 2>&- || { echo >&2 "Git is required to use the new command."; exit 1; }
BRANCH="master"
INIT_GIT=0
FORCE_INSTALL=0
APPTYPE="mvc"
FORK="marklogic"
for (( i = 0; i < ${#PARAMS[@]}; i++ )); do
if [[ ${PARAMS[${i}]} == --branch=* ]]
then
splits=(${PARAMS[${i}]//=/ })
BRANCH=${splits[1]}
elif [[ ${PARAMS[${i}]} == --git* ]]
then
INIT_GIT=1
elif [[ ${PARAMS[${i}]} == --force* ]]
then
FORCE_INSTALL=1
elif [[ ${PARAMS[${i}]} == --app-type=* ]]
then
splits=(${PARAMS[${i}]//=/ })
APPTYPE=${splits[1]}
elif [[ ${PARAMS[${i}]} == --fork=* ]]
then
splits=(${PARAMS[${i}]//=/ })
FORK=${splits[1]}
fi
done
if [ -e $app_name ] && [ ${FORCE_INSTALL} == 0 ]
then
printf "\n${app_name} already exists. Aborting\n"
exit 1
fi
if [ "$APPTYPE" != "mvc" ] && [ "$APPTYPE" != "rest" ] && [ "$APPTYPE" != "hybrid" ]
then
printf "\nValid values for app-type are mvc, rest and hybrid. Aborting\n"
exit 1
fi
printf "\nCreating new Application: ${app_name}...\n"
if [ -e $app_name ]
then
git clone git://github.com/${FORK}/roxy.git -b ${BRANCH} ${app_name}.tmp_1 || exit 1
mv ${app_name}.tmp_1/* ${app_name}/ || exit 1
rm -rf ${app_name}.tmp_1 || exit 1
else
git clone git://github.com/${FORK}/roxy.git -b ${BRANCH} ${app_name} || exit 1
fi
pushd ${app_name} > /dev/null || exit 1
rm -rf .git* || exit 1
if [ "$APPTYPE" = "rest" ]
then
# For a REST application, we won't be using the MVC code. Remove it.
# mvc and hybrid apps will use it.
rm -rf src/* || exit 1
printf "\nNo initial source code is provided for REST apps. You can copy code from Application Builder under the source directory.\n"
fi
./ml init ${app_name} ${@} || exit 1
popd > /dev/null || exit 1
printf " done\n"
if [ -e $app_name ]
then
if [ ${INIT_GIT} == 1 ]
then
printf "Creating a git repository:\n"
cd ${app_name}
git init || exit 1
git add . || exit 1
git commit -q -m "Initial Commit" || exit 1
printf "...done\n"
fi
fi
else
printf "\nNOTE: Please provide an app name..\n\n"
usage
fi
elif [ "$1" == 'self-test' ]
then
if [ -e deploy/test/test_main.rb ]
then
# Look for --server-version param, and export that as env variable. Unit testing doesn't allow cmd params..
for (( i = 0; i < ${#PARAMS[@]}; i++ )); do
if [[ ${PARAMS[${i}]} == --server-version=* ]]
then
splits=(${PARAMS[1]//=/ })
# This exports the version only to sub-processes, e.g. the ruby call below..
export ROXY_TEST_SERVER_VERSION=${splits[1]}
fi
done
ruby -I deploy -I deploy/lib -I deploy/test deploy/test/test_main.rb || exit 1
else
printf "\nERROR: You must run this command inside a valid Roxy Project. Use 'ml new' to create a project.\n\n"
usage
fi
else
if [ -e deploy/lib/ml.rb ]
then
ruby -I deploy -I deploy/lib deploy/lib/ml.rb $* || exit 1
else
printf "\nERROR: You must run this command inside a valid Roxy Project. Use 'ml new' to create a project.\n\n"
usage
fi
fi