/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.util;
import org.tmatesoft.svn.core.internal.wc.SVNFileUtil;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class Version {
private static String PROPERTIES_PATH = "/svnkit.build.properties";
private static final String SHORT_VERSION_STRING_PROPERTY = "svnkit.version";
private static final String VERSION_STRING_PROPERTY = "svnkit.version.string";
private static final String VERSION_MAJOR_PROPERTY = "svnkit.version.major";
private static final String VERSION_MINOR_PROPERTY = "svnkit.version.minor";
private static final String VERSION_MICRO_PROPERTY = "svnkit.version.micro";
private static final String VERSION_REVISION_PROPERTY = "svnkit.version.revision";
private static final String SVN_VERSION_PROPERTY = "svnkit.svn.version";
private static final String VERSION_STRING_DEFAULT = "SVN/1.8.1 SVNKit/1.8.11 (http://svnkit.com/) rSNAPSHOT";
private static final String VERSION_MAJOR_DEFAULT = "1";
private static final String VERSION_MINOR_DEFAULT = "8";
private static final String VERSION_MICRO_DEFAULT = "11";
private static final String VERSION_REVISION_DEFAULT = "SNAPSHOT";
private static final String SVN_VERSION_DEFAULT = "1.8.11";
private static String ourUserAgent;
private static Properties ourProperties;
static {
ourUserAgent = System.getProperty("svnkit.http.userAgent");
}
public static String getVersionString() {
loadProperties();
return ourProperties.getProperty(VERSION_STRING_PROPERTY, VERSION_STRING_DEFAULT);
}
public static String getShortVersionString() {
loadProperties();
return ourProperties.getProperty(SHORT_VERSION_STRING_PROPERTY, VERSION_STRING_DEFAULT);
}
public static String getSVNVersion() {
loadProperties();
return ourProperties.getProperty(SVN_VERSION_PROPERTY, SVN_VERSION_DEFAULT);
}
public static void setUserAgent(String userAgent) {
synchronized (Version.class) {
ourUserAgent = userAgent;
}
}
public static String getUserAgent() {
if (ourUserAgent != null) {
return ourUserAgent;
}
return getVersionString();
}
public static int getMajorVersion() {
loadProperties();
try {
return Integer.parseInt(ourProperties.getProperty(
VERSION_MAJOR_PROPERTY, VERSION_MAJOR_DEFAULT));
} catch (NumberFormatException nfe) {
//
}
return Integer.parseInt(VERSION_MAJOR_DEFAULT);
}
public static int getMinorVersion() {
loadProperties();
try {
return Integer.parseInt(ourProperties.getProperty(
VERSION_MINOR_PROPERTY, VERSION_MINOR_DEFAULT));
} catch (NumberFormatException nfe) {
//
}
return Integer.parseInt(VERSION_MINOR_DEFAULT);
}
public static int getMicroVersion() {
loadProperties();
try {
return Integer.parseInt(ourProperties.getProperty(
VERSION_MICRO_PROPERTY, VERSION_MICRO_DEFAULT));
} catch (NumberFormatException nfe) {
//
}
return Integer.parseInt(VERSION_MICRO_DEFAULT);
}
/**
* @deprecated use getRevisionString instead
*/
@Deprecated
public static long getRevisionNumber() {
loadProperties();
String revisionProperty = ourProperties.getProperty(VERSION_REVISION_PROPERTY, VERSION_REVISION_DEFAULT);
try {
return Long.parseLong(revisionProperty);
} catch (NumberFormatException nfe) {
// try to fetch revision in other way.
if (revisionProperty.lastIndexOf('.') > 0) {
revisionProperty = revisionProperty.substring(revisionProperty.lastIndexOf('.') + 1);
}
if (revisionProperty.indexOf('r') >= 0) {
int start = revisionProperty.indexOf('r') + 1;
final StringBuffer revValue = new StringBuffer();
while(start < revisionProperty.length()) {
char ch = revisionProperty.charAt(start);
start++;
if (!Character.isDigit(ch)) {
break;
}
revValue.append(ch);
}
if (revValue.length() > 0) {
return Long.parseLong(revValue.toString());
}
}
}
try {
return Long.parseLong(VERSION_REVISION_DEFAULT);
} catch (NumberFormatException nfe) {
//
}
return -1;
}
public static String getRevisionString() {
loadProperties();
return ourProperties.getProperty(VERSION_REVISION_PROPERTY, VERSION_REVISION_DEFAULT);
}
private static void loadProperties() {
synchronized (Version.class) {
if (ourProperties != null) {
return;
}
ourProperties = new Properties();
InputStream is = Version.class.getResourceAsStream(PROPERTIES_PATH);
if (is == null) {
return;
}
try {
ourProperties.load(is);
} catch (IOException e) {
//
} finally {
SVNFileUtil.closeFile(is);
}
}
}
}