diff --git a/java-repo-tools/README.md b/java-repo-tools/README.md index de5effc04e8..41f39c7a02b 100644 --- a/java-repo-tools/README.md +++ b/java-repo-tools/README.md @@ -27,34 +27,21 @@ git remote add java-repo-tools git@github.com:GoogleCloudPlatform/java-repo-tool git fetch java-repo-tools master ``` -To make it easier to push changes back upstream, create a new branch. - -``` -git checkout -b java-repo-tools java-repo-tools/master -``` - We can then go back to the `my-java-samples` code and prepare a Pull Request to -add the `java-repo-tools` code in a subtree. - -``` -git checkout master -# Making a new branch ia optional, but recommended to send a pull request to -# start using java-repo-tools. -git checkout -b use-java-repo-tools -``` - -So that we can pull future updates from the `java-repo-tools` repository, we -merge histories. This way we won't get unnecessary conflicts when pulling changes -in. +add the `java-repo-tools` code in a subtree. Making a new branch is optional, but +recommended so that you can more easily send a pull request to start using +`java-repo-tools`. ``` -git merge -s ours --no-commit java-repo-tools/master +git checkout -b use-java-repo-tools origin/master ``` -Finally, read the `java-repo-tools` into a subtree. +Finally, read the `java-repo-tools` into a subtree. So that you can pull future +updates from the `java-repo-tools` repository, this command will merge histories. +This way prevents unnecessary conflicts when pulling changes in. ``` -git read-tree --prefix=java-repo-tools/ -u java-repo-tools +git subtree add --prefix=java-repo-tools java-repo-tools master ``` Now all the content of `java-repo-tools` will be in the `java-repo-tools/` @@ -143,22 +130,14 @@ Pull Request as you would in the normal flow. What if you make changes in your repository and now want to push them upstream? Assuming you just commited changes in the `java-repo-tools/` directory of your -`my-main-branch`, to merge the changes into the local `java-repo-tools` branch, -we need to cherry pick this commit using the subtree strategy. It will ignore -any changes to file not in the `java-repo-tools/` directory. - -``` -git checkout java-repo-tools -git cherry-pick -x --strategy=subtree my-main-branch -``` - -After you have committed all the changes you want to your `java-repo-tools` -branch, you can push to the upstream `java-repo-tools` repository with the -following command. (Replace `name-for-remote-branch` with the name you'd like to -give the branch on the `java-repo-tools` repository.) +`my-main-branch`, to split the `java-repo-tools` changes into their own branch. +The first time using the `subtree` command, we may need to use the `--rejoin` +argument. ``` -git push java-repo-tools java-repo-tools:name-for-remote-branch +git subtree split --prefix=java-repo-tools -b ${USER}-push-java-repo-tools +git checkout ${USER}-push-java-repo-tools +git push java-repo-tools ${USER}-push-java-repo-tools ``` Then, you can send a pull request to the `java-repo-tools` repository. diff --git a/java-repo-tools/scripts/test-localhost.sh b/java-repo-tools/scripts/test-localhost.sh new file mode 100755 index 00000000000..742e0df3aa8 --- /dev/null +++ b/java-repo-tools/scripts/test-localhost.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +# Copyright 2016 Google Inc. All Rights Reserved. +# +# 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. + +# Usage: +# test-localhost.sh deployment-type path/to/project -- [maven arguments] +# +# This script runs a localhost server Maven plugin and verifies that a request +# to http://localhost:8080/ does not return an error code. + +print_usage () { + echo "Usage:" >&2 + echo " $0 server-type path/to/project [-- maven arguments]" >&2 + echo >&2 + echo "server-type can be any of the following:" >&2 + echo " appengine" >&2 + echo " jetty" >&2 + echo " spring-boot" >&2 +} + +if [[ -z "$1" ]]; then + echo "Missing server-type parameter." >&2 + print_usage + exit 1 +fi +case $1 in + appengine) + mvn_plugin="appengine:devserver" + server_started_message="localhost:8080" + ;; + jetty) + mvn_plugin="jetty:run-exploded" + server_started_message="Started Jetty Server" + ;; + spring-boot) + mvn_plugin="spring-boot:run" + server_started_message="Tomcat started on port(s): 8080 (http)" + ;; + *) + print_usage + exit 1 + ;; +esac + +if [[ -z "$2" ]]; then + echo "Missing directory parameter." >&2 + print_usage + exit 1 +fi +code_path=$2 + +mvn_command="mvn --batch-mode clean ${mvn_plugin} -DskipTests" +if [[ "$3" == "--" ]]; then + shift 3 + for mvn_arg in "${@}"; do + mvn_command="${mvn_command} ${mvn_arg}" + done +elif [[ -n "$3" ]]; then + echo "Got unexpected third argument" >&2 + print_usage + exit 1 +fi + +set -e +set -x + +( +cd "$code_path" +expect -c " + spawn ${mvn_command} + set timeout 600 + expect \"${server_started_message}\" + "'sleep 10 + spawn curl --silent --output /dev/stderr --write-out "%{http_code}" http://localhost:8080/ + expect { + "200" { + exit + } + } + exit 1 + ' +) + diff --git a/travis.sh b/travis.sh index f7677604fab..b6b95215f20 100755 --- a/travis.sh +++ b/travis.sh @@ -33,6 +33,6 @@ devserver_tests=( appengine/datastore/indexes-perfect ) for testdir in ${devserver_tests[@]} ; do - ./java-repo-tools/test-devserver.sh "${testdir}" + ./java-repo-tools/scripts/test-localhost.sh appengine "${testdir}" done