- /*
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed 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.tools.ant.taskdefs.cvslib;
-
- import org.apache.tools.ant.taskdefs.AbstractCvsTask;
-
- import java.io.ByteArrayOutputStream;
- import java.util.StringTokenizer;
-
- /**
- * this task allows to find out the client and the server version of a
- * CVS installation
- *
- * example usage :
- * <cvsversion
- * cvsRoot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"
- * passfile="c:/programme/cygwin/home/antoine/.cvspass"
- * clientversionproperty="apacheclient"
- * serverversionproperty="apacheserver" />
- *
- * the task can be used also in the API by calling its execute method,
- * then calling getServerVersion and/or getClientVersion
- *
- * @ant.task category="scm"
- * @since ant 1.6.1
- */
- public class CvsVersion extends AbstractCvsTask {
- static final long VERSION_1_11_2 = 11102;
- static final long MULTIPLY = 100;
- private String clientVersion;
- private String serverVersion;
- private String clientVersionProperty;
- private String serverVersionProperty;
- /**
- * get the CVS client version
- * @return CVS client version
- */
- public String getClientVersion() {
- return clientVersion;
- }
- /**
- * get the CVS server version
- * @return CVS server version
- */
- public String getServerVersion() {
- return serverVersion;
- }
- /**
- * set a property where to store the CVS client version
- * @param clientVersionProperty property for CVS client version
- */
- public void setClientVersionProperty(String clientVersionProperty) {
- this.clientVersionProperty = clientVersionProperty;
- }
-
- /**
- * set a property where to store the CVS server version
- * @param serverVersionProperty property for CVS server version
- */
- public void setServerVersionProperty(String serverVersionProperty) {
- this.serverVersionProperty = serverVersionProperty;
- }
- /**
- * find out if the server version supports log with S option
- * @return boolean indicating if the server version supports log with S option
- */
- public boolean supportsCvsLogWithSOption() {
- if (serverVersion == null) {
- return false;
- }
- StringTokenizer mySt = new StringTokenizer(serverVersion, ".");
- long versionNumber;
- long counter = MULTIPLY * MULTIPLY;
- long version = 0;
- while (mySt.hasMoreTokens()) {
- String s = mySt.nextToken();
- int i = 0;
- for (i = 0; i < s.length(); i++) {
- if (!Character.isDigit(s.charAt(i))) {
- break;
- }
- }
- String s2 = s.substring(0, i);
- version = version + counter * Long.parseLong(s2);
- if (counter == 1) {
- break;
- }
- counter = counter / MULTIPLY;
- }
- return (version >= VERSION_1_11_2);
- }
- /**
- * the execute method running CvsVersion
- */
- public void execute() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- this.setOutputStream(bos);
- ByteArrayOutputStream berr = new ByteArrayOutputStream();
- this.setErrorStream(berr);
- setCommand("version");
- super.execute();
- String output = bos.toString();
- StringTokenizer st = new StringTokenizer(output);
- boolean client = false;
- boolean server = false;
- boolean cvs = false;
- while (st.hasMoreTokens()) {
- String currentToken = st.nextToken();
- if (currentToken.equals("Client:")) {
- client = true;
- } else if (currentToken.equals("Server:")) {
- server = true;
- } else if (currentToken.equals("(CVS)")) {
- cvs = true;
- }
- if (client && cvs) {
- if (st.hasMoreTokens()) {
- clientVersion = st.nextToken();
- }
- client = false;
- cvs = false;
- } else if (server && cvs) {
- if (st.hasMoreTokens()) {
- serverVersion = st.nextToken();
- }
- server = false;
- cvs = false;
- }
-
- }
- if (clientVersionProperty != null) {
- getProject().setNewProperty(clientVersionProperty, clientVersion);
- }
- if (serverVersionProperty != null) {
- getProject().setNewProperty(serverVersionProperty, serverVersion);
- }
- }
- }