#!/bin/bash ############################################################################### # Copyright 2012-2015 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=bare|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: bare: a bare Roxy project mvc: a Roxy MVC project rest: a MarkLogic REST API project hybrid: a hybrid of MVC and REST 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" ]] && [[ $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" != "bare" ] && [ "$APPTYPE" != "mvc" ] && [ "$APPTYPE" != "rest" ] && [ "$APPTYPE" != "hybrid" ] then printf "\nValid values for app-type are bare, 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" != "mvc" ] && [ "$APPTYPE" != "hybrid" ] then # For non-MVC applications, we won't be using the MVC code. Remove it. rm -rf src/* || exit 1 printf "\nNo initial source code is provided for non-MVC apps. You can capture code from a REST application, or add your own code.\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 $? 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