aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java675
1 files changed, 0 insertions, 675 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
deleted file mode 100644
index dd6016a8..00000000
--- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * 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.optional.pvcs;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.text.ParseException;
-import java.util.Enumeration;
-import java.util.Random;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.taskdefs.PumpStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- *
- * Extracts the latest edition of the source code from a PVCS repository.
- * PVCS is a version control system
- * developed by <a href="http://www.merant.com/products/pvcs">Merant</a>.
- * <br>
- * Before using this tag, the user running ant must have access to the commands
- * of PVCS (get and pcli) and must have access to the repository. Note that the way to specify
- * the repository is platform dependent so use property to specify location of repository.
- * <br>
- * This version has been tested against PVCS version 6.5 and 6.6 under Windows and Solaris.
-
- *
- * <b>19-04-2001</b> <p>The task now has a more robust
- * parser. It allows for platform independent file paths
- * and supports file names with <i>()</i>. Thanks to Erik Husby for
- * bringing the bug to my attention.
- *
- * <b>27-04-2001</b> <p>UNC paths are now handled properly.
- * Fix provided by Don Jeffery. He also added an <i>UpdateOnly</i> flag
- * that, when true, conditions the PVCS get using the -U option to only
- * update those files that have a modification time (in PVCS) that is newer
- * than the existing workfile.
- *
- * <b>25-10-2002</b> <p>Added a revision attribute that currently is a
- * synonym for label, but in a future release the behavior of the label
- * attribute will change to use the -v option of GET. See bug #13847 for
- * discussion.
- *
- */
-public class Pvcs extends org.apache.tools.ant.Task {
- // CheckStyle - magic numbers
- // checking for "X:\ 0=dquote,1=letter,2=:,3=\
- private static final int POS_1 = 1;
- private static final int POS_2 = 2;
- private static final int POS_3 = 3;
-
- private String pvcsbin;
- private String repository;
- private String pvcsProject;
- private Vector pvcsProjects;
- private String workspace;
- private String force;
- private String promotiongroup;
- private String label;
- private String revision;
- private boolean ignorerc;
- private boolean updateOnly;
- private String filenameFormat;
- private String lineStart;
- private String userId;
- private String config;
- /**
- * Constant for the thing to execute
- */
- private static final String PCLI_EXE = "pcli";
-
- /*
- * Constant for the PCLI listversionedfiles recursive i a format "get" understands
- */
- // private static final String PCLI_LVF_ARGS = "lvf -z -aw";
-
- /**
- * Constant for the thing to execute
- */
- private static final String GET_EXE = "get";
-
-
- /**
- * Run the command.
- * @param cmd the command line to use.
- * @param out the output stream handler to use.
- * @return the exit code of the command.
- */
- protected int runCmd(Commandline cmd, ExecuteStreamHandler out) {
- try {
- Project aProj = getProject();
- Execute exe = new Execute(out);
- exe.setAntRun(aProj);
- exe.setWorkingDirectory(aProj.getBaseDir());
- exe.setCommandline(cmd.getCommandline());
- return exe.execute();
- } catch (java.io.IOException e) {
- String msg = "Failed executing: " + cmd.toString()
- + ". Exception: " + e.getMessage();
- throw new BuildException(msg, getLocation());
- }
- }
-
- private String getExecutable(String exe) {
- StringBuffer correctedExe = new StringBuffer();
- if (getPvcsbin() != null) {
- if (pvcsbin.endsWith(File.separator)) {
- correctedExe.append(pvcsbin);
- } else {
- correctedExe.append(pvcsbin).append(File.separator);
- }
- }
- return correctedExe.append(exe).toString();
- }
-
- /**
- * @exception org.apache.tools.ant.BuildException Something is stopping the build...
- */
- public void execute() throws org.apache.tools.ant.BuildException {
- int result = 0;
-
- if (repository == null || repository.trim().equals("")) {
- throw new BuildException("Required argument repository not specified");
- }
-
- // Check workspace exists
- // Launch PCLI listversionedfiles -z -aw
- // Capture output
- // build the command line from what we got the format is
- Commandline commandLine = new Commandline();
- commandLine.setExecutable(getExecutable(PCLI_EXE));
-
- commandLine.createArgument().setValue("lvf");
- commandLine.createArgument().setValue("-z");
- commandLine.createArgument().setValue("-aw");
- if (getWorkspace() != null) {
- commandLine.createArgument().setValue("-sp" + getWorkspace());
- }
- commandLine.createArgument().setValue("-pr" + getRepository());
-
- String uid = getUserId();
-
- if (uid != null) {
- commandLine.createArgument().setValue("-id" + uid);
- }
-
- // default pvcs project is "/"
- if (getPvcsproject() == null && getPvcsprojects().isEmpty()) {
- pvcsProject = "/";
- }
-
- if (getPvcsproject() != null) {
- commandLine.createArgument().setValue(getPvcsproject());
- }
- if (!getPvcsprojects().isEmpty()) {
- Enumeration e = getPvcsprojects().elements();
- while (e.hasMoreElements()) {
- String projectName = ((PvcsProject) e.nextElement()).getName();
- if (projectName == null || (projectName.trim()).equals("")) {
- throw new BuildException("name is a required attribute "
- + "of pvcsproject");
- }
- commandLine.createArgument().setValue(projectName);
- }
- }
-
- File tmp = null;
- File tmp2 = null;
- try {
- Random rand = new Random(System.currentTimeMillis());
- tmp = new File("pvcs_ant_" + rand.nextLong() + ".log");
- FileOutputStream fos = new FileOutputStream(tmp);
- tmp2 = new File("pvcs_ant_" + rand.nextLong() + ".log");
- log(commandLine.describeCommand(), Project.MSG_VERBOSE);
- try {
- result = runCmd(commandLine,
- new PumpStreamHandler(fos,
- new LogOutputStream(this,
- Project.MSG_WARN)));
- } finally {
- FileUtils.close(fos);
- }
-
- if (Execute.isFailure(result) && !ignorerc) {
- String msg = "Failed executing: " + commandLine.toString();
- throw new BuildException(msg, getLocation());
- }
-
- if (!tmp.exists()) {
- throw new BuildException("Communication between ant and pvcs "
- + "failed. No output generated from executing PVCS "
- + "commandline interface \"pcli\" and \"get\"");
- }
-
- // Create folders in workspace
- log("Creating folders", Project.MSG_INFO);
- createFolders(tmp);
-
- // Massage PCLI lvf output transforming '\' to '/' so get command works appropriately
- massagePCLI(tmp, tmp2);
-
- // Launch get on output captured from PCLI lvf
- commandLine.clearArgs();
- commandLine.setExecutable(getExecutable(GET_EXE));
-
- if (getConfig() != null && getConfig().length() > 0) {
- commandLine.createArgument().setValue("-c" + getConfig());
- }
-
- if (getForce() != null && getForce().equals("yes")) {
- commandLine.createArgument().setValue("-Y");
- } else {
- commandLine.createArgument().setValue("-N");
- }
-
- if (getPromotiongroup() != null) {
- commandLine.createArgument().setValue("-G"
- + getPromotiongroup());
- } else {
- if (getLabel() != null) {
- commandLine.createArgument().setValue("-v" + getLabel());
- } else {
- if (getRevision() != null) {
- commandLine.createArgument().setValue("-r"
- + getRevision());
- }
- }
- }
-
- if (updateOnly) {
- commandLine.createArgument().setValue("-U");
- }
-
- commandLine.createArgument().setValue("@" + tmp2.getAbsolutePath());
- log("Getting files", Project.MSG_INFO);
- log("Executing " + commandLine.toString(), Project.MSG_VERBOSE);
- result = runCmd(commandLine,
- new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN));
- if (result != 0 && !ignorerc) {
- String msg = "Failed executing: " + commandLine.toString()
- + ". Return code was " + result;
- throw new BuildException(msg, getLocation());
- }
-
- } catch (FileNotFoundException e) {
- String msg = "Failed executing: " + commandLine.toString()
- + ". Exception: " + e.getMessage();
- throw new BuildException(msg, getLocation());
- } catch (IOException e) {
- String msg = "Failed executing: " + commandLine.toString()
- + ". Exception: " + e.getMessage();
- throw new BuildException(msg, getLocation());
- } catch (ParseException e) {
- String msg = "Failed executing: " + commandLine.toString()
- + ". Exception: " + e.getMessage();
- throw new BuildException(msg, getLocation());
- } finally {
- if (tmp != null) {
- tmp.delete();
- }
- if (tmp2 != null) {
- tmp2.delete();
- }
- }
- }
-
- /**
- * Parses the file and creates the folders specified in the output section
- */
- private void createFolders(File file) throws IOException, ParseException {
- BufferedReader in = null;
- try {
- in = new BufferedReader(new FileReader(file));
- MessageFormat mf = new MessageFormat(getFilenameFormat());
- String line = in.readLine();
- while (line != null) {
- log("Considering \"" + line + "\"", Project.MSG_VERBOSE);
- if (line.startsWith("\"\\") // Checking for "\
- || line.startsWith("\"/") // or "/
- // or "X:\...
- || (line.length() > POS_3 && line.startsWith("\"")
- && Character.isLetter(line.charAt(POS_1))
- && String.valueOf(line.charAt(POS_2)).equals(":")
- && String.valueOf(line.charAt(POS_3)).equals("\\"))) {
- Object[] objs = mf.parse(line);
- String f = (String) objs[1];
- // Extract the name of the directory from the filename
- int index = f.lastIndexOf(File.separator);
- if (index > -1) {
- File dir = new File(f.substring(0, index));
- if (!dir.exists()) {
- log("Creating " + dir.getAbsolutePath(),
- Project.MSG_VERBOSE);
- if (dir.mkdirs() || dir.isDirectory()) {
- log("Created " + dir.getAbsolutePath(),
- Project.MSG_INFO);
- } else {
- log("Failed to create "
- + dir.getAbsolutePath(),
- Project.MSG_INFO);
- }
- } else {
- log(dir.getAbsolutePath() + " exists. Skipping",
- Project.MSG_VERBOSE);
- }
- } else {
- log("File separator problem with " + line,
- Project.MSG_WARN);
- }
- } else {
- log("Skipped \"" + line + "\"", Project.MSG_VERBOSE);
- }
- line = in.readLine();
- }
- } finally {
- FileUtils.close(in);
- }
- }
-
-
- /**
- * Simple hack to handle the PVCS command-line tools botch when
- * handling UNC notation.
- * @throws IOException if there is an error.
- */
- private void massagePCLI(File in, File out)
- throws IOException {
- BufferedReader inReader = null;
- BufferedWriter outWriter = null;
- try {
- inReader = new BufferedReader(new FileReader(in));
- outWriter = new BufferedWriter(new FileWriter(out));
- String s = null;
- while ((s = inReader.readLine()) != null) {
- String sNormal = s.replace('\\', '/');
- outWriter.write(sNormal);
- outWriter.newLine();
- }
- } finally {
- FileUtils.close(inReader);
- FileUtils.close(outWriter);
- }
- }
-
- /**
- * Get network name of the PVCS repository
- * @return String
- */
- public String getRepository() {
- return repository;
- }
-
- /**
- * The filenameFormat attribute defines a MessageFormat string used
- * to parse the output of the pcli command. It defaults to
- * <code>{0}-arc({1})</code>. Repositories where the archive
- * extension is not -arc should set this.
- * @return the filename format attribute.
- */
- public String getFilenameFormat() {
- return filenameFormat;
- }
-
- /**
- * The format of the folder names; optional.
- * This must be in a format suitable for
- * <code>java.text.MessageFormat</code>.
- * Index 1 of the format will be used as the file name.
- * Defaults to <code>{0}-arc({1})</code>
- * @param f the format to use.
- */
- public void setFilenameFormat(String f) {
- filenameFormat = f;
- }
-
- /**
-
- * The lineStart attribute is used to parse the output of the pcli
- * command. It defaults to <code>&quot;P:</code>. The parser already
- * knows about / and \\, this property is useful in cases where the
- * repository is accessed on a Windows platform via a drive letter
- * mapping.
- * @return the lineStart attribute.
- */
- public String getLineStart() {
- return lineStart;
- }
-
- /**
- * What a valid return value from PVCS looks like
- * when it describes a file. Defaults to <code>&quot;P:</code>.
- * If you are not using an UNC name for your repository and the
- * drive letter <code>P</code> is incorrect for your setup, you may
- * need to change this value, UNC names will always be
- * accepted.
- * @param l the value to use.
- */
- public void setLineStart(String l) {
- lineStart = l;
- }
-
- /**
- * The network name of the PVCS repository; required.
- * @param repo String
- */
- public void setRepository(String repo) {
- repository = repo;
- }
-
- /**
- * Get name of the project in the PVCS repository
- * @return String
- */
- public String getPvcsproject() {
- return pvcsProject;
- }
-
- /**
- * The project within the PVCS repository to extract files from;
- * optional, default &quot;/&quot;
- * @param prj String
- */
- public void setPvcsproject(String prj) {
- pvcsProject = prj;
- }
-
- /**
- * Get name of the project in the PVCS repository
- * @return Vector
- */
- public Vector getPvcsprojects() {
- return pvcsProjects;
- }
-
- /**
- * Get name of the workspace to store the retrieved files
- * @return String
- */
- public String getWorkspace() {
- return workspace;
- }
-
- /**
- * Workspace to use; optional.
- * By specifying a workspace, the files are extracted to that location.
- * A PVCS workspace is a name for a location of the workfiles and
- * isn't as such the location itself.
- * You define the location for a workspace using the PVCS GUI clients.
- * If this isn't specified the default workspace for the current user is used.
- * @param ws String
- */
- public void setWorkspace(String ws) {
- workspace = ws;
- }
-
- /**
- * Get name of the PVCS bin directory
- * @return String
- */
- public String getPvcsbin() {
- return pvcsbin;
- }
-
- /**
- * Specifies the location of the PVCS bin directory; optional if on the PATH.
- * On some systems the PVCS executables <i>pcli</i>
- * and <i>get</i> are not found in the PATH. In such cases this attribute
- * should be set to the bin directory of the PVCS installation containing
- * the executables mentioned before. If this attribute isn't specified the
- * tag expects the executables to be found using the PATH environment variable.
- * @param bin PVCS bin directory
- * @todo use a File setter and resolve paths.
- */
- public void setPvcsbin(String bin) {
- pvcsbin = bin;
- }
-
- /**
- * Get value of force
- * @return String
- */
- public String getForce() {
- return force;
- }
-
- /**
- * Specifies the value of the force argument; optional.
- * If set to <i>yes</i> all files that exists and are
- * writable are overwritten. Default <i>no</i> causes the files
- * that are writable to be ignored. This stops the PVCS command
- * <i>get</i> to stop asking questions!
- * @todo make a boolean setter
- * @param f String (yes/no)
- */
- public void setForce(String f) {
- if (f != null && f.equalsIgnoreCase("yes")) {
- force = "yes";
- } else {
- force = "no";
- }
- }
-
- /**
- * Get value of promotiongroup
- * @return String
- */
- public String getPromotiongroup() {
- return promotiongroup;
- }
-
- /**
- * Specifies the name of the promotiongroup argument
- * @param w String
- */
- public void setPromotiongroup(String w) {
- promotiongroup = w;
- }
-
- /**
- * Get value of label
- * @return String
- */
- public String getLabel() {
- return label;
- }
-
- /**
- * Only files marked with this label are extracted; optional.
- * @param l String
- */
- public void setLabel(String l) {
- label = l;
- }
-
- /**
- * Get value of revision
- * @return String
- */
- public String getRevision() {
- return revision;
- }
-
- /**
- * Only files with this revision are extract; optional.
- * @param r String
- */
- public void setRevision(String r) {
- revision = r;
- }
-
- /**
- * Get value of ignorereturncode
- * @return String
- */
- public boolean getIgnoreReturnCode() {
- return ignorerc;
- }
-
- /**
- * If set to true the return value from executing the pvcs
- * commands are ignored; optional, default false.
- * @param b a <code>boolean</code> value.
- */
- public void setIgnoreReturnCode(boolean b) {
- ignorerc = b;
- }
-
- /**
- * Specify a project within the PVCS repository to extract files from.
- * @param p the pvcs project to use.
- */
- public void addPvcsproject(PvcsProject p) {
- pvcsProjects.addElement(p);
- }
-
- /**
- * get the updateOnly attribute.
- * @return the updateOnly attribute.
- */
- public boolean getUpdateOnly() {
- return updateOnly;
- }
-
- /**
- * If set to <i>true</i> files are fetched only if
- * newer than existing local files; optional, default false.
- * @param l a <code>boolean</code> value.
- */
- public void setUpdateOnly(boolean l) {
- updateOnly = l;
- }
-
- /**
- * returns the path of the configuration file to be used
- * @return the path of the config file
- */
- public String getConfig() {
- return config;
- }
-
- /**
- * Sets a configuration file other than the default to be used.
- * These files have a .cfg extension and are often found in archive or pvcsprop folders.
- * @param f config file - can be given absolute or relative to ant basedir
- */
- public void setConfig(File f) {
- config = f.toString();
- }
-
-
- /**
- * Get the userid.
- * @return the userid.
- */
- public String getUserId() {
- return userId;
- }
-
- /**
- * User ID
- * @param u the value to use.
- */
- public void setUserId(String u) {
- userId = u;
- }
-
- /**
- * Creates a Pvcs object
- */
- public Pvcs() {
- super();
- pvcsProject = null;
- pvcsProjects = new Vector();
- workspace = null;
- repository = null;
- pvcsbin = null;
- force = null;
- promotiongroup = null;
- label = null;
- ignorerc = false;
- updateOnly = false;
- lineStart = "\"P:";
- filenameFormat = "{0}-arc({1})";
- }
-}
-