As I stated in the Review - please revert this fix until it supports Windows or 
FLUME-1174 is closed as won't-fix.

Ral[ph

On Jun 29, 2012, at 1:10 AM, [email protected] wrote:

> Author: hshreedharan
> Date: Fri Jun 29 08:10:02 2012
> New Revision: 1355259
> 
> URL: http://svn.apache.org/viewvc?rev=1355259&view=rev
> Log:
> FLUME-1240. Add version info to Flume NG.
> 
> (Leslin (Hong Xiang Lin) via Hari Shreedharan)
> 
> 
> Added:
>    incubator/flume/trunk/flume-ng-core/scripts/
>    incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh   (with props)
>    
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
>    (with props)
>    
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
>    (with props)
>    
> incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
>    (with props)
> Modified:
>    incubator/flume/trunk/bin/flume-ng
>    incubator/flume/trunk/flume-ng-core/pom.xml
> 
> Modified: incubator/flume/trunk/bin/flume-ng
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/bin/flume-ng?rev=1355259&r1=1355258&r2=1355259&view=diff
> ==============================================================================
> --- incubator/flume/trunk/bin/flume-ng (original)
> +++ incubator/flume/trunk/bin/flume-ng Fri Jun 29 08:10:02 2012
> @@ -25,21 +25,25 @@
> 
> FLUME_AGENT_CLASS="org.apache.flume.node.Application"
> FLUME_AVRO_CLIENT_CLASS="org.apache.flume.client.avro.AvroCLIClient"
> +FLUME_VERSION_CLASS="org.apache.flume.tools.VersionInfo"
> 
> +CLEAN_FLAG=1
> ################################
> # functions
> ################################
> 
> info() {
> -  local msg=$1
> -
> -  echo "Info: $msg" >&2
> +  if [ ${CLEAN_FLAG} -ne 0 ]; then
> +    local msg=$1
> +    echo "Info: $msg" >&2
> +  fi
> }
> 
> warn() {
> -  local msg=$1
> -
> -  echo "Warning: $msg" >&2
> +  if [ ${CLEAN_FLAG} -ne 0 ]; then
> +    local msg=$1
> +    echo "Warning: $msg" >&2
> +  fi
> }
> 
> error() {
> @@ -164,6 +168,7 @@ commands:
>   help                  display this help text
>   agent                 run a Flume agent
>   avro-client           run an avro Flume client
> +  version               show Flume version info
> 
> global options:
>   --conf,-c <conf>      use configs in <conf> directory
> @@ -199,7 +204,9 @@ run_flume() {
>     error "Must specify flume application class" 1
>   fi
> 
> -  set -x
> +  if [ ${CLEAN_FLAG} -ne 0 ]; then
> +    set -x
> +  fi
>   $EXEC $JAVA_HOME/bin/java $JAVA_OPTS -cp "$FLUME_CLASSPATH" \
>       -Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" 
> $*
> }
> @@ -236,6 +243,10 @@ case "$mode" in
>   avro-client)
>     opt_avro_client=1
>     ;;
> +  version)
> +   opt_version=1
> +   CLEAN_FLAG=0
> +   ;;
>   *)
>     error "Unknown or unspecified command '$mode'"
>     echo
> @@ -348,6 +359,8 @@ if [ -n "$opt_agent" ] ; then
>   run_flume $FLUME_AGENT_CLASS $args
> elif [ -n "$opt_avro_client" ] ; then
>   run_flume $FLUME_AVRO_CLIENT_CLASS $args
> +elif [ -n "${opt_version}" ] ; then
> +  run_flume $FLUME_VERSION_CLASS $args
> else
>   error "This message should never appear" 1
> fi
> 
> Modified: incubator/flume/trunk/flume-ng-core/pom.xml
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/pom.xml?rev=1355259&r1=1355258&r2=1355259&view=diff
> ==============================================================================
> --- incubator/flume/trunk/flume-ng-core/pom.xml (original)
> +++ incubator/flume/trunk/flume-ng-core/pom.xml Fri Jun 29 08:10:02 2012
> @@ -37,6 +37,48 @@ limitations under the License.
>         <artifactId>apache-rat-plugin</artifactId>
>       </plugin>
> 
> +      <plugin>
> +        <groupId>org.codehaus.mojo</groupId>
> +        <artifactId>exec-maven-plugin</artifactId>
> +        <version>1.2.1</version>
> +        <executions>
> +          <execution>
> +            <id>generate-version</id>
> +            <phase>generate-sources</phase>
> +            <configuration>
> +              <executable>scripts/saveVersion.sh</executable>
> +              <arguments>
> +                <argument>${project.version}</argument>
> +                <argument>${project.build.directory}</argument>
> +              </arguments>
> +            </configuration>
> +            <goals>
> +              <goal>exec</goal>
> +            </goals>
> +          </execution>
> +        </executions>
> +      </plugin>
> +
> +      <plugin>
> +        <groupId>org.codehaus.mojo</groupId>
> +        <artifactId>build-helper-maven-plugin</artifactId>
> +        <version>1.7</version>
> +        <executions>
> +          <execution>
> +            <id>add-source</id>
> +            <phase>generate-sources</phase>
> +            <goals>
> +              <goal>add-source</goal>
> +            </goals>
> +            <configuration>
> +              <sources>
> +                <source>target/generated-sources/java</source>
> +              </sources>
> +            </configuration>
> +          </execution>
> +        </executions>
> +      </plugin>
> +
>     </plugins>
>   </build>
> 
> 
> Added: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh?rev=1355259&view=auto
> ==============================================================================
> --- incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh (added)
> +++ incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh Fri Jun 29 
> 08:10:02 2012
> @@ -0,0 +1,69 @@
> +#!/bin/sh
> +
> +# 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 script is used to generate the annotation of package info that
> +# records the version, revision, branch, url, user and timestamp.
> +
> +unset LANG
> +unset LC_CTYPE
> +unset LC_TIME
> +version=$1
> +buildDirectory=$2
> +user=`whoami`
> +date=`date`
> +dir=`pwd`
> +cwd=`dirname $dir`
> +if [ -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'`
> +  branch=`echo $url | sed -n -e 's,.*\(branches/.*\)$,\1,p' \
> +                             -e 's,.*\(tags/.*\)$,\1,p' \
> +                             -e 's,.*trunk$,trunk,p'`
> +elif 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}"
> +else
> +  revision="Unknown"
> +  branch="Unknown"
> +  url="file://$cwd"
> +fi
> +
> +if [ -n "$(which md5sum)" ]; then
> +  srcChecksum=`find ../ -name '*.java' | grep -v generated-sources | 
> LC_ALL=C sort | \
> +      xargs md5sum | md5sum | cut -d ' ' -f 1`
> +else
> +  srcChecksum=`find ../ -name '*.java' | grep -v generated-sources | 
> LC_ALL=C sort | \
> +      xargs md5 | md5 | cut -d ' ' -f 1`
> +fi
> +
> +mkdir -p $buildDirectory/generated-sources/java/org/apache/flume/
> +cat << EOF | \
> +  sed -e "s/VERSION/$version/" -e "s/USER/$user/" -e "s/DATE/$date/" \
> +      -e "s|URL|$url|" -e "s/REV/$revision/" \
> +      -e "s|BRANCH|$branch|" -e "s/SRCCHECKSUM/$srcChecksum/" \
> +      > 
> $buildDirectory/generated-sources/java/org/apache/flume/package-info.java
> +/*
> + * Generated by scripts/saveVersion.sh
> + */
> +@VersionAnnotation(version="VERSION", revision="REV", branch="BRANCH",
> +                         user="USER", date="DATE", url="URL",
> +                         srcChecksum="SRCCHECKSUM")
> +package org.apache.flume;
> +EOF
> \ No newline at end of file
> 
> Propchange: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> Propchange: incubator/flume/trunk/flume-ng-core/scripts/saveVersion.sh
> ------------------------------------------------------------------------------
>    svn:executable = *
> 
> Added: 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java?rev=1355259&view=auto
> ==============================================================================
> --- 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
>  (added)
> +++ 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
>  Fri Jun 29 08:10:02 2012
> @@ -0,0 +1,76 @@
> +/**
> + * 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.flume;
> +
> +import java.lang.annotation.ElementType;
> +import java.lang.annotation.Retention;
> +import java.lang.annotation.RetentionPolicy;
> +import java.lang.annotation.Target;
> +
> +
> +/**
> + * This class is about package attribute that captures
> + * version info of Flume that was compiled.
> + */
> +
> +@Retention(RetentionPolicy.RUNTIME)
> +@Target(ElementType.PACKAGE)
> +public @interface VersionAnnotation {
> +
> +  /**
> +   * Get the Flume version
> +   * @return the version string "1.1"
> +   */
> +  String version();
> +
> +  /**
> +   * Get the subversion revision.
> +   * @return the revision number as a string (eg. "100755")
> +   */
> +  String revision();
> +
> +  /**
> +   * Get the branch from which this was compiled.
> +   * @return The branch name, e.g. "trunk"
> +   */
> +  String branch();
> +
> +  /**
> +   * Get the username that compiled Flume.
> +   */
> +  String user();
> +
> +  /**
> +   * Get the date when Flume was compiled.
> +   * @return the date in unix 'date' format
> +   */
> +  String date();
> +
> +  /**
> +   * Get the url for the subversion repository.
> +   */
> +  String url();
> +
> +  /**
> +   * Get a checksum of the source files from which
> +   * Flume was compiled.
> +   * @return a string that uniquely identifies the source
> +   **/
> +  String srcChecksum();
> +
> +}
> 
> Propchange: 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/VersionAnnotation.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> Added: 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java?rev=1355259&view=auto
> ==============================================================================
> --- 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
>  (added)
> +++ 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
>  Fri Jun 29 08:10:02 2012
> @@ -0,0 +1,122 @@
> +/**
> + * 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.flume.tools;
> +
> +import org.apache.flume.VersionAnnotation;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +/*
> + * This class provides version info of Flume NG
> + */
> +
> +public class VersionInfo {
> +  private static final Logger LOG = 
> LoggerFactory.getLogger(VersionInfo.class);
> +
> +  private static Package myPackage;
> +  private static VersionAnnotation version;
> +
> +  static {
> +    myPackage = VersionAnnotation.class.getPackage();
> +    version = myPackage.getAnnotation(VersionAnnotation.class);
> +  }
> +
> +  /**
> +   * Get the meta-data for the Flume package.
> +   * @return
> +   */
> +  static Package getPackage() {
> +    return myPackage;
> +  }
> +
> +  /**
> +   * Get the Flume version.
> +   * @return the Flume version string, eg. "1.1"
> +   */
> +  public static String getVersion() {
> +    return version != null ? version.version() : "Unknown";
> +  }
> +
> +  /**
> +   * Get the subversion revision number for the root directory
> +   * @return the revision number, eg. "100755"
> +   */
> +  public static String getRevision() {
> +    return version != null ? version.revision() : "Unknown";
> +  }
> +
> +  /**
> +   * Get the branch on which this originated.
> +   * @return The branch name, e.g. "trunk" or "branches/branch-1.1"
> +   */
> +  public static String getBranch() {
> +    return version != null ? version.branch() : "Unknown";
> +  }
> +
> +  /**
> +   * The date that Flume was compiled.
> +   * @return the compilation date in unix date format
> +   */
> +  public static String getDate() {
> +    return version != null ? version.date() : "Unknown";
> +  }
> +
> +  /**
> +   * The user that compiled Flume.
> +   * @return the username of the user
> +   */
> +  public static String getUser() {
> +    return version != null ? version.user() : "Unknown";
> +  }
> +
> +  /**
> +   * Get the subversion URL for the root Flume directory.
> +   */
> +  public static String getUrl() {
> +    return version != null ? version.url() : "Unknown";
> +  }
> +
> +  /**
> +   * Get the checksum of the source files from which Flume was
> +   * built.
> +   **/
> +  public static String getSrcChecksum() {
> +    return version != null ? version.srcChecksum() : "Unknown";
> +  }
> +
> +  /**
> +   * Returns the build version info which includes version,
> +   * revision, user, date and source checksum
> +   */
> +  public static String getBuildVersion(){
> +    return VersionInfo.getVersion() +
> +    " from " + VersionInfo.getRevision() +
> +    " by " + VersionInfo.getUser() +
> +    " on " + VersionInfo.getDate() +
> +    " source checksum " + VersionInfo.getSrcChecksum();
> +  }
> +
> +  public static void main(String[] args) {
> +    LOG.debug("version: "+ version);
> +    System.out.println("Flume " + getVersion());
> +    System.out.println("Subversion " + getUrl() + " -r " + getRevision());
> +    System.out.println("Compiled by " + getUser() + " on " + getDate());
> +    System.out.println("From source with checksum " + getSrcChecksum());
> +  }
> +
> +}
> 
> Propchange: 
> incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/tools/VersionInfo.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> Added: 
> incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
> URL: 
> http://svn.apache.org/viewvc/incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java?rev=1355259&view=auto
> ==============================================================================
> --- 
> incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
>  (added)
> +++ 
> incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
>  Fri Jun 29 08:10:02 2012
> @@ -0,0 +1,63 @@
> +/**
> + * 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.flume.tools;
> +
> +import static org.junit.Assert.*;
> +
> +import org.junit.Test;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +public class TestVersionInfo {
> +
> +  private static final Logger logger = LoggerFactory
> +      .getLogger(TestVersionInfo.class);
> +
> +  /**
> +   *  Make sure that Unknown is expected when no version info
> +   */
> +  @Test
> +  public void testVersionInfoUnknown() {
> +
> +    logger.debug("Flume " + VersionInfo.getVersion());
> +    logger.debug("Subversion " + VersionInfo.getUrl() + " -r " + 
> VersionInfo.getRevision());
> +    logger.debug("Compiled by " + VersionInfo.getUser() + " on " + 
> VersionInfo.getDate());
> +    logger.debug("From source with checksum " + 
> VersionInfo.getSrcChecksum());
> +    logger.debug("Flume " + VersionInfo.getBuildVersion());
> +
> +    assertTrue("getVersion returned Unknown",
> +        !VersionInfo.getVersion().equals("Unknown"));
> +    assertTrue("getUser returned Unknown",
> +        !VersionInfo.getUser().equals("Unknown"));
> +    assertTrue("getUrl returned Unknown",
> +        !VersionInfo.getUrl().equals("Unknown"));
> +    assertTrue("getSrcChecksum returned Unknown",
> +        !VersionInfo.getSrcChecksum().equals("Unknown"));
> +
> +    // check getBuildVersion() return format
> +    assertTrue("getBuildVersion returned unexpected format",VersionInfo.
> +        getBuildVersion().matches(".+from.+by.+on.+source checksum.+"));
> +
> +    //"Unknown" when build without svn or git
> +    assertNotNull("getRevision returned null", VersionInfo.getRevision());
> +    assertNotNull("getBranch returned null", VersionInfo.getBranch());
> +
> +  }
> +
> +}
> 
> Propchange: 
> incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/tools/TestVersionInfo.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
> 
> 

Reply via email to