aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java
new file mode 100644
index 00000000..618da4ec
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java
@@ -0,0 +1,169 @@
+/*
+ * 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.tools.ant.taskdefs.cvslib;
+
+import java.io.ByteArrayOutputStream;
+import java.util.StringTokenizer;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.AbstractCvsTask;
+
+/**
+ * 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 tokenizer = new StringTokenizer(serverVersion, ".");
+ long counter = MULTIPLY * MULTIPLY;
+ long version = 0;
+ while (tokenizer.hasMoreTokens()) {
+ String s = tokenizer.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();
+ log("Received version response \"" + output + "\"",
+ Project.MSG_DEBUG);
+ StringTokenizer st = new StringTokenizer(output);
+ boolean client = false;
+ boolean server = false;
+ String cvs = null;
+ String cachedVersion = null;
+ boolean haveReadAhead = false;
+ while (haveReadAhead || st.hasMoreTokens()) {
+ String currentToken = haveReadAhead ? cachedVersion : st.nextToken();
+ haveReadAhead = false;
+ if (currentToken.equals("Client:")) {
+ client = true;
+ } else if (currentToken.equals("Server:")) {
+ server = true;
+ } else if (currentToken.startsWith("(CVS")
+ && currentToken.endsWith(")")) {
+ cvs = currentToken.length() == 5 ? "" : " " + currentToken;
+ }
+ if (!client && !server && cvs != null
+ && cachedVersion == null && st.hasMoreTokens()) {
+ cachedVersion = st.nextToken();
+ haveReadAhead = true;
+ } else if (client && cvs != null) {
+ if (st.hasMoreTokens()) {
+ clientVersion = st.nextToken() + cvs;
+ }
+ client = false;
+ cvs = null;
+ } else if (server && cvs != null) {
+ if (st.hasMoreTokens()) {
+ serverVersion = st.nextToken() + cvs;
+ }
+ server = false;
+ cvs = null;
+ } else if (currentToken.equals("(client/server)")
+ && cvs != null && cachedVersion != null
+ && !client && !server) {
+ client = server = true;
+ clientVersion = serverVersion = cachedVersion + cvs;
+ cachedVersion = cvs = null;
+ }
+ }
+ if (clientVersionProperty != null) {
+ getProject().setNewProperty(clientVersionProperty, clientVersion);
+ }
+ if (serverVersionProperty != null) {
+ getProject().setNewProperty(serverVersionProperty, serverVersion);
+ }
+ }
+}