Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xreleng/org.eclipse.epp.config/tools/makeVisible.sh193
1 files changed, 193 insertions, 0 deletions
diff --git a/releng/org.eclipse.epp.config/tools/makeVisible.sh b/releng/org.eclipse.epp.config/tools/makeVisible.sh
new file mode 100755
index 00000000..9c599548
--- /dev/null
+++ b/releng/org.eclipse.epp.config/tools/makeVisible.sh
@@ -0,0 +1,193 @@
+#!/usr/bin/env bash
+#*******************************************************************************
+# Copyright (c) 2016 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# David Williams - initial API and implementation
+# Initial version based on similar file in Sim Release repository
+#*******************************************************************************
+
+
+# Small utility to more automatically do the renames the morning of "making visible",
+# after artifacts have mirrored. In theory, could be done by a cron or at job.
+#
+# Note, copy is used, instead of move, so that the parent directory's "modified time" does not change.
+# That way the mirroring script won't falsely report "no mirrors" (for a while).
+#
+# Plus, we "copy over" any existing files, under the assumption that previous labeled files are left in place,
+# for a while, so they'd serve as backup. If that ever changes, should make a --backup of
+# the original files ... just in case ... but then modified time of parent directory would be
+# changed.
+#
+# And notice we do "artifacts" first, so by the time "content" can be retrieved, by p2, thre will be
+# valid artifacts "pointed to". If anyone has already fetched 'content' and in the middle of getting
+# artifacts, their downloads should nearly always continue to work (except we do keep only 3 milestones
+# in composite, so in theory, they might have stale 'content' data that pointed to an old artifact that
+# was no longer in (the newly copied) 'artifacts' file.
+
+function usage ()
+{
+ printf "\n\t%s" "This utility, ${0##*/}, is to copy the two metadataXX.jars to their final name of metadata.jar." >&2
+ printf "\n\t\t%s\n" "Example: ${0##*/} 'trainName' 'checkpoint'" >&2
+ printf "\n\t%s" "Both arguments are required." >&2
+ printf "\n\t%s" "'trainName' is the final directory segment of where the composite files reside," >&2
+ printf "\n\t\t%s\n" "such as neon, oxygen, etc." >&2
+ printf "\n\t%s" "'checkpoint' is the pre-visibility label given to the metadata files," >&2
+ printf "\n\t\t%s\n" "such as M4, RC1, etc. or simply R for final release, 1 for Update 1, etc.." >&2
+ printf "\n\t\t%s\n" "For example, for Neon.1 the file content1.jar is copied to content.jar " >&2
+ printf "\n\t\t\t%s\n" "and content1.xml.xz, if it exists, is copied to content.xml.xz" >&2
+ printf "\n\t\t%s\n" "If the contentN.jar or artifactsN.jar do not exist, it is treated as an error." >&2
+ printf "\n\t\t%s\n" "But if the corresponding "xz" versions do not exist, it is treated as a warning." >&2
+}
+
+function changeNamesByCopy ()
+{
+
+ REPO_ROOT=$1
+
+ # be paranoid with sanity checks
+ if [[ -z "${REPO_ROOT}" ]]
+ then
+ printf "\n\t[ERROR] REPO_ROOT must be passed in to this function ${0##*/}\n"
+ exit 1
+ elif [[ ! -e "${REPO_ROOT}" ]]
+ then
+ printf "\n\t[ERROR] REPO_ROOT did not exist!\n\tREPO_ROOT: ${REPO_ROOT}\n"
+ exit 1
+ elif [[ ! -w "${REPO_ROOT}" ]]
+ then
+ printf "\n\t\[ERROR] We do not appear to have write access to REPO_ROOT\n"
+ else
+ printf "\n\t[INFO] REPO_ROOT existed as expected:\n\tREPO_ROOT: ${REPO_ROOT}\n\n"
+ fi
+
+ artifactsFileName="artifacts"
+ contentFileName="content"
+ oldArtifactsJarName="${artifactsFileName}${CHECKPOINT}.jar"
+ oldContentJarName="${contentFileName}${CHECKPOINT}.jar"
+ newArtifactsJarName="${artifactsFileName}.jar"
+ newContentJarName="${contentFileName}.jar"
+ oldArtifactsXZName="${artifactsFileName}${CHECKPOINT}.xml.xz"
+ oldContentXZName="${contentFileName}${CHECKPOINT}.xml.xz"
+ newArtifactsXZName="${artifactsFileName}.xml.xz"
+ newContentXZName="${contentFileName}.xml.xz"
+
+ # Note: we check for all error conditions first, so if there is any one error, we make no changes.
+ if [[ ! -e "${REPO_ROOT}/${oldArtifactsJarName}" ]]
+ then
+ printf "\n\t[ERROR] ${oldArtifactsJarName} did not exist in REPO_ROOT!\n"
+ exit 1
+ fi
+ if [[ ! -e "${REPO_ROOT}/${oldContentJarName}" ]]
+ then
+ printf "\n\t[ERROR] ${oldContentJarName} did not exist in REPO_ROOT!\n"
+ exit 1
+ fi
+
+ # TODO: should these be errors?
+ if [[ ! -e "${REPO_ROOT}/${oldArtifactsXZName}" ]]
+ then
+ printf "\n\t[WARNING] ${oldArtifactsXZName} did not exist in REPO_ROOT!\n"
+ fi
+ if [[ ! -e "${REPO_ROOT}/${oldContentXZName}" ]]
+ then
+ printf "\n\t[WARNING] ${oldContentXZName} did not exist in REPO_ROOT!\n"
+ fi
+
+ # The copy work begins here, still checking for errors on each
+ # verbose doesn't help too much if out-format given
+ verboseOutput=
+ #verboseOutput="--verbose"
+ # out-format gives us the names of files copied
+ #outputFormat=
+ # using %i gives details of "what" changed about existing item.
+ # In our case it typically says something like: '>f..T......artifacts1.jar'
+ # Which means "transferred" "file" and its "Time" changed.
+ # (Does say say new name of file, though ... ll -tr will give "most recent"
+ # files at end of listing).
+ outputFormat="--out-format='%i%n%L'"
+ rsync ${outputFormat} --group ${verboseOutput} ${REPO_ROOT}/${oldArtifactsJarName} ${REPO_ROOT}/${newArtifactsJarName}
+ RC=$?
+ if [[ $RC != 0 ]]
+ then
+ printf "\n\t[ERROR] copy returned a non zero return code for ${oldArtifactsJarName}. RC: $RC\n"
+ exit $RC
+ fi
+ rsync ${outputFormat} --group ${verboseOutput} ${REPO_ROOT}/${oldContentJarName} ${REPO_ROOT}/${newContentJarName}
+ RC=$?
+ if [[ $RC != 0 ]]
+ then
+ printf "\n\t[ERROR] copy returned a non zero return code for ${oldContentJarName}. RC: $RC\n"
+ exit $RC
+ fi
+
+ if [[ -e ${REPO_ROOT}/${oldArtifactsXZName} ]]
+ then
+ rsync ${outputFormat} --group ${verboseOutput} ${REPO_ROOT}/${oldArtifactsXZName} ${REPO_ROOT}/${newArtifactsXZName}
+ RC=$?
+ if [[ $RC != 0 ]]
+ then
+ printf "\n\t[ERROR] copy returned a non zero return code for ${oldArtifactsXZName}. RC: $RC\n"
+ exit $RC
+ fi
+ fi
+ if [[ -e ${REPO_ROOT}/${oldContentXZName} ]]
+ then
+ rsync ${outputFormat} --group ${verboseOutput} ${REPO_ROOT}/${oldContentXZName} ${REPO_ROOT}/${newContentXZName}
+ RC=$?
+ if [[ $RC != 0 ]]
+ then
+ printf "\n\t[ERROR] copy returned a non zero return code for ${oldContentXZName}. RC: $RC\n"
+ exit $RC
+ fi
+fi
+
+}
+
+# This is entry point to "main" function
+# We require both arguments, since to provide a default could lead to
+# very bad errors if wrong value of "trainName" was used.
+
+if [[ ! $# = 2 ]]
+then
+ printf "\n\t[ERROR] Wrong number of arguments to ${0##*/}\n"
+ usage
+ exit 1
+fi
+
+
+TRAIN_NAME=$1
+CHECKPOINT=$2
+
+printf "\n\tArguments to utility were:"
+printf "\n\t\tTRAIN_NAME: ${TRAIN_NAME}"
+printf "\n\t\tCHECKPOINT: ${CHECKPOINT}\n"
+
+if [[ -z "${CHECKPOINT}" || -z "${TRAIN_NAME}" ]]
+then
+ # This would be rare. Equates to something like ./makevisible.sh "" M2
+ # But, just in case. Note that something like ./makevisible " " M2
+ # is still not handled well.
+ printf "\n\t%s\n" "[ERROR]: one or both required arguments were empty?!\n" >&2
+ usage
+ exit 1
+fi
+
+# Note: we do "Sim Rel repo" first, to avoid a small window of users getting
+# EPP metadata for update, but the Sim Rel repo not being ready.
+# Note: we allow "override" of the repo roots by env. variable to make testing easier.
+
+EPP_REPO_ROOT=${EPP_REPO_ROOT:-/home/data/httpd/download.eclipse.org/technology/epp/packages/${TRAIN_NAME}}
+changeNamesByCopy "${EPP_REPO_ROOT}"
+RC=$?
+if [[ $RC != 0 ]]
+then
+ printf "\n\t[ERROR] changeNamesByCopy returned non-zero return code. RC: $RC\n"
+ exit $RC
+fi
+exit 0
+

Back to the top