/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2009 Sun Microsystems, Inc.
*/
package org.opends.build.tools;
import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNInfo;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.SVNURL;
/**
* This class provides an implementation of an Ant task that may be used to
* determine the current Subversion revision number of the current working
* copy. The value of the revision number will be stored in an Ant property.
*/
public class GetSubversionUrlRepo
extends Task
{
// The name of the property in which the revision number should be set.
private String propertyName = null;
// The path to the root of the Subversion workspace for which to retrieve the
// revision number.
private String workspace = null;
// The svn client manager. Required by svnkit 1.2.x
private static SVNClientManager ourClientManager =
SVNClientManager.newInstance();
/**
* Specifies the name of the Ant property into which the Subversion revision
* number will be stored.
*
* @param propertyName The name of the Ant property into which the
* Subversion revision number will be stored.
*/
public void setProperty(String propertyName)
{
this.propertyName = propertyName;
}
/**
* Specifies the path to the root of the Subversion workspace for which to
* retrieve the revision number.
*
* @param workspace The path to the root of the Subversion workspace for
* which to retrieve the revision number.
*/
public void setWorkspace(String workspace)
{
this.workspace = workspace;
}
/**
* Performs the appropriate processing needed for this task. In this case,
* it uses SVNKit to identify the current revision number for the local
* workspace and store it in a specified property.
*/
@Override()
public void execute()
{
if ((propertyName == null) || (propertyName.length() == 0))
{
throw new BuildException("ERROR: No property was specified for " +
"storing the revision number value.");
}
File workspacePath;
if ((workspace == null) || (workspace.length() == 0))
{
workspacePath = getProject().getBaseDir();
}
else
{
workspacePath = new File(workspace);
}
try
{
SVNInfo svnInfo = ourClientManager.getWCClient().doInfo(workspacePath, SVNRevision.WORKING);
SVNURL url_repo = svnInfo.getURL();
if (url_repo == null)
{
System.err.println("WARNING: Could not determine Subversion URL Repository " +
"for current workspace.");
getProject().setNewProperty(propertyName, "-1");
}
else
{
getProject().setNewProperty(propertyName,
String.valueOf(url_repo));
}
}
catch (SVNException svnException)
{
System.err.println("WARNING: Could not determine Subversion " +
"URL repository for current workspace: " +
svnException);
getProject().setNewProperty(propertyName, "-1");
}
}
}