From be11c372a0906e552eef414ab4f18de5642833d3 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Fri, 19 Feb 2016 17:00:26 +0100 Subject: [PATCH] Initial commit Signed-off-by: Roland Haeder --- .jprojects.sh | 34 ++++++++++ README | 3 + build-dist-all.sh | 55 +++++++++++++++++ check-untracked.sh | 15 +++++ checkout-jprojects.sh | 22 +++++++ commit-jprojects.sh | 25 ++++++++ cp-dist.sh | 30 +++++++++ create-jproject-branch.sh | 47 ++++++++++++++ dist.sh | 68 ++++++++++++++++++++ fix-project-remotes.sh | 126 ++++++++++++++++++++++++++++++++++++++ merge-jprojects.sh | 37 +++++++++++ pull-stick.sh | 19 ++++++ push-stick.sh | 17 +++++ 13 files changed, 498 insertions(+) create mode 100644 .jprojects.sh create mode 100644 README create mode 100755 build-dist-all.sh create mode 100755 check-untracked.sh create mode 100755 checkout-jprojects.sh create mode 100755 commit-jprojects.sh create mode 100755 cp-dist.sh create mode 100755 create-jproject-branch.sh create mode 100755 dist.sh create mode 100755 fix-project-remotes.sh create mode 100755 merge-jprojects.sh create mode 100755 pull-stick.sh create mode 100755 push-stick.sh diff --git a/.jprojects.sh b/.jprojects.sh new file mode 100644 index 0000000..201f168 --- /dev/null +++ b/.jprojects.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +LIST="jcore jcore-logger-lib jcore-logger-ejb jcoreee \ + jcountry-core jcountry-lib jcountry-ejb \ + jphone-core \ + jcontacts-core jcontacts-business-core jcontacts-lib jcontacts-ejb \ + juser-core juser-lib juser-ejb \ + jletter-core jletter-lib jletter-ejb \ + jcore-swing \ + jshop-core jshop-ee-lib jshop-ejb \ + jshop-receipt-lib jshop-receipt-ejb" +LIST="${LIST} + pizzaservice-lib pizzaservice pizzaservice-swing pizzaservice-war \ + jjobs-lib jjobs-ejb jjobs jjobs-war \ + addressbook-lib addressbook-ejb addressbook addressbook-war addressbook-uml" + +# BROKEN: +LIST="${LIST} addressbook-swing" + +# Own home directory +declare -r JPROJECTS_HOME="${PWD}" + +# Test on .git availability" +for project in ${LIST}; do + if [ ! -d "${project}" ] + then + echo "$0: Project '${project}' not created." + exit 1 + elif [ ! -d "${project}" ] + then + echo "$0: Project '${project}' is no GIT project." + exit 1 + fi +done diff --git a/README b/README new file mode 100644 index 0000000..bb2077c --- /dev/null +++ b/README @@ -0,0 +1,3 @@ +These are my (Roland Haeder) helper scripts to build and maintain my Java projects. + +They are licensed "AS IS" and "WITHOUT ANY WARRANTY", so public domain. diff --git a/build-dist-all.sh b/build-dist-all.sh new file mode 100755 index 0000000..1738107 --- /dev/null +++ b/build-dist-all.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +for DIST in ${LIST}; do + echo "$0: Executing '${DIST}' ..." + P=${DIST%/*} + + echo "$0: P='${P}'" + cd "${JPROJECTS_HOME}/${P}" || exit 255 + + if [ ! -e "build.xml" ] + then + echo "$0: No build.xml found, skipping project '${P}'." + continue + fi + + if [ "$1" != "d" ] + then + # Cleanup project and build JAR + ant clean jar + + # Save status + STATUS="$?" + + # Has it failed? + if [ "${STATUS}" != "0" ] + then + # This has failed, so try "dist" + ant clean dist + STATUS="$?" + + # Still failing? Oh, to bad + if [ "${STATUS}" != "0" ] + then + echo "$0: Failed to build '${DIST}'." + exit 1 + fi + fi + fi + + if [ ! -f "./dist.sh" ] + then + echo "$0: Project '${DIST}' has no dist.sh" + elif [ ! -e "./dist.sh" ] + then + echo "$0: Error: Project '${DIST}' has non-executable dist.sh!" + exit 1 + else + ./dist.sh + fi +done + +echo "$0: All done." +exit 0 diff --git a/check-untracked.sh b/check-untracked.sh new file mode 100755 index 0000000..7216a7e --- /dev/null +++ b/check-untracked.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +. ./.jprojects.sh + +for project in ${LIST}; do + echo "$0: Checking '${project}' ..." + cd "${project}" + STATUS=`git status` + UNTRACKED=`echo "${STATUS}" | grep "Untracked files:"` + if [ -n "${UNTRACKED}" ] + then + echo "${STATUS}" + fi + cd - +done diff --git a/checkout-jprojects.sh b/checkout-jprojects.sh new file mode 100755 index 0000000..a577daa --- /dev/null +++ b/checkout-jprojects.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +TARGET_BRANCH="master" + +for project in ${LIST}; do + echo "$0: Processing '${project}' ..." + cd "${JPROJECTS_HOME}/${project}" + + # Checkout all + git checkout -- . + + if [ -n "${TARGET_BRANCH}" ] + then + echo "$0: Switching back to '${TARGET_BRANCH}'" + git checkout "${TARGET_BRANCH}" + fi +done + +echo "$0: All done." +exit 0 diff --git a/commit-jprojects.sh b/commit-jprojects.sh new file mode 100755 index 0000000..93783cf --- /dev/null +++ b/commit-jprojects.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +for project in ${LIST}; do + cd "${project}" || exit 255 + CHECK_CHANGES=`git commit --dry-run | grep "Changes to be committed:"` + + if [ -n "${CHECK_CHANGES}" ] + then + echo "$0: Committing '${project}' ..." + if [ -n "$1" ] + then + git commit -a --signoff -S -m "$1" || exit 255 + else + git commit -a --signoff -S || exit 255 + fi + else + echo "$0: Nothing to commit for project '${project}'." + fi + cd - +done + +echo "$0: All done." +exit 0 diff --git a/cp-dist.sh b/cp-dist.sh new file mode 100755 index 0000000..ace7597 --- /dev/null +++ b/cp-dist.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +for project in ${LIST}; do + if [ -f "${project}/dist.sh" ] + then + echo "$0: Copying dist.sh to '${project}' ..." + cp -v dist.sh "${project}/" || exit 255 + fi + + if [ ! -d "${project}/docs" -o "$1" = "f" ] + then + echo "$0: GNU-ifying project '${project}' ..." + cp -rv docs "${project}/" || exit 255 + cd "${JPROJECTS_HOME}/${project}" + echo "$0: git add ..." + git add docs || exit 255 + echo "$0: git rm ..." + git rm -f COPYING + echo "$0: git mv ..." + git mv docs/COPYING . || exit 255 + cd "${JPROJECTS_HOME}" + else + echo "$0: Project '${project}' already prepared." + fi +done + +echo "$0: All done." +exit 0 diff --git a/create-jproject-branch.sh b/create-jproject-branch.sh new file mode 100755 index 0000000..16ac726 --- /dev/null +++ b/create-jproject-branch.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +echo "$0: JPROJECTS_HOME='${JPROJECTS_HOME}'" + +NEW_BRANCH="rewrites/wildfly" + +#COMMIT_MESSAGE="WildFly branch created with initial scripts, but it doesn't load my libs." +COMMIT_MESSAGE="" +COMMIT_ADD="" +AFTER_COMMIT_BRANCH="master" + +for project in ${LIST}; do + echo "$0: Processing '${project}' ..." + cd "${JPROJECTS_HOME}/${project}" + + CHECK_BRANCH=`git branch --all | grep "${NEW_BRANCH}"` + echo "$0: CHECK_BRANCH='${CHECK_BRANCH}'" + + if [ -z "${CHECK_BRANCH}" ] + then + echo "$0: Creating branch '${NEW_BRANCH}' ..." + git checkout -b "${NEW_BRANCH}" + fi + + if [ -n "${COMMIT_MESSAGE}" ] + then + if [ -n "${COMMIT_ADD}" ] + then + echo "$0: Adding '${COMMIT_ADD}' ..." + git add "${COMMIT_ADD}" + fi + + echo "$0: Committing '${NEW_BRANCH}' ..." + git commit -m "${COMMIT_MESSAGE}" --signoff -S -a + fi + + if [ -n "${AFTER_COMMIT_BRANCH}" ] + then + echo "$0: Switching in '${project}' to '${AFTER_COMMIT_BRANCH}' ..." + git checkout "${AFTER_COMMIT_BRANCH}" + fi +done + +echo "$0: All done." +exit 0 diff --git a/dist.sh b/dist.sh new file mode 100755 index 0000000..246c96a --- /dev/null +++ b/dist.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Name of this project, detected by it's base path +NAME="${PWD##*/}" + +# Generated JAR file +DIST="dist/${NAME}.jar" + +# WildFly module base path +WILDFLY_MODULE_BASE_PATH="${HOME}/wildfly_domain/modules/org/mxchange" + +# And for this "module" (as WildFly calls it) +WILDFLY_MODULE_PATH="${WILDFLY_MODULE_BASE_PATH}/${NAME}/main" + +# module.xml +WILDFLY_MODULE_XML_FILE="wildfly/module.xml" + +# Glassfish base path (domain) +GLASSFISH_BASE_PATH="${HOME}/gf_domain/domain/lib" + +# Generate list +LIST=`find ../*/lib/${NAME}.jar` +LIST="${LIST} `find ../*/*-ejb/lib/${NAME}.jar`" +LIST="${LIST} ${WILDFLY_MODULE_PATH}" + +if [ -d "${GLASSFISH_BASE_PATH}" ] +then + echo "$0: Glassfish personal domain found, adding to LIST ..." + LIST="${LIST} ${GLASSFISH_BASE_PATH}" +fi + +if [ ! -f "${DIST}" ] +then + echo "$0: '${DIST}' not found." + exit 1 +elif [ ! -d "${WILDFLY_MODULE_BASE_PATH}" ] +then + echo "$0: WildFly base path '${WILDFLY_MODULE_BASE_PATH}' not created." + exit 1 +elif [ ! -d "${WILDFLY_MODULE_PATH}" ] +then + mkdir -vp "${WILDFLY_MODULE_PATH}" +fi + +for target in ${LIST}; +do + if [ -d "${target}" ] + then + cp -v "${DIST}" "${target}" + elif [ -f "${target}" ] + then + cp -v "${DIST}" "${target}" + else + echo "$0: Target '${target}' not found." + fi +done + +# Copy module.xml ... +if [ -f "${WILDFLY_MODULE_XML_FILE}" ] +then + echo "$0: Generating module.xml ..." + XML_CONTENT=`cat "${WILDFLY_MODULE_XML_FILE}"` + XML_CONTENT="${XML_CONTENT//NAME/$NAME}" + echo "${XML_CONTENT}" > "${WILDFLY_MODULE_PATH}/module.xml" +fi + +echo "$0: All done." +exit 0 diff --git a/fix-project-remotes.sh b/fix-project-remotes.sh new file mode 100755 index 0000000..6fff377 --- /dev/null +++ b/fix-project-remotes.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +UNWANTED_NAME="stick" +WANTED_NAME1="upstream" +WANTED_NAME2="daedalus" + +GIT_USER="quix0r" +GIT_SERVER="git.mxchange.org" +GIT_PATH="/var/cache/git/repos" +GIT_BRANCH="master" +GIT_ORIGIN="origin" + +MEDIA_NAME="INTENSO" +MEDIA_PATH="Java Project" +MEDIA_BASE="/media" + +for project in ${LIST}; do + GIT_URL1="${GIT_USER}@${GIT_SERVER}:${GIT_PATH}/${project}.git" + GIT_URL2="${GIT_PATH}/${project}.git" + echo "$0: GIT_URL1='${GIT_URL1}',GIT_URL2='${GIT_URL2}'" + + cd "${project}" + + if [ "$1" = "l" ] + then + echo "$0: Listing remotes for '${project}' ..." + git remote -v + cd - + continue; + fi + + REMOTES=`git remote | wc -l` + echo "$0: REMOTES='${REMOTES}'" + + if [ "${REMOTES}" = "1" ] + then + echo "$0: Only one remote found for '${project}'" + + REMOTE=`git remote` + REMOTE_PUSH=`git remote -v | grep "push"` + echo "$0: REMOTE='${REMOTE}',REMOTE_PUSH='${REMOTE_PUSH}'" + + MEDIA=`echo "${REMOTE_PUSH}" | grep "${MEDIA_BASE}/"` + echo "$0: MEDIA='${MEDIA}'" + + if [ -n "${MEDIA}" ] + then + echo "$0: Found ${MEDIA_BASE}/ remote for '${project}'." + if [ "${REMOTE}" = "${GIT_ORIGIN}" ] + then + echo "$0: Project '${project}' has already fixed '${GIT_ORIGIN}'." + else + echo "$0: Renaming '${REMOTE}' to '${GIT_ORIGIN}' ..." + git remote rename "${REMOTE}" "${GIT_ORIGIN}" || exit 255 + fi + else + echo "$0: Not a media remote." + MXCHANGE_REMOTE=`echo "${REMOTE_PUSH}" | grep "${GIT_URL1}"` + echo "$0: MXCHANGE_REMOTE='${MXCHANGE_REMOTE}'" + + if [ -n "${MXCHANGE_REMOTE}" ] + then + echo "$0: Found a '${GIT_SERVER}' remote." + + if [ "${REMOTE}" != "${WANTED_NAME1}" ] + then + echo "$0: Project '${project}' has one correct '${WANTED_NAME1}'." + else + echo "$0: Renaming '${REMOTE}' to '${WANTED_NAME1}' ..." + git remote rename "${REMOTE}" "${WANTED_NAME1}" || exit 255 + fi + + echo "$0: Adding '${GIT_ORIGIN}' to '${project}' ..." + git remote add "${GIT_ORIGIN}" "${MEDIA_BASE}/${USER}/${MEDIA_NAME}/${MEDIA_PATH}/${project}.git" --track "${GIT_BRANCH}" || exit 255 + else + echo "$0: Unknown remote '${REMOTE_PUSH}' found. Exiting ..." + exit 1 + fi + fi + fi + + UNWANTED_REMOTE=`git remote | grep "${UNWANTED_NAME}"` + echo "$0: UNWANTED_REMOTE='${UNWANTED_REMOTE}'" + + if [ -n "${UNWANTED_REMOTE}" ] + then + echo "$0: Found remote '${UNWANTED_NAME1}' in '${project}'. Renaming '${GIT_ORIGIN}'->'${WANTED_NAME1}' and '${UNWANTED_NAME1}'->'${GIT_ORIGIN}' ..." + + UPSTREAM_REMOTE=`git remote | grep "${WANTED_NAME1}"` + echo "$0: UPSTREAM_REMOTE='${UPSTREAM_REMOTE}'" + + if [ -n "${UPSTREAM_REMOTE}" ] + then + echo "$0: Remotes '${UNWANTED_NAME1}' and '${WANTED_NAME1}' exist! Removing '${WANTED_NAME1}' ..." + git remote rm "${WANTED_NAME1}" || exit 255 + fi + + git remote rename "${GIT_ORIGIN}" "${WANTED_NAME1}" || exit 255 + git remote rename "${UNWANTED_NAME1}" "${GIT_ORIGIN}" || exit 255 + else + echo "$0: No unwanted '${UNWANTED_NAME1}' remote in '${project}' ..." + UPSTREAM_REMOTE1=`git remote | grep "${WANTED_NAME1}"` + UPSTREAM_REMOTE2=`git remote | grep "${WANTED_NAME2}"` + echo "$0: UPSTREAM_REMOTE1='${UPSTREAM_REMOTE1}',UPSTREAM_REMOTE2='${UPSTREAM_REMOTE2}'" + + if [ -n "${UPSTREAM_REMOTE1}" ] + then + echo "$0: Remote '${WANTED_NAME1}' found in '${project}'." + else + echo "$0: No wanted '${WANTED_NAME1}' in '${project}'. Adding ..." + git remote add "${WANTED_NAME1}" "${GIT_URL1}" --track "${GIT_BRANCH}" || exit 255 + fi + + if [ -n "${UPSTREAM_REMOTE2}" ] + then + echo "$0: Remote '${WANTED_NAME2}' found in '${project}'." + else + echo "$0: No wanted '${WANTED_NAME2}' in '${project}'. Adding ..." + git remote add "${WANTED_NAME2}" "${GIT_URL2}" --track "${GIT_BRANCH}" || exit 255 + fi + fi + + cd - +done diff --git a/merge-jprojects.sh b/merge-jprojects.sh new file mode 100755 index 0000000..7257499 --- /dev/null +++ b/merge-jprojects.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +SOURCE_BRANCH="master" +TARGET_BRANCH="rewrites/jpa" +SWITCH_TO_SOURCE="Y" + +for project in ${LIST}; do + echo "$0: Processing '${project}' ..." + cd "${JPROJECTS_HOME}/${project}" + + # Make sure the source branch is there + git checkout "${SOURCE_BRANCH}" || exit 255 + + # ... and target branch + git checkout "${TARGET_BRANCH}" 2>&1 + STATUS="$?" + + if [ "${STATUS}" = "0" ] + then + # Then merge + echo "$0: Merging '${SOURCE_BRANCH}' in project '${project}' ..." + git merge -S "${SOURCE_BRANCH}" || exit 255 + + if [ "${SWITCH_TO_SOURCE}" = "Y" ] + then + echo "$0: Switching back to '${SOURCE_BRANCH}'" + git checkout "${SOURCE_BRANCH}" + fi + else + echo "$0: Project '${project}' has no branch '${TARGET_BRANCH}'." + fi +done + +echo "$0: All done." +exit 0 diff --git a/pull-stick.sh b/pull-stick.sh new file mode 100755 index 0000000..a187860 --- /dev/null +++ b/pull-stick.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +for ENTRY in ${LIST}; do + cd "${ENTRY}" || exit 255 + + if [ "$1" = "c" ] + then + echo "$0: Checkout '${ENTRY}' ..." + git checkout -- . + fi + + echo "$0: Pulling '${ENTRY}' ..." + git pull || exit 255 + echo "$0: Rebasing '${ENTRY}' ..." + git rebase origin/master || exit 255 + cd - +done diff --git a/push-stick.sh b/push-stick.sh new file mode 100755 index 0000000..a797e34 --- /dev/null +++ b/push-stick.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +. ./.jprojects.sh || exit 255 + +for ENTRY in ${LIST}; do + echo "$0: Pushing '${ENTRY}' ..." + cd "${ENTRY}" || exit 255 + git push --all + if [ "$1" = "u" ] + then + git push --all upstream + elif [ "$1" = "d" ] + then + git push --all daedalus + fi + cd - +done -- 2.39.2