Repository: incubator-sentry Updated Branches: refs/heads/master 67f84187c -> 14a86ba9b
SENTRY-412: Sentry script should support an option to print product version (Prasad Mujumdar reviewed by Sravya Tirukkovalur and Arun Suresh) Project: http://git-wip-us.apache.org/repos/asf/incubator-sentry/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-sentry/commit/14a86ba9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-sentry/tree/14a86ba9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-sentry/diff/14a86ba9 Branch: refs/heads/master Commit: 14a86ba9b623ebe4b6c2428c03e033f5ec6eddac Parents: 67f8418 Author: Prasad Mujumdar <[email protected]> Authored: Thu Sep 11 22:38:50 2014 -0700 Committer: Prasad Mujumdar <[email protected]> Committed: Thu Sep 11 22:38:50 2014 -0700 ---------------------------------------------------------------------- .gitignore | 1 + sentry-core/sentry-core-common/pom.xml | 44 ++++++++ .../main/java/org/apache/sentry/SentryMain.java | 13 +++ .../apache/sentry/SentryVersionAnnotation.java | 75 +++++++++++++ .../org/apache/sentry/SentryVersionInfo.java | 109 +++++++++++++++++++ .../src/scripts/saveVersion.sh | 89 +++++++++++++++ 6 files changed, 331 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 6a39d39..91ad75b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ target/ *.iml derby.log datanucleus.log +sentry-core/sentry-core-common/src/gen **/TempStatsStore/ # Package Files # *.jar http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/sentry-core/sentry-core-common/pom.xml ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/pom.xml b/sentry-core/sentry-core-common/pom.xml index e12469a..5c0fe43 100644 --- a/sentry-core/sentry-core-common/pom.xml +++ b/sentry-core/sentry-core-common/pom.xml @@ -59,4 +59,48 @@ limitations under the License. </dependency> </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>generate-version-annotation</id> + <phase>generate-sources</phase> + <configuration> + <target> + <exec executable="bash" failonerror="true"> + <arg value="${basedir}/src/scripts/saveVersion.sh"/> + <arg value="${project.version}"/> + <arg value="${basedir}/src"/> + </exec> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>add-source</id> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + </goals> + <configuration> + <sources> + <source>src/gen</source> + </sources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> </project> http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryMain.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryMain.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryMain.java index 497c8a4..7b1b6ac 100644 --- a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryMain.java +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryMain.java @@ -31,6 +31,8 @@ import com.google.common.collect.ImmutableMap; public class SentryMain { private static final String HELP_SHORT = "h"; private static final String HELP_LONG = "help"; + private static final String VERSION_SHORT = "v"; + private static final String VERSION_LONG = "version"; private static final String COMMAND = "command"; private static final String HIVE_CONF = "hiveconf"; private static final String LOG4J_CONF = "log4jConf"; @@ -46,6 +48,8 @@ public class SentryMain { CommandLineParser parser = new GnuParser(); Options options = new Options(); options.addOption(HELP_SHORT, HELP_LONG, false, "Print this help text"); + options.addOption(VERSION_SHORT, VERSION_LONG, false, + "Print Sentry version"); options.addOption(HIVE_CONF, true, "Set hive configuration variables"); options.addOption(null, COMMAND, true, "Command to run. Options: " + COMMANDS.keySet()); options.addOption(null, LOG4J_CONF, true, "Location of log4j properties file"); @@ -66,6 +70,9 @@ public class SentryMain { if (commandName == null && (commandLine.hasOption(HELP_SHORT) || commandLine.hasOption(HELP_LONG))) { printHelp(options, null); + } else if (commandLine.hasOption(VERSION_SHORT) || + commandLine.hasOption(VERSION_LONG)) { + printVersion(); } String commandClazz = COMMANDS.get(commandName); @@ -86,6 +93,12 @@ public class SentryMain { } ((Command)command).run(commandLine.getArgs()); } + + private static void printVersion() { + System.out.println(SentryVersionInfo.getBuildVersion()); + System.exit(0); + } + private static void printHelp(Options options, String msg) { String sentry = "sentry"; if(msg != null) http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionAnnotation.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionAnnotation.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionAnnotation.java new file mode 100644 index 0000000..e64693a --- /dev/null +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionAnnotation.java @@ -0,0 +1,75 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +package org.apache.sentry; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * SentryVersionAnnotation. + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PACKAGE) +public @interface SentryVersionAnnotation { + + /** + * Get the Sentry version + * @return the version string "0.6.3-dev" + */ + String version(); + + /** + * Get the username that compiled Sentry. + */ + String user(); + + /** + * Get the date when Sentry was compiled. + * @return the date in unix 'date' format + */ + String date(); + + /** + * Get the url for the source repository. + */ + String url(); + + /** + * Get the commit hash. + * @return the revision number as a string (eg. "451451") + */ + String commitHash(); + + /** + * Get the branch from which this was compiled. + * @return The branch name, e.g. "trunk" or "branches/branch-0.20" + */ + String branch(); + + /** + * Get a checksum of the source files from which + * Sentry was compiled. + * @return a string that uniquely identifies the source + **/ + String srcChecksum(); + +} http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionInfo.java ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionInfo.java b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionInfo.java new file mode 100644 index 0000000..53fe3af --- /dev/null +++ b/sentry-core/sentry-core-common/src/main/java/org/apache/sentry/SentryVersionInfo.java @@ -0,0 +1,109 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.sentry; + +public class SentryVersionInfo { + private static Package myPackage; + private static SentryVersionAnnotation version; + + static { + myPackage = SentryVersionAnnotation.class.getPackage(); + version = myPackage.getAnnotation(SentryVersionAnnotation.class); + } + + /** + * Get the meta-data for the Sentry package. + * @return + */ + static Package getPackage() { + return myPackage; + } + + /** + * Get the Sentry version. + * @return the Sentry version string, eg. "1.4.0-SNAPSHOT" + */ + public static String getVersion() { + return version != null ? version.version() : "Unknown"; + } + + /** + * Get the subversion revision number for the root directory + * @return the revision number, eg. "451451" + */ + public static String getCommitHash() { + return version != null ? version.commitHash() : "Unknown"; + } + + /** + * Get the branch on which this originated. + * @return The branch name, e.g. "master" or "branches/branch-1.4.0" + */ + public static String getBranch() { + return version != null ? version.branch() : "Unknown"; + } + + /** + * The date that Sentry was compiled. + * @return the compilation date in unix date format + */ + public static String getDate() { + return version != null ? version.date() : "Unknown"; + } + + /** + * The user that compiled Sentry. + * @return the username of the user + */ + public static String getUser() { + return version != null ? version.user() : "Unknown"; + } + + /** + * Get the subversion URL for the root Sentry directory. + */ + public static String getUrl() { + return version != null ? version.url() : "Unknown"; + } + + /** + * Get the checksum of the source files from which Sentry was built. + **/ + public static String getSrcChecksum() { + return version != null ? version.srcChecksum() : "Unknown"; + } + + /** + * Returns the buildVersion which includes version, revision, user and date. + */ + public static String getBuildVersion() { + return "Apache Sentry " + SentryVersionInfo.getVersion() + + " ,built from commit#" + SentryVersionInfo.getCommitHash() + + " ,compiled by " + SentryVersionInfo.getUser() + + " with source checksum " + + SentryVersionInfo.getSrcChecksum(); + } + + public static void main(String[] args) { + System.out.println("Sentry " + getVersion()); + System.out.println("Git " + getUrl()); + System.out.println("Commit# " + getCommitHash()); + System.out.println("Compiled by " + getUser() + " on " + getDate()); + System.out.println("From source with checksum " + getSrcChecksum()); + } +} http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/14a86ba9/sentry-core/sentry-core-common/src/scripts/saveVersion.sh ---------------------------------------------------------------------- diff --git a/sentry-core/sentry-core-common/src/scripts/saveVersion.sh b/sentry-core/sentry-core-common/src/scripts/saveVersion.sh new file mode 100755 index 0000000..235443c --- /dev/null +++ b/sentry-core/sentry-core-common/src/scripts/saveVersion.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + + +# This file is used to generate the package-info.java class that +# records the version, revision, branch, user, timestamp, and url +unset LANG +unset LC_CTYPE +unset LC_TIME +version=$1 +src_dir=$2 +revision=$3 +branch=$4 +url=$5 +user=`whoami` +date=`date` +dir=`pwd` +cwd=`dirname $dir` +if [ "$revision" = "" ]; then + if git rev-parse HEAD 2>/dev/null > /dev/null ; then + revision=`git log -1 --pretty=format:"%H"` + hostname=`hostname` + branch=`git branch | sed -n -e 's/^* //p'` + url="git://${hostname}${cwd}" + elif [ -d .svn ]; then + revision=`svn info ../ | sed -n -e 's/Last Changed Rev: \(.*\)/\1/p'` + url=`svn info ../ | sed -n -e 's/^URL: \(.*\)/\1/p'` + # Get canonical branch (branches/X, tags/X, or trunk) + branch=`echo $url | sed -n -e 's,.*\(branches/.*\)$,\1,p' \ + -e 's,.*\(tags/.*\)$,\1,p' \ + -e 's,.*trunk$,trunk,p'` + else + revision="Unknown" + branch="Unknown" + url="file://$cwd" + fi +fi +if [ "$branch" = "" ]; then + branch="Unknown" +fi +if [ "$url" = "" ]; then + url="file://$cwd" +fi + +if [ -x /sbin/md5 ]; then + md5="/sbin/md5" +else + md5="md5sum" +fi + +srcChecksum=`find ../ -name '*.java' | grep -v generated-sources | LC_ALL=C sort | xargs $md5 | $md5 | cut -d ' ' -f 1` + +mkdir -p $src_dir/gen/org/apache/sentry + +# In Windows, all the following string ends with \r, need to get rid of them +branch=`echo $branch | tr -d '\r'` +user=`echo $user | tr -d '\r'` +date=`echo $date | tr -d '\r'` +url=`echo $url | tr -d '\r'` +srcChecksum=`echo $srcChecksum | tr -d '\r'` + +cat << EOF | \ + sed -e "s/VERSION/$version/" \ + -e "s/USER/$user/" -e "s/DATE/$date/" \ + -e "s|URL|$url|" -e "s/COMMIT/$revision/" \ + -e "s|BRANCH|$branch|" -e "s/SRCCHECKSUM/$srcChecksum/" \ + > $src_dir/gen/org/apache/sentry/package-info.java +/* + * Generated by saveVersion.sh + */ +@SentryVersionAnnotation(version="VERSION", commitHash="COMMIT", branch="BRANCH", + user="USER", date="DATE", url="URL", + srcChecksum="SRCCHECKSUM") +package org.apache.sentry; +EOF
