PR: 16910 Submitted by: Jesse Stockall git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274025 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -1600,6 +1600,8 @@ | |||||
| unless="tests.and.ant.share.classloader"/> | unless="tests.and.ant.share.classloader"/> | ||||
| <exclude name="${optional.package}/sos/SOSTest.java" | <exclude name="${optional.package}/sos/SOSTest.java" | ||||
| unless="tests.and.ant.share.classloader"/> | unless="tests.and.ant.share.classloader"/> | ||||
| <exclude name="${optional.package}/vss/MSVSSTest.java" | |||||
| unless="tests.and.ant.share.classloader"/> | |||||
| <exclude name="${optional.package}/TraXLiaisonTest.java" | <exclude name="${optional.package}/TraXLiaisonTest.java" | ||||
| unless="tests.and.ant.share.classloader"/> | unless="tests.and.ant.share.classloader"/> | ||||
| <exclude name="${optional.package}/metamata/MAuditParserTest.java" | <exclude name="${optional.package}/metamata/MAuditParserTest.java" | ||||
| @@ -0,0 +1,46 @@ | |||||
| <?xml version="1.0"?> | |||||
| <project name="vss-test" basedir="." default="sosget.1"> | |||||
| <!-- | |||||
| =========================================================================== | |||||
| Test required attributes | |||||
| =========================================================================== | |||||
| --> | |||||
| <target name="vssget.1"> | |||||
| <vssget/> | |||||
| </target> | |||||
| <target name="vsslabel.1"> | |||||
| <vsslabel/> | |||||
| </target> | |||||
| <target name="vsslabel.2"> | |||||
| <vsslabel vsspath="$/SourceRoot/Project"/> | |||||
| </target> | |||||
| <target name="vsshistory.1"> | |||||
| <vsshistory/> | |||||
| </target> | |||||
| <target name="vsscheckin.1"> | |||||
| <vsscheckin/> | |||||
| </target> | |||||
| <target name="vsscheckout.1"> | |||||
| <vsscheckout/> | |||||
| </target> | |||||
| <target name="vssadd.1"> | |||||
| <vssadd/> | |||||
| </target> | |||||
| <target name="vsscp.1"> | |||||
| <vsscp/> | |||||
| </target> | |||||
| <target name="vsscreate.1"> | |||||
| <vsscreate/> | |||||
| </target> | |||||
| </project> | |||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -54,7 +54,13 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.vss; | package org.apache.tools.ant.taskdefs.optional.vss; | ||||
| import java.io.File; | |||||
| import java.io.IOException; | |||||
| import java.text.DateFormat; | |||||
| import java.text.ParseException; | |||||
| import java.util.Calendar; | |||||
| import java.util.Date; | |||||
| import java.util.GregorianCalendar; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| @@ -77,36 +83,72 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * | * | ||||
| * @author Craig Cottingham | * @author Craig Cottingham | ||||
| * @author Andrew Everitt | * @author Andrew Everitt | ||||
| * @author Jesse Stockall | |||||
| */ | */ | ||||
| public abstract class MSVSS extends Task { | |||||
| public abstract class MSVSS extends Task implements MSVSSConstants { | |||||
| private String m_SSDir = ""; | |||||
| private String m_SSDir = null; | |||||
| private String m_vssLogin = null; | private String m_vssLogin = null; | ||||
| private String m_vssPath = null; | private String m_vssPath = null; | ||||
| private String m_serverPath = null; | private String m_serverPath = null; | ||||
| /** Version */ | |||||
| protected String m_Version = null; | |||||
| /** Date */ | |||||
| protected String m_Date = null; | |||||
| /** Label */ | |||||
| protected String m_Label = null; | |||||
| /** Auto response */ | |||||
| protected String m_AutoResponse = null; | |||||
| /** Local path */ | |||||
| protected String m_LocalPath = null; | |||||
| /** Comment */ | |||||
| protected String m_Comment = null; | |||||
| /** From label */ | |||||
| protected String m_FromLabel = null; | |||||
| /** To label */ | |||||
| protected String m_ToLabel = null; | |||||
| /** Output file name */ | |||||
| protected String m_OutputFileName = null; | |||||
| /** User */ | |||||
| protected String m_User = null; | |||||
| /** From date */ | |||||
| protected String m_FromDate = null; | |||||
| /** To date */ | |||||
| protected String m_ToDate = null; | |||||
| /** History style */ | |||||
| protected String m_Style = null; | |||||
| /** Quiet defaults to false */ | |||||
| protected boolean m_Quiet = false; | |||||
| /** Recursive defaults to false */ | |||||
| protected boolean m_Recursive = false; | |||||
| /** Writable defaults to false */ | |||||
| protected boolean m_Writable = false; | |||||
| /** Fail on error defaults to true */ | |||||
| protected boolean m_FailOnError = true; | |||||
| /** Number of days offset for History */ | |||||
| protected int m_NumDays = Integer.MIN_VALUE; | |||||
| /** Date format for History */ | |||||
| protected DateFormat m_DateFormat = DateFormat.getDateInstance(DateFormat.SHORT); | |||||
| /** | |||||
| * Each sub-class must implemnt this method and return the constructed | |||||
| * command line to be executed. It is up to the sub-task to determine the | |||||
| * required attrubutes and their order. | |||||
| * | |||||
| * @return The Constructed command line. | |||||
| */ | |||||
| abstract Commandline buildCmdLine(); | |||||
| /** | /** | ||||
| * directory where <code>ss.exe</code> resides; optional. | |||||
| * Directory where <code>ss.exe</code> resides; optional. | |||||
| * By default the task expects it to be in the PATH. | * By default the task expects it to be in the PATH. | ||||
| * | * | ||||
| * @param dir the directory containing ss.exe | |||||
| * @param dir The directory containing ss.exe. | |||||
| */ | */ | ||||
| public final void setSsdir(String dir) { | public final void setSsdir(String dir) { | ||||
| m_SSDir = Project.translatePath(dir); | m_SSDir = Project.translatePath(dir); | ||||
| } | } | ||||
| /** | |||||
| * Builds and returns the command string to execute ss.exe | |||||
| */ | |||||
| public final String getSSCommand() { | |||||
| String toReturn = m_SSDir; | |||||
| if (!toReturn.equals("") && !toReturn.endsWith("\\")) { | |||||
| toReturn += "\\"; | |||||
| } | |||||
| toReturn += SS_EXE; | |||||
| return toReturn; | |||||
| } | |||||
| /** | /** | ||||
| * The login to use when accessing VSS, formatted as "username,password"; | * The login to use when accessing VSS, formatted as "username,password"; | ||||
| @@ -115,32 +157,20 @@ public abstract class MSVSS extends Task { | |||||
| * You can omit the password if your database is not password protected. | * You can omit the password if your database is not password protected. | ||||
| * if you have a password and omit it, Ant/VSS will hang. | * if you have a password and omit it, Ant/VSS will hang. | ||||
| * | * | ||||
| * @param login the login string to use | |||||
| * @param login The login string to use. | |||||
| */ | */ | ||||
| public final void setLogin(String login) { | public final void setLogin(String login) { | ||||
| m_vssLogin = login; | m_vssLogin = login; | ||||
| } | } | ||||
| /** | /** | ||||
| * the appropriate login command if the 'login' attribute was specified, otherwise an empty string | |||||
| */ | |||||
| public void getLoginCommand(Commandline cmd) { | |||||
| if (m_vssLogin == null) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_LOGIN + m_vssLogin); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * SourceSafe path which specifies the project/file(s) you wish to | |||||
| * perform the action on; required. You should not specify the leading dollar-sign - | |||||
| * it is prepended by Ant automatically. | |||||
| * <p> | |||||
| * Ant can't cope with a '$' sign in an attribute so we have to add it here. | |||||
| * Also we strip off any 'vss://' prefix which is an XMS special and should probably be removed! | |||||
| * @todo dont add a $ prefix if it has one | |||||
| * @param vssPath | |||||
| * SourceSafe path which specifies the project/file(s) you wish to perform | |||||
| * the action on; required.<p> | |||||
| * | |||||
| * Also we strip off any 'vss://' prefix which is an XMS special and should | |||||
| * probably be removed! | |||||
| * | |||||
| * @param vssPath The VSS project path. | |||||
| */ | */ | ||||
| public final void setVsspath(String vssPath) { | public final void setVsspath(String vssPath) { | ||||
| String projectPath; | String projectPath; | ||||
| @@ -158,117 +188,314 @@ public abstract class MSVSS extends Task { | |||||
| } | } | ||||
| /** | /** | ||||
| * @return m_vssPath | |||||
| * Set the directory where <code>srssafe.ini</code> resides; optional. | |||||
| * | |||||
| * @param serverPath The path to the VSS server. | |||||
| */ | |||||
| public final void setServerpath(String serverPath) { | |||||
| m_serverPath = serverPath; | |||||
| } | |||||
| /** | |||||
| * Executes the task. <br> | |||||
| * Builds a command line to execute ss.exe and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * @throws BuildException | |||||
| */ | |||||
| public void execute() | |||||
| throws BuildException { | |||||
| int result = 0; | |||||
| Commandline commandLine = buildCmdLine(); | |||||
| result = run(commandLine); | |||||
| if (result != 0 && getFailOnError()) { | |||||
| String msg = "Failed executing: " + commandLine.toString() | |||||
| + " With a return code of " + result; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the sscommand string. "ss" or "c:\path\to\ss" | |||||
| * | |||||
| * @return The path to ss.exe or just ss if sscommand is not set. | |||||
| */ | |||||
| public String getSSCommand() { | |||||
| if (m_SSDir == null) { | |||||
| return SS_EXE; | |||||
| } | |||||
| return m_SSDir.endsWith(File.separator) ? m_SSDir + SS_EXE : m_SSDir | |||||
| + File.separator + SS_EXE; | |||||
| } | |||||
| /** | |||||
| * Gets the vssserverpath string. | |||||
| * | |||||
| * @return null if vssserverpath is not set. | |||||
| */ | */ | ||||
| public String getVsspath() { | |||||
| protected String getVsspath() { | |||||
| return m_vssPath; | return m_vssPath; | ||||
| } | } | ||||
| /** | /** | ||||
| * Set the directory where <code>srssafe.ini</code> resides; optional. | |||||
| * @param serverPath | |||||
| * Gets the quiet string. -O- | |||||
| * | |||||
| * @return An empty string if quiet is not set or is false. | |||||
| */ | */ | ||||
| public final void setServerpath(String serverPath) { | |||||
| m_serverPath = serverPath; | |||||
| protected String getQuiet() { | |||||
| return m_Quiet ? FLAG_QUIET : ""; | |||||
| } | } | ||||
| protected int run(Commandline cmd) { | |||||
| try { | |||||
| Execute exe = new Execute(new LogStreamHandler(this, | |||||
| Project.MSG_INFO, | |||||
| Project.MSG_WARN)); | |||||
| /** | |||||
| * Gets the recursive string. "-R" | |||||
| * | |||||
| * @return An empty string if recursive is not set or is false. | |||||
| */ | |||||
| protected String getRecursive() { | |||||
| return m_Recursive ? FLAG_RECURSION : ""; | |||||
| } | |||||
| // If location of ss.ini is specified we need to set the | |||||
| // environment-variable SSDIR to this value | |||||
| if (m_serverPath != null) { | |||||
| String[] env = exe.getEnvironment(); | |||||
| if (env == null) { | |||||
| env = new String[0]; | |||||
| } | |||||
| String[] newEnv = new String[env.length + 1]; | |||||
| for (int i = 0; i < env.length ; i++) { | |||||
| newEnv[i] = env[i]; | |||||
| } | |||||
| newEnv[env.length] = "SSDIR=" + m_serverPath; | |||||
| /** | |||||
| * Gets the writable string. "-W" | |||||
| * | |||||
| * @return An empty string if writable is not set or is false. | |||||
| */ | |||||
| protected String getWritable() { | |||||
| return m_Writable ? FLAG_WRITABLE : ""; | |||||
| } | |||||
| exe.setEnvironment(newEnv); | |||||
| /** | |||||
| * Gets the label string. "-Lbuild1" | |||||
| * | |||||
| * @return An empty string if label is not set. | |||||
| */ | |||||
| protected String getLabel() { | |||||
| return m_Label != null ? FLAG_LABEL + m_Label : ""; | |||||
| } | |||||
| /** | |||||
| * Gets the style string. "-Lbuild1" | |||||
| * | |||||
| * @return An empty string if label is not set. | |||||
| */ | |||||
| protected String getStyle() { | |||||
| return m_Style != null ? m_Style : ""; | |||||
| } | |||||
| /** | |||||
| * Gets the version string. Returns the first specified of version "-V1.0", | |||||
| * date "-Vd01.01.01", label "-Vlbuild1". | |||||
| * | |||||
| * @return An empty string if a version is not set. | |||||
| */ | |||||
| protected String getVersion() { | |||||
| if (m_Version != null) { | |||||
| return FLAG_VERSION + m_Version; | |||||
| } else if (m_Date != null) { | |||||
| return FLAG_VERSION_DATE + m_Date; | |||||
| } else if (m_Label != null) { | |||||
| return FLAG_VERSION_LABEL + m_Label; | |||||
| } else { | |||||
| return ""; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the localpath string. "-GLc:\source" <p> | |||||
| * | |||||
| * The localpath is created if it didn't exist. | |||||
| * | |||||
| * @return An empty string if localpath is not set. | |||||
| */ | |||||
| protected String getLocalpath() { | |||||
| if (m_LocalPath == null) { | |||||
| return ""; | |||||
| } else { | |||||
| // make sure m_LocalDir exists, create it if it doesn't | |||||
| File dir = getProject().resolveFile(m_LocalPath); | |||||
| if (! dir.exists()) { | |||||
| boolean done = dir.mkdirs(); | |||||
| if (! done) { | |||||
| String msg = "Directory " + m_LocalPath + " creation was not " | |||||
| + "successful for an unknown reason"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| getProject().log("Created dir: " + dir.getAbsolutePath()); | |||||
| } | } | ||||
| exe.setAntRun(getProject()); | |||||
| exe.setWorkingDirectory(getProject().getBaseDir()); | |||||
| exe.setCommandline(cmd.getCommandline()); | |||||
| return exe.execute(); | |||||
| } catch (java.io.IOException e) { | |||||
| throw new BuildException(e, getLocation()); | |||||
| return FLAG_OVERRIDE_WORKING_DIR + m_LocalPath; | |||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Constant for the thing to execute | |||||
| * Gets the comment string. "-Ccomment text" | |||||
| * | |||||
| * @return A comment of "-" if comment is not set. | |||||
| */ | |||||
| protected String getComment() { | |||||
| return m_Comment != null ? FLAG_COMMENT + m_Comment : FLAG_COMMENT + "-"; | |||||
| } | |||||
| /** | |||||
| * Gets the auto response string. This can be Y "-I-Y" or N "-I-N". | |||||
| * | |||||
| * @return The default value "-I-" if autoresponse is not set. | |||||
| */ | */ | ||||
| private static final String SS_EXE = "ss"; | |||||
| /** */ | |||||
| public static final String PROJECT_PREFIX = "$"; | |||||
| protected String getAutoresponse() { | |||||
| if (m_AutoResponse == null) { | |||||
| return FLAG_AUTORESPONSE_DEF; | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| return FLAG_AUTORESPONSE_YES; | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| return FLAG_AUTORESPONSE_NO; | |||||
| } else { | |||||
| return FLAG_AUTORESPONSE_DEF; | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * The 'CP' command | |||||
| * Gets the login string. This can be user and password, "-Yuser,password" | |||||
| * or just user "-Yuser". | |||||
| * | |||||
| * @return An empty string if login is not set. | |||||
| */ | */ | ||||
| public static final String COMMAND_CP = "CP"; | |||||
| protected String getLogin() { | |||||
| return m_vssLogin != null ? FLAG_LOGIN + m_vssLogin : ""; | |||||
| } | |||||
| /** | /** | ||||
| * The 'Add' command | |||||
| * Gets the output file string. "-Ooutput.file" | |||||
| * | |||||
| * @return An empty string if user is not set. | |||||
| */ | */ | ||||
| public static final String COMMAND_ADD = "Add"; | |||||
| protected String getOutput() { | |||||
| return m_OutputFileName != null ? FLAG_OUTPUT + m_OutputFileName : ""; | |||||
| } | |||||
| /** | /** | ||||
| * The 'Get' command | |||||
| * Gets the user string. "-Uusername" | |||||
| * | |||||
| * @return An empty string if user is not set. | |||||
| */ | */ | ||||
| public static final String COMMAND_GET = "Get"; | |||||
| protected String getUser() { | |||||
| return m_User != null ? FLAG_USER + m_User : ""; | |||||
| } | |||||
| /** | /** | ||||
| * The 'Checkout' command | |||||
| * Gets the version string. This can be to-from "-VLbuild2~Lbuild1", from | |||||
| * "~Lbuild1" or to "-VLbuild2". | |||||
| * | |||||
| * @return An empty string if neither tolabel or fromlabel are set. | |||||
| */ | */ | ||||
| public static final String COMMAND_CHECKOUT = "Checkout"; | |||||
| protected String getVersionLabel() { | |||||
| if (m_FromLabel == null && m_ToLabel == null) { | |||||
| return ""; | |||||
| } | |||||
| if (m_FromLabel != null && m_ToLabel != null) { | |||||
| return FLAG_VERSION_LABEL + m_ToLabel + VALUE_FROMLABEL + m_FromLabel; | |||||
| } else if (m_FromLabel != null) { | |||||
| return FLAG_VERSION + VALUE_FROMLABEL + m_FromLabel; | |||||
| } else { | |||||
| return FLAG_VERSION_LABEL + m_ToLabel; | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * The 'Checkin' command | |||||
| * Gets the Version date string. | |||||
| * @return An empty string is neither Todate or from date are set. | |||||
| * @throws BuildException | |||||
| */ | */ | ||||
| public static final String COMMAND_CHECKIN = "Checkin"; | |||||
| protected String getVersionDate() throws BuildException { | |||||
| if (m_FromDate == null && m_ToDate == null | |||||
| && m_NumDays == Integer.MIN_VALUE) { | |||||
| return ""; | |||||
| } | |||||
| if (m_FromDate != null && m_ToDate != null) { | |||||
| return FLAG_VERSION_DATE + m_ToDate + VALUE_FROMDATE + m_FromDate; | |||||
| } else if (m_ToDate != null && m_NumDays != Integer.MIN_VALUE) { | |||||
| try { | |||||
| return FLAG_VERSION_DATE + m_ToDate + VALUE_FROMDATE | |||||
| + calcDate(m_ToDate, m_NumDays); | |||||
| } catch (ParseException ex) { | |||||
| String msg = "Error parsing date: " + m_ToDate; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| } else if (m_FromDate != null && m_NumDays != Integer.MIN_VALUE) { | |||||
| try { | |||||
| return FLAG_VERSION_DATE + calcDate(m_FromDate, m_NumDays) | |||||
| + VALUE_FROMDATE + m_FromDate; | |||||
| } catch (ParseException ex) { | |||||
| String msg = "Error parsing date: " + m_FromDate; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| } else { | |||||
| return m_FromDate != null ? FLAG_VERSION + VALUE_FROMDATE | |||||
| + m_FromDate : FLAG_VERSION_DATE + m_ToDate; | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * The 'Label' command | |||||
| * Gets the value of the fail on error flag. This is only used by execute | |||||
| * when checking the return code. | |||||
| * | |||||
| * @return True if the FailOnError flag has been set. | |||||
| */ | */ | ||||
| public static final String COMMAND_LABEL = "Label"; | |||||
| private boolean getFailOnError() { | |||||
| return m_FailOnError; | |||||
| } | |||||
| /** | /** | ||||
| * The 'History' command | |||||
| * Sets up the required environment and executes the command line. | |||||
| * | |||||
| * @param cmd The command line to execute. | |||||
| * @return The return code from the exec'd process. | |||||
| */ | */ | ||||
| public static final String COMMAND_HISTORY = "History"; | |||||
| /** | |||||
| * The 'Create' command | |||||
| private int run(Commandline cmd) { | |||||
| try { | |||||
| Execute exe = new Execute(new LogStreamHandler(this, | |||||
| Project.MSG_INFO, | |||||
| Project.MSG_WARN)); | |||||
| // If location of ss.ini is specified we need to set the | |||||
| // environment-variable SSDIR to this value | |||||
| if (m_serverPath != null) { | |||||
| String[] env = exe.getEnvironment(); | |||||
| if (env == null) { | |||||
| env = new String[0]; | |||||
| } | |||||
| String[] newEnv = new String[env.length + 1]; | |||||
| for (int i = 0; i < env.length; i++) { | |||||
| newEnv[i] = env[i]; | |||||
| } | |||||
| newEnv[env.length] = "SSDIR=" + m_serverPath; | |||||
| exe.setEnvironment(newEnv); | |||||
| } | |||||
| exe.setAntRun(getProject()); | |||||
| exe.setWorkingDirectory(getProject().getBaseDir()); | |||||
| exe.setCommandline(cmd.getCommandline()); | |||||
| return exe.execute(); | |||||
| } catch (IOException e) { | |||||
| throw new BuildException(e, getLocation()); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Calculates the start date for version comparison. | |||||
| * <p> | |||||
| * Calculates the date numDay days earlier than startdate. | |||||
| * @param fromDate The start date. | |||||
| * @param numDays The number of days to add. | |||||
| * @return The calculated date. | |||||
| * @throws ParseException | |||||
| */ | */ | ||||
| public static final String COMMAND_CREATE = "Create"; | |||||
| /** */ | |||||
| public static final String FLAG_LOGIN = "-Y"; | |||||
| /** */ | |||||
| public static final String FLAG_OVERRIDE_WORKING_DIR = "-GL"; | |||||
| /** */ | |||||
| public static final String FLAG_AUTORESPONSE_DEF = "-I-"; | |||||
| /** */ | |||||
| public static final String FLAG_AUTORESPONSE_YES = "-I-Y"; | |||||
| /** */ | |||||
| public static final String FLAG_AUTORESPONSE_NO = "-I-N"; | |||||
| /** */ | |||||
| public static final String FLAG_RECURSION = "-R"; | |||||
| /** */ | |||||
| public static final String FLAG_VERSION = "-V"; | |||||
| /** */ | |||||
| public static final String FLAG_VERSION_DATE = "-Vd"; | |||||
| /** */ | |||||
| public static final String FLAG_VERSION_LABEL = "-VL"; | |||||
| /** */ | |||||
| public static final String FLAG_WRITABLE = "-W"; | |||||
| /** */ | |||||
| public static final String VALUE_NO = "-N"; | |||||
| /** */ | |||||
| public static final String VALUE_YES = "-Y"; | |||||
| /** */ | |||||
| public static final String FLAG_QUIET = "-O-"; | |||||
| private String calcDate(String fromDate, int numDays) throws ParseException { | |||||
| String toDate = null; | |||||
| Date currdate = new Date(); | |||||
| Calendar calend = new GregorianCalendar(); | |||||
| currdate = m_DateFormat.parse(fromDate); | |||||
| calend.setTime(currdate); | |||||
| calend.add(Calendar.DATE, numDays); | |||||
| toDate = m_DateFormat.format(calend.getTime()); | |||||
| return toDate; | |||||
| } | |||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -63,34 +63,25 @@ import org.apache.tools.ant.types.Path; | |||||
| * Based on the VSS Checkin code by Martin Poeschl | * Based on the VSS Checkin code by Martin Poeschl | ||||
| * | * | ||||
| * @author Nigel Magnay | * @author Nigel Magnay | ||||
| * @author Jesse Stockall | |||||
| * | |||||
| * @ant.task name="vssadd" category="scm" | * @ant.task name="vssadd" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSADD extends MSVSS { | public class MSVSSADD extends MSVSS { | ||||
| private String m_LocalPath = null; | |||||
| private boolean m_Recursive = false; | |||||
| private boolean m_Writable = false; | |||||
| private String m_AutoResponse = null; | |||||
| private String m_Comment = "-"; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| protected Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a localPath ... | |||||
| if (getLocalPath() == null) { | |||||
| // first off, make sure that we've got a command and a localPath ... | |||||
| if (getLocalpath() == null) { | |||||
| String msg = "localPath attribute must be set!"; | String msg = "localPath attribute must be set!"; | ||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss Add VSS items [-B] [-C] [-D-] [-H] [-I-] [-K] [-N] [-O] [-R] [-W] [-Y] [-?] | // ss Add VSS items [-B] [-C] [-D-] [-H] [-I-] [-K] [-N] [-O] [-R] [-W] [-Y] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| @@ -98,126 +89,76 @@ public class MSVSSADD extends MSVSS { | |||||
| commandLine.createArgument().setValue(COMMAND_ADD); | commandLine.createArgument().setValue(COMMAND_ADD); | ||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getLocalPath()); | |||||
| commandLine.createArgument().setValue(getLocalpath()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -R | // -R | ||||
| getRecursiveCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getRecursive()); | |||||
| // -W | // -W | ||||
| getWritableCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getWritable()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| // -C | // -C | ||||
| commandLine.createArgument().setValue("-C" + getComment()); | |||||
| commandLine.createArgument().setValue(getComment()); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set behaviour recursive or non-recursive | |||||
| * Returns the local path without the flag.; required | |||||
| * @todo See why this returns the local path without the flag. | |||||
| * @return The local path value. | |||||
| */ | */ | ||||
| public void setRecursive(boolean recursive) { | |||||
| m_Recursive = recursive; | |||||
| protected String getLocalpath() { | |||||
| return m_LocalPath; | |||||
| } | } | ||||
| /** | /** | ||||
| * @return the 'recursive' command if the attribute was 'true', otherwise an empty string | |||||
| * Flag to tell the task to recurse down the tree; | |||||
| * optional, default false. | |||||
| * @param recursive The boolean value for recursive. | |||||
| */ | */ | ||||
| public void getRecursiveCommand(Commandline cmd) { | |||||
| if (!m_Recursive) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_RECURSION); | |||||
| } | |||||
| public void setRecursive(boolean recursive) { | |||||
| m_Recursive = recursive; | |||||
| } | } | ||||
| /** | /** | ||||
| * Whether or not to leave added files writable. | |||||
| * Default is <code>false</code>. | |||||
| * Leave checked in files writable? Default: false. | |||||
| * @param argWritable The boolean value for writable. | |||||
| */ | */ | ||||
| public final void setWritable(boolean argWritable) { | public final void setWritable(boolean argWritable) { | ||||
| m_Writable = argWritable; | m_Writable = argWritable; | ||||
| } | } | ||||
| /** | /** | ||||
| * The 'make writable' command if the attribute was <code>true</code>, | |||||
| * otherwise an empty string. | |||||
| * Set the autoresponce behaviour; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void getWritableCommand(Commandline cmd) { | |||||
| if (!m_Writable) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_WRITABLE); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| */ | |||||
| public void setAutoresponse(String response){ | public void setAutoresponse(String response){ | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| /** | /** | ||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| } | |||||
| /** | |||||
| * Sets the comment to apply; optional. | |||||
| * Set the comment to apply; optional. | |||||
| * <p> | * <p> | ||||
| * If this is null or empty, it will be replaced with "-" which | * If this is null or empty, it will be replaced with "-" which | ||||
| * is what SourceSafe uses for an empty comment. | * is what SourceSafe uses for an empty comment. | ||||
| * @param comment The comment to apply in SourceSafe | |||||
| */ | */ | ||||
| public void setComment(String comment) { | public void setComment(String comment) { | ||||
| if (comment.equals("") || comment.equals("null")) { | |||||
| m_Comment = "-"; | |||||
| } else { | |||||
| m_Comment = comment; | |||||
| } | |||||
| m_Comment = comment; | |||||
| } | } | ||||
| /** | /** | ||||
| * Gets the comment to be applied. | |||||
| * @return the comment to be applied. | |||||
| */ | |||||
| public String getComment() { | |||||
| return m_Comment; | |||||
| } | |||||
| /** | |||||
| * Set the local path. | |||||
| * Set the local path; optional. | |||||
| * <p> | |||||
| * This is the path to override the project | |||||
| * working directory. | |||||
| * @param localPath The path on disk. | |||||
| */ | */ | ||||
| public void setLocalpath(Path localPath) { | public void setLocalpath(Path localPath) { | ||||
| m_LocalPath = localPath.toString(); | m_LocalPath = localPath.toString(); | ||||
| } | } | ||||
| public String getLocalPath() { | |||||
| return m_LocalPath; | |||||
| } | |||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -54,7 +54,6 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.vss; | package org.apache.tools.ant.taskdefs.optional.vss; | ||||
| import java.io.File; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| @@ -63,26 +62,18 @@ import org.apache.tools.ant.types.Path; | |||||
| * Performs CheckIn commands to Microsoft Visual SourceSafe. | * Performs CheckIn commands to Microsoft Visual SourceSafe. | ||||
| * | * | ||||
| * @author Martin Poeschl | * @author Martin Poeschl | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vsscheckin" category="scm" | * @ant.task name="vsscheckin" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSCHECKIN extends MSVSS { | public class MSVSSCHECKIN extends MSVSS { | ||||
| private String m_LocalPath = null; | |||||
| private boolean m_Recursive = false; | |||||
| private boolean m_Writable = false; | |||||
| private String m_AutoResponse = null; | |||||
| private String m_Comment = "-"; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| protected Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir ... | // first off, make sure that we've got a command and a vssdir ... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| @@ -90,8 +81,6 @@ public class MSVSSCHECKIN extends MSVSS { | |||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss Checkin VSS items [-H] [-C] [-I-] [-N] [-O] [-R] [-W] [-Y] [-?] | // ss Checkin VSS items [-H] [-C] [-I-] [-N] [-O] [-R] [-W] [-Y] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| @@ -101,150 +90,67 @@ public class MSVSSCHECKIN extends MSVSS { | |||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -GL | // -GL | ||||
| getLocalpathCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLocalpath()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -R | // -R | ||||
| getRecursiveCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getRecursive()); | |||||
| // -W | // -W | ||||
| getWritableCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getWritable()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| // -C | // -C | ||||
| commandLine.createArgument().setValue("-C" + getComment()); | |||||
| commandLine.createArgument().setValue(getComment()); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the local path. | |||||
| * Set the local path; optional. | |||||
| * <p> | |||||
| * This is the path to override the project | |||||
| * working directory. | |||||
| * @param localPath The path on disk. | |||||
| */ | */ | ||||
| public void setLocalpath(Path localPath) { | public void setLocalpath(Path localPath) { | ||||
| m_LocalPath = localPath.toString(); | m_LocalPath = localPath.toString(); | ||||
| } | } | ||||
| /** | |||||
| * Builds and returns the -GL flag command if required. | |||||
| * <p> | |||||
| * The localpath is created if it didn't exist | |||||
| */ | |||||
| public void getLocalpathCommand(Commandline cmd) { | |||||
| if (m_LocalPath == null) { | |||||
| return; | |||||
| } else { | |||||
| // make sure m_LocalDir exists, create it if it doesn't | |||||
| File dir = getProject().resolveFile(m_LocalPath); | |||||
| if (!dir.exists()) { | |||||
| boolean done = dir.mkdirs(); | |||||
| if (!done) { | |||||
| String msg = "Directory " + m_LocalPath | |||||
| + " creation was not " | |||||
| + "succesful for an unknown reason"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| getProject().log("Created dir: " + dir.getAbsolutePath()); | |||||
| } | |||||
| cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR | |||||
| + m_LocalPath); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Flag to tell the task to recurse down the tree; | * Flag to tell the task to recurse down the tree; | ||||
| * optional, default false. | * optional, default false. | ||||
| * @param recursive The boolean value for recursive. | |||||
| */ | */ | ||||
| public void setRecursive(boolean recursive) { | public void setRecursive(boolean recursive) { | ||||
| m_Recursive = recursive; | m_Recursive = recursive; | ||||
| } | } | ||||
| /** | /** | ||||
| * the 'recursive' command if the attribute was 'true', otherwise an empty string | |||||
| */ | |||||
| public void getRecursiveCommand(Commandline cmd) { | |||||
| if (!m_Recursive) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_RECURSION); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Whether or not to leave checked in files writable. | |||||
| * Default is <code>false</code>. | |||||
| * Sets behaviour, unset the READ-ONLY flag on files checkedin to VSS.; optional | |||||
| * @param argWritable The boolean value for writable. | |||||
| */ | */ | ||||
| public final void setWritable(boolean argWritable) { | public final void setWritable(boolean argWritable) { | ||||
| m_Writable = argWritable; | m_Writable = argWritable; | ||||
| } | } | ||||
| /** | /** | ||||
| * The 'make writable' command if the attribute was <code>true</code>, | |||||
| * otherwise an empty string. | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void getWritableCommand(Commandline cmd) { | |||||
| if (!m_Writable) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_WRITABLE); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| */ | |||||
| public void setAutoresponse(String response){ | public void setAutoresponse(String response){ | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the comment to apply; optional. | |||||
| * Sets the comment to apply in SourceSafe.; optional. | |||||
| * <p> | * <p> | ||||
| * If this is null or empty, it will be replaced with "-" which | * If this is null or empty, it will be replaced with "-" which | ||||
| * is what SourceSafe uses for an empty comment. | * is what SourceSafe uses for an empty comment. | ||||
| * @param comment The comment to apply in SourceSafe | |||||
| */ | */ | ||||
| public void setComment(String comment) { | public void setComment(String comment) { | ||||
| if (comment.equals("") || comment.equals("null")) { | |||||
| m_Comment = "-"; | |||||
| } else { | |||||
| m_Comment = comment; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the comment to be applied. | |||||
| * @return the comment to be applied. | |||||
| */ | |||||
| public String getComment() { | |||||
| return m_Comment; | |||||
| m_Comment = comment; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -54,37 +54,28 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.vss; | package org.apache.tools.ant.taskdefs.optional.vss; | ||||
| import java.io.File; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| /** | /** | ||||
| * Performs CheckOut commands to Microsoft Visual SourceSafe. | * Performs CheckOut commands to Microsoft Visual SourceSafe. | ||||
| * <p>If you specify two or more attributes from version, date and | |||||
| * <p>If you specify two or more attributes from version, date and | |||||
| * label only one will be used in the order version, date, label.</p> | * label only one will be used in the order version, date, label.</p> | ||||
| * | |||||
| * @author Martin Poeschl | * @author Martin Poeschl | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vsscheckout" category="scm" | * @ant.task name="vsscheckout" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSCHECKOUT extends MSVSS { | public class MSVSSCHECKOUT extends MSVSS { | ||||
| private String m_LocalPath = null; | |||||
| private boolean m_Recursive = false; | |||||
| private String m_Version = null; | |||||
| private String m_Date = null; | |||||
| private String m_Label = null; | |||||
| private String m_AutoResponse = null; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| protected Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir ... | // first off, make sure that we've got a command and a vssdir ... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| @@ -92,8 +83,6 @@ public class MSVSSCHECKOUT extends MSVSS { | |||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss Checkout VSS items [-G] [-C] [-H] [-I-] [-N] [-O] [-R] [-V] [-Y] [-?] | // ss Checkout VSS items [-G] [-C] [-H] [-I-] [-N] [-O] [-R] [-V] [-Y] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| @@ -103,160 +92,70 @@ public class MSVSSCHECKOUT extends MSVSS { | |||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -GL | // -GL | ||||
| getLocalpathCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLocalpath()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -R | // -R | ||||
| getRecursiveCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getRecursive()); | |||||
| // -V | // -V | ||||
| getVersionCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getVersion()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the local path. | |||||
| * Set the local path; optional. | |||||
| * <p> | |||||
| * This is the path to override the project | |||||
| * working directory. | |||||
| * @param localPath The path on disk. | |||||
| */ | */ | ||||
| public void setLocalpath(Path localPath) { | public void setLocalpath(Path localPath) { | ||||
| m_LocalPath = localPath.toString(); | m_LocalPath = localPath.toString(); | ||||
| } | } | ||||
| /** | |||||
| * Builds and returns the -GL flag command if required. | |||||
| * <p> | |||||
| * The localpath is created if it didn't exist | |||||
| */ | |||||
| public void getLocalpathCommand(Commandline cmd) { | |||||
| if (m_LocalPath == null) { | |||||
| return; | |||||
| } else { | |||||
| // make sure m_LocalDir exists, create it if it doesn't | |||||
| File dir = getProject().resolveFile(m_LocalPath); | |||||
| if (!dir.exists()) { | |||||
| boolean done = dir.mkdirs(); | |||||
| if (!done) { | |||||
| String msg = "Directory " + m_LocalPath + " creation was not " + | |||||
| "succesful for an unknown reason"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| getProject().log("Created dir: " + dir.getAbsolutePath()); | |||||
| } | |||||
| cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR + m_LocalPath); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Flag to tell the task to recurse down the tree; | * Flag to tell the task to recurse down the tree; | ||||
| * optional, default false. | * optional, default false. | ||||
| * @param recursive The boolean value for recursive. | |||||
| */ | */ | ||||
| public void setRecursive(boolean recursive) { | public void setRecursive(boolean recursive) { | ||||
| m_Recursive = recursive; | m_Recursive = recursive; | ||||
| } | } | ||||
| /** | /** | ||||
| * the 'recursive' command if the attribute was 'true', otherwise an empty string | |||||
| */ | |||||
| public void getRecursiveCommand(Commandline cmd) { | |||||
| if (!m_Recursive) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_RECURSION); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Set the version to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * Sets the stored version string.; optional. | |||||
| * @param version The version to checkout. | |||||
| */ | */ | ||||
| public void setVersion(String version) { | public void setVersion(String version) { | ||||
| if (version.equals("") || version.equals("null")) { | |||||
| m_Version = null; | |||||
| } else { | |||||
| m_Version = version; | |||||
| } | |||||
| m_Version = version; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the date to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * Sets the stored date string.; optional. | |||||
| * @param date The date to checkout. | |||||
| */ | */ | ||||
| public void setDate(String date) { | public void setDate(String date) { | ||||
| if (date.equals("") || date.equals("null")) { | |||||
| m_Date = null; | |||||
| } else { | |||||
| m_Date = date; | |||||
| } | |||||
| m_Date = date; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the label to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * Sets the label to apply in SourceSafe.; optional. | |||||
| * @param label The label to apply. | |||||
| */ | */ | ||||
| public void setLabel(String label) { | public void setLabel(String label) { | ||||
| if (label.equals("") || label.equals("null")) { | |||||
| m_Label = null; | |||||
| } else { | |||||
| m_Label = label; | |||||
| } | |||||
| m_Label = label; | |||||
| } | } | ||||
| /** | /** | ||||
| * Simple order of priority. Returns the first specified of version, date, label | |||||
| * If none of these was specified returns "" | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void getVersionCommand(Commandline cmd) { | |||||
| if (m_Version != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION + m_Version); | |||||
| } else if (m_Date != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + m_Date); | |||||
| } else if (m_Label != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_Label); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| */ | |||||
| public void setAutoresponse(String response){ | public void setAutoresponse(String response){ | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| /** | |||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| } | |||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -63,22 +63,18 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * Based on the VSS Checkin code by Martin Poeschl | * Based on the VSS Checkin code by Martin Poeschl | ||||
| * | * | ||||
| * @author Nigel Magnay | * @author Nigel Magnay | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vsscp" category="scm" | * @ant.task name="vsscp" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSCP extends MSVSS { | public class MSVSSCP extends MSVSS { | ||||
| private String m_AutoResponse = null; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| protected Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir ... | // first off, make sure that we've got a command and a vssdir ... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| @@ -86,8 +82,6 @@ public class MSVSSCP extends MSVSS { | |||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss CP VSS items [-H] [-I-] [-Y] [-?] | // ss CP VSS items [-H] [-I-] [-Y] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| @@ -95,49 +89,22 @@ public class MSVSSCP extends MSVSS { | |||||
| commandLine.createArgument().setValue(COMMAND_CP); | commandLine.createArgument().setValue(COMMAND_CP); | ||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | |||||
| commandLine.createArgument().setValue(getVsspath()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| } | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| */ | |||||
| public void setAutoresponse(String response) { | |||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| public void setAutoresponse(String response) { | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -92,7 +92,7 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * <td>failOnError</td> | * <td>failOnError</td> | ||||
| * <td>fail if there is an error creating the project (true by default)</td> | * <td>fail if there is an error creating the project (true by default)</td> | ||||
| * <td>No</td> | * <td>No</td> | ||||
| * </tr> | |||||
| * </tr> | |||||
| * <tr> | * <tr> | ||||
| * <td>autoresponse</td> | * <td>autoresponse</td> | ||||
| * <td>What to respond with (sets the -I option). By default, -I- is | * <td>What to respond with (sets the -I option). By default, -I- is | ||||
| @@ -104,34 +104,22 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * <td>The comment to use for this label. Empty or '-' for no comment.</td> | * <td>The comment to use for this label. Empty or '-' for no comment.</td> | ||||
| * <td>No</td> | * <td>No</td> | ||||
| * </tr> | * </tr> | ||||
| * | |||||
| * | |||||
| * </table> | * </table> | ||||
| * | * | ||||
| * @author Gary S. Weaver | * @author Gary S. Weaver | ||||
| * @author Jesse Stockall | |||||
| * | |||||
| * @ant.task name="vsscreate" category="scm" | * @ant.task name="vsscreate" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSCREATE extends MSVSS { | public class MSVSSCREATE extends MSVSS { | ||||
| private String m_AutoResponse = null; | |||||
| private String m_Comment = "-"; | |||||
| private boolean m_Quiet = false; | |||||
| /** | |||||
| * True by default since most of the time we won't be trying to create a | |||||
| * project with the same name more than once. | |||||
| */ | |||||
| private boolean m_FailOnError = true; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * @throws BuildException if the task fails. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir... | // first off, make sure that we've got a command and a vssdir... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| @@ -139,9 +127,8 @@ public class MSVSSCREATE extends MSVSS { | |||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | |||||
| // build the command line from what we got | |||||
| // the format is: | |||||
| // ss Create VSS items [-C] [-H] [-I-] [-N] [-O] [-S] [-Y] [-?] | // ss Create VSS items [-C] [-H] [-I-] [-N] [-O] [-S] [-Y] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| commandLine.setExecutable(getSSCommand()); | commandLine.setExecutable(getSSCommand()); | ||||
| @@ -149,108 +136,53 @@ public class MSVSSCREATE extends MSVSS { | |||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -C | // -C | ||||
| commandLine.createArgument().setValue("-C" + getComment()); | |||||
| commandLine.createArgument().setValue(getComment()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -O- | // -O- | ||||
| getQuietCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getQuiet()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| result = run(commandLine); | |||||
| if (result != 0 && m_FailOnError) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Sets the comment to apply in SourceSafe. | |||||
| * Sets the comment to apply in SourceSafe.; optional. | |||||
| * <p> | * <p> | ||||
| * If this is null or empty, it will be replaced with "-" which | * If this is null or empty, it will be replaced with "-" which | ||||
| * is what SourceSafe uses for an empty comment. | * is what SourceSafe uses for an empty comment. | ||||
| * @param comment the comment to apply in SourceSafe | |||||
| * @param comment The comment to apply in SourceSafe | |||||
| */ | */ | ||||
| public void setComment(String comment) { | public void setComment(String comment) { | ||||
| if (comment.equals("") || comment.equals("null")) { | |||||
| m_Comment = "-"; | |||||
| } else { | |||||
| m_Comment = comment; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the comment to be applied. | |||||
| * @return the comment to be applied. | |||||
| */ | |||||
| public String getComment() { | |||||
| return m_Comment; | |||||
| m_Comment = comment; | |||||
| } | } | ||||
| /** | /** | ||||
| * Sets/clears quiet mode; optional, default false. | * Sets/clears quiet mode; optional, default false. | ||||
| * @param quiet whether or not command should be run in "quiet mode". | |||||
| * @param quiet The boolean value for quiet. | |||||
| */ | */ | ||||
| public final void setQuiet (boolean quiet) { | public final void setQuiet (boolean quiet) { | ||||
| this.m_Quiet = quiet; | |||||
| } | |||||
| /** | |||||
| * Modify the commandline to add the quiet argument. | |||||
| * @param cmd the commandline to modify. | |||||
| */ | |||||
| public void getQuietCommand (Commandline cmd) { | |||||
| if (m_Quiet) { | |||||
| cmd.createArgument().setValue (FLAG_QUIET); | |||||
| } | |||||
| m_Quiet = quiet; | |||||
| } | } | ||||
| /** | /** | ||||
| * Sets whether task should fail if there is an error creating the project; | |||||
| * optional, default true. | |||||
| * @param failOnError true if task should fail if there is an error creating | |||||
| * the project. | |||||
| * Sets behaviour, whether task should fail if there is an error creating | |||||
| * the project.; optional. | |||||
| * @param failOnError True if task should fail on any error. | |||||
| */ | */ | ||||
| public final void setFailOnError (boolean failOnError) { | public final void setFailOnError (boolean failOnError) { | ||||
| this.m_FailOnError = failOnError; | |||||
| m_FailOnError = failOnError; | |||||
| } | } | ||||
| /** | /** | ||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| * @param response the response. | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void setAutoresponse(String response) { | public void setAutoresponse(String response) { | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| * @param cmd the commandline to modify with the autoresponse. | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,115 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs.optional.vss; | |||||
| /** | |||||
| * Holds all the constants for the VSS tasks. | |||||
| * | |||||
| * @author Jesse Stockall | |||||
| */ | |||||
| public interface MSVSSConstants { | |||||
| /** Constant for the thing to execute */ | |||||
| String SS_EXE = "ss"; | |||||
| /** Dollar Sigh to prefix the project path */ | |||||
| String PROJECT_PREFIX = "$"; | |||||
| /** The 'CP' command */ | |||||
| String COMMAND_CP = "CP"; | |||||
| /** The 'Add' command */ | |||||
| String COMMAND_ADD = "Add"; | |||||
| /** The 'Get' command */ | |||||
| String COMMAND_GET = "Get"; | |||||
| /** The 'Checkout' command */ | |||||
| String COMMAND_CHECKOUT = "Checkout"; | |||||
| /** The 'Checkin' command */ | |||||
| String COMMAND_CHECKIN = "Checkin"; | |||||
| /** The 'Label' command */ | |||||
| String COMMAND_LABEL = "Label"; | |||||
| /** The 'History' command */ | |||||
| String COMMAND_HISTORY = "History"; | |||||
| /** The 'Create' command */ | |||||
| String COMMAND_CREATE = "Create"; | |||||
| /** The brief style flag */ | |||||
| String STYLE_BRIEF = "brief"; | |||||
| /** The codediff style flag */ | |||||
| String STYLE_CODEDIFF = "codediff"; | |||||
| /** The nofile style flag */ | |||||
| String STYLE_NOFILE = "nofile"; | |||||
| /** The default style flag */ | |||||
| String STYLE_DEFAULT = "default"; | |||||
| String FLAG_LOGIN = "-Y"; | |||||
| String FLAG_OVERRIDE_WORKING_DIR = "-GL"; | |||||
| String FLAG_AUTORESPONSE_DEF = "-I-"; | |||||
| String FLAG_AUTORESPONSE_YES = "-I-Y"; | |||||
| String FLAG_AUTORESPONSE_NO = "-I-N"; | |||||
| String FLAG_RECURSION = "-R"; | |||||
| String FLAG_VERSION = "-V"; | |||||
| String FLAG_VERSION_DATE = "-Vd"; | |||||
| String FLAG_VERSION_LABEL = "-VL"; | |||||
| String FLAG_WRITABLE = "-W"; | |||||
| String VALUE_NO = "-N"; | |||||
| String VALUE_YES = "-Y"; | |||||
| String FLAG_QUIET = "-O-"; | |||||
| String FLAG_COMMENT = "-C"; | |||||
| String FLAG_LABEL = "-L"; | |||||
| String VALUE_FROMDATE = "~d"; | |||||
| String VALUE_FROMLABEL = "~L"; | |||||
| String FLAG_OUTPUT = "-O"; | |||||
| String FLAG_USER = "-U"; | |||||
| String FLAG_NO_FILE = "-F-"; | |||||
| String FLAG_BRIEF = "-B"; | |||||
| String FLAG_CODEDIFF = "-D"; | |||||
| } | |||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -125,37 +125,18 @@ import org.apache.tools.ant.types.Path; | |||||
| * | * | ||||
| * @author Craig Cottingham | * @author Craig Cottingham | ||||
| * @author Andrew Everitt | * @author Andrew Everitt | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vssget" category="scm" | * @ant.task name="vssget" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSGET extends MSVSS { | public class MSVSSGET extends MSVSS { | ||||
| private String m_LocalPath = null; | |||||
| private boolean m_Recursive = false; | |||||
| private boolean m_Writable = false; | |||||
| private String m_Version = null; | |||||
| private String m_Date = null; | |||||
| private String m_Label = null; | |||||
| private String m_AutoResponse = null; | |||||
| private boolean m_Quiet = false; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir ... | |||||
| if (getVsspath() == null) { | |||||
| String msg = "vsspath attribute must be set!"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss Get VSS items [-G] [-H] [-I-] [-N] [-O] [-R] [-V] [-W] [-Y] [-?] | // ss Get VSS items [-G] [-H] [-I-] [-N] [-O] [-R] [-V] [-W] [-Y] [-?] | ||||
| @@ -163,217 +144,96 @@ public class MSVSSGET extends MSVSS { | |||||
| commandLine.setExecutable(getSSCommand()); | commandLine.setExecutable(getSSCommand()); | ||||
| commandLine.createArgument().setValue(COMMAND_GET); | commandLine.createArgument().setValue(COMMAND_GET); | ||||
| // VSS items | |||||
| if (getVsspath() == null) { | |||||
| throw new BuildException("vsspath attribute must be set!", getLocation()); | |||||
| } | |||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -GL | // -GL | ||||
| getLocalpathCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLocalpath()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -O- | // -O- | ||||
| getQuietCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getQuiet()); | |||||
| // -R | // -R | ||||
| getRecursiveCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getRecursive()); | |||||
| // -V | // -V | ||||
| getVersionCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getVersion()); | |||||
| // -W | // -W | ||||
| getWritableCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getWritable()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Override the working directory and get to the specified path; optional. | |||||
| * Set the local path; optional. | |||||
| * <p> | |||||
| * This is the path to override the project | |||||
| * working directory. | |||||
| * @param localPath The path on disk. | |||||
| */ | */ | ||||
| public void setLocalpath(Path localPath) { | public void setLocalpath(Path localPath) { | ||||
| m_LocalPath = localPath.toString(); | m_LocalPath = localPath.toString(); | ||||
| } | } | ||||
| /** | |||||
| * Builds and returns the -GL flag command if required. | |||||
| * <p> | |||||
| * The localpath is created if it didn't exist | |||||
| */ | |||||
| public void getLocalpathCommand(Commandline cmd) { | |||||
| if (m_LocalPath == null) { | |||||
| return; | |||||
| } else { | |||||
| // make sure m_LocalDir exists, create it if it doesn't | |||||
| File dir = getProject().resolveFile(m_LocalPath); | |||||
| if (!dir.exists()) { | |||||
| boolean done = dir.mkdirs(); | |||||
| if (!done) { | |||||
| String msg = "Directory " + m_LocalPath + " creation was not " + | |||||
| "successful for an unknown reason"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| getProject().log("Created dir: " + dir.getAbsolutePath()); | |||||
| } | |||||
| cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR + m_LocalPath); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Flag to tell the task to recurse down the tree; | * Flag to tell the task to recurse down the tree; | ||||
| * optional, default false. | * optional, default false. | ||||
| * @param recursive The boolean value for recursive. | |||||
| */ | */ | ||||
| public void setRecursive(boolean recursive) { | |||||
| public final void setRecursive(boolean recursive) { | |||||
| m_Recursive = recursive; | m_Recursive = recursive; | ||||
| } | } | ||||
| /** | /** | ||||
| * the 'recursive' command if the attribute was 'true', otherwise an empty string | |||||
| */ | |||||
| public void getRecursiveCommand(Commandline cmd) { | |||||
| if (!m_Recursive) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_RECURSION); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Flag to suppress output when true ; false by default. | |||||
| * Sets/clears quiet mode; optional, default false. | |||||
| * @param quiet The boolean value for quiet. | |||||
| */ | */ | ||||
| public final void setQuiet (boolean quiet) { | public final void setQuiet (boolean quiet) { | ||||
| this.m_Quiet = quiet; | |||||
| } | |||||
| public void getQuietCommand (Commandline cmd) { | |||||
| if (m_Quiet) { | |||||
| cmd.createArgument().setValue (FLAG_QUIET); | |||||
| } | |||||
| m_Quiet = quiet; | |||||
| } | } | ||||
| /** | /** | ||||
| * make fetched files writable; optional, default false. | |||||
| * Sets behaviour, unset the READ-ONLY flag on files retrieved from VSS.; optional | |||||
| * @param argWritable The boolean value for writable. | |||||
| */ | */ | ||||
| public final void setWritable(boolean argWritable) { | public final void setWritable(boolean argWritable) { | ||||
| m_Writable = argWritable; | m_Writable = argWritable; | ||||
| } | } | ||||
| /** | /** | ||||
| * the 'make writable' command if the attribute was 'true', otherwise an empty string | |||||
| */ | |||||
| public void getWritableCommand(Commandline cmd) { | |||||
| if (!m_Writable) { | |||||
| return; | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_WRITABLE); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Set a version number to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * <p> | |||||
| * ORIGINAL COMMENT THAT DOES NOT SEEM AT ALL VALID: | |||||
| * Note we assume that if the supplied string has the value "null" that something | |||||
| * went wrong and that the string value got populated from a null object. This | |||||
| * happens if a ant variable is used e.g. version="${ver_server}" when ver_server | |||||
| * has not been defined to ant! | |||||
| * NO, in this case the version string is "${ver_server}". | |||||
| * @todo fix this | |||||
| * Sets the stored version string.; optional. | |||||
| * @param version The version to get. | |||||
| */ | */ | ||||
| public void setVersion(String version) { | public void setVersion(String version) { | ||||
| if (version.equals("") || version.equals("null")) { | |||||
| m_Version = null; | |||||
| } else { | |||||
| m_Version = version; | |||||
| } | |||||
| m_Version = version; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the date to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * <p> | |||||
| * ORIGINAL COMMENT THAT DOES NOT SEEM AT ALL VALID: | |||||
| * Note we assume that if the supplied string has the value "null" that something | |||||
| * went wrong and that the string value got populated from a null object. This | |||||
| * happens if a ant variable is used e.g. date="${date}" when date | |||||
| * has not been defined to ant! | |||||
| * @todo fix this | |||||
| * Sets the stored date string.; optional. | |||||
| * @param date The date to checkout. | |||||
| */ | */ | ||||
| public void setDate(String date) { | public void setDate(String date) { | ||||
| if (date.equals("") || date.equals("null")) { | |||||
| m_Date = null; | |||||
| } else { | |||||
| m_Date = date; | |||||
| } | |||||
| m_Date = date; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the label to get; | |||||
| * optional, only one of <tt>version</tt>, <tt>label</tt>, or <tt>date</tt> | |||||
| * allowed. | |||||
| * <p> | |||||
| * Note we assume that if the supplied string has the value "null" that something | |||||
| * went wrong and that the string value got populated from a null object. This | |||||
| * happens if a ant variable is used e.g. label="${label_server}" when label_server | |||||
| * has not been defined to ant! | |||||
| * Sets the label to apply in SourceSafe.; optional. | |||||
| * @param label The label to apply. | |||||
| */ | */ | ||||
| public void setLabel(String label) { | public void setLabel(String label) { | ||||
| if (label.equals("") || label.equals("null")) { | |||||
| m_Label = null; | |||||
| } else { | |||||
| m_Label = label; | |||||
| } | |||||
| m_Label = label; | |||||
| } | } | ||||
| /** | /** | ||||
| * Simple order of priority. Returns the first specified of version, date, label. | |||||
| * If none of these was specified returns "" | |||||
| */ | |||||
| public void getVersionCommand(Commandline cmd) { | |||||
| if (m_Version != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION + m_Version); | |||||
| } else if (m_Date != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + m_Date); | |||||
| } else if (m_Label != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_Label); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void setAutoresponse(String response){ | public void setAutoresponse(String response){ | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -69,40 +69,18 @@ import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| * | * | ||||
| * @author Balazs Fejes 2 | * @author Balazs Fejes 2 | ||||
| * @author Glenn_Twiggs@bmc.com | * @author Glenn_Twiggs@bmc.com | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vsshistory" category="scm" | * @ant.task name="vsshistory" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSHISTORY extends MSVSS { | public class MSVSSHISTORY extends MSVSS { | ||||
| private String m_FromDate = null; | |||||
| private String m_ToDate = null; | |||||
| private DateFormat m_DateFormat = | |||||
| DateFormat.getDateInstance(DateFormat.SHORT); | |||||
| private String m_FromLabel = null; | |||||
| private String m_ToLabel = null; | |||||
| private String m_OutputFileName = null; | |||||
| private String m_User = null; | |||||
| private int m_NumDays = Integer.MIN_VALUE; | |||||
| private String m_Style = ""; | |||||
| private boolean m_Recursive = false; | |||||
| public static final String VALUE_FROMDATE = "~d"; | |||||
| public static final String VALUE_FROMLABEL = "~L"; | |||||
| public static final String FLAG_OUTPUT = "-O"; | |||||
| public static final String FLAG_USER = "-U"; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir and a label ... | // first off, make sure that we've got a command and a vssdir and a label ... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| @@ -110,8 +88,6 @@ public class MSVSSHISTORY extends MSVSS { | |||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss History elements [-H] [-L] [-N] [-O] [-V] [-Y] [-#] [-?] | // ss History elements [-H] [-L] [-N] [-O] [-V] [-Y] [-#] [-?] | ||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| @@ -120,97 +96,88 @@ public class MSVSSHISTORY extends MSVSS { | |||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -I- | // -I- | ||||
| commandLine.createArgument().setValue("-I-"); // ignore all errors | |||||
| // -V | |||||
| // Label an existing file or project version | |||||
| getVersionDateCommand(commandLine); | |||||
| getVersionLabelCommand(commandLine); | |||||
| // -R | |||||
| if (m_Recursive) { | |||||
| commandLine.createArgument().setValue(FLAG_RECURSION); | |||||
| } | |||||
| commandLine.createArgument().setValue(FLAG_AUTORESPONSE_DEF); // ignore all errors | |||||
| // -Vd | |||||
| commandLine.createArgument().setValue(getVersionDate()); | |||||
| // -VL | |||||
| commandLine.createArgument().setValue(getVersionLabel()); | |||||
| // -R | |||||
| commandLine.createArgument().setValue(getRecursive()); | |||||
| // -B / -D / -F- | // -B / -D / -F- | ||||
| if (m_Style.length() > 0) { | |||||
| commandLine.createArgument().setValue(m_Style); | |||||
| } | |||||
| commandLine.createArgument().setValue(getStyle()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| // -O | // -O | ||||
| getOutputCommand(commandLine); | |||||
| System.out.println("***: " + commandLine); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| commandLine.createArgument().setValue(getOutput()); | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the Start Date for the Comparison of two versions; optional. | |||||
| * Flag to tell the task to recurse down the tree; | |||||
| * optional, default false. | |||||
| * @param recursive The boolean value for recursive. | |||||
| */ | */ | ||||
| public void setFromDate(String fromDate) { | |||||
| if (fromDate.equals("") || fromDate == null) { | |||||
| m_FromDate = null; | |||||
| } else { | |||||
| m_FromDate = fromDate; | |||||
| } | |||||
| public void setRecursive(boolean recursive) { | |||||
| m_Recursive = recursive; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the Start Label; optional | |||||
| * Sets the username of the user whose changes we would like to see.; optional | |||||
| * @param user The username. | |||||
| */ | */ | ||||
| public void setFromLabel(String fromLabel) { | |||||
| if (fromLabel.equals("") || fromLabel == null) { | |||||
| m_FromLabel = null; | |||||
| } else { | |||||
| m_FromLabel = fromLabel; | |||||
| } | |||||
| public void setUser(String user) { | |||||
| m_User = user; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the End Label ; optional | |||||
| * Set the Start Date for the comparison of two versions in SourceSafe | |||||
| * history.; optional | |||||
| * @param fromDate The start date. | |||||
| */ | */ | ||||
| public void setToLabel(String toLabel) { | |||||
| if (toLabel.equals("") || toLabel == null) { | |||||
| m_ToLabel = null; | |||||
| } else { | |||||
| m_ToLabel = toLabel; | |||||
| } | |||||
| public void setFromDate(String fromDate) { | |||||
| m_FromDate = fromDate; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the End Date for the Comparison of two versions; optional. | * Set the End Date for the Comparison of two versions; optional. | ||||
| * @param toDate The end date. | |||||
| */ | */ | ||||
| public void setToDate(String toDate) { | public void setToDate(String toDate) { | ||||
| if (toDate.equals("") || toDate == null) { | |||||
| m_ToDate = null; | |||||
| } else { | |||||
| m_ToDate = toDate; | |||||
| } | |||||
| m_ToDate = toDate; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the number of days for comparison; | |||||
| * Set the Start Label; optional. | |||||
| * @param fromLabel The start label. | |||||
| */ | |||||
| public void setFromLabel(String fromLabel) { | |||||
| m_FromLabel = fromLabel; | |||||
| } | |||||
| /** | |||||
| * Set the End label; optional. | |||||
| * @param toLabel The end label. | |||||
| */ | |||||
| public void setToLabel(String toLabel) { | |||||
| m_ToLabel = toLabel; | |||||
| } | |||||
| /** | |||||
| * Set the number of days for comparison; | |||||
| * optional. | * optional. | ||||
| * <p> | * <p> | ||||
| * The default value is 2 days. (maybe) | * The default value is 2 days. (maybe) | ||||
| * @param numd The number of days. | |||||
| */ | */ | ||||
| public void setNumdays(int numd) { | public void setNumdays(int numd) { | ||||
| m_NumDays = numd; | m_NumDays = numd; | ||||
| } | } | ||||
| /** | /** | ||||
| * Set the output file name for the history; optional. | * Set the output file name for the history; optional. | ||||
| * @param outfile The output file name. | |||||
| */ | */ | ||||
| public void setOutput(File outfile) { | public void setOutput(File outfile) { | ||||
| if (outfile == null) { | if (outfile == null) { | ||||
| @@ -222,146 +189,52 @@ public class MSVSSHISTORY extends MSVSS { | |||||
| /** | /** | ||||
| * Format of dates in fromDate and toDate; optional. | * Format of dates in fromDate and toDate; optional. | ||||
| * Used when calculating dates with | |||||
| * the numdays attribute. | |||||
| * This string uses the formatting rules of SimpleDateFormat. | |||||
| * Used when calculating dates with | |||||
| * the numdays attribute. | |||||
| * This string uses the formatting rules of SimpleDateFormat. | |||||
| * Defaults to DateFormat.SHORT. | * Defaults to DateFormat.SHORT. | ||||
| * @param dateFormat The date format. | |||||
| */ | */ | ||||
| public void setDateFormat(String dateFormat) { | public void setDateFormat(String dateFormat) { | ||||
| if (!(dateFormat.equals("") || dateFormat == null)) { | |||||
| m_DateFormat = new SimpleDateFormat(dateFormat); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Builds the version date command. | |||||
| * @param cmd the commandline the command is to be added to | |||||
| */ | |||||
| private void getVersionDateCommand(Commandline cmd) throws BuildException { | |||||
| if (m_FromDate == null && m_ToDate == null | |||||
| && m_NumDays == Integer.MIN_VALUE) { | |||||
| return; | |||||
| } | |||||
| if (m_FromDate != null && m_ToDate != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate | |||||
| + VALUE_FROMDATE + m_FromDate); | |||||
| } else if (m_ToDate != null && m_NumDays != Integer.MIN_VALUE) { | |||||
| String startDate = null; | |||||
| try { | |||||
| startDate = calcDate(m_ToDate, m_NumDays); | |||||
| } catch (ParseException ex) { | |||||
| String msg = "Error parsing date: " + m_ToDate; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate + VALUE_FROMDATE + startDate); | |||||
| } else if (m_FromDate != null && m_NumDays != Integer.MIN_VALUE) { | |||||
| String endDate = null; | |||||
| try { | |||||
| endDate = calcDate(m_FromDate, m_NumDays); | |||||
| } catch (ParseException ex) { | |||||
| String msg = "Error parsing date: " + m_FromDate; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + endDate + VALUE_FROMDATE + m_FromDate); | |||||
| } else { | |||||
| if (m_FromDate != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION + VALUE_FROMDATE + m_FromDate); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Builds the version date command. | |||||
| * @param cmd the commandline the command is to be added to | |||||
| */ | |||||
| private void getVersionLabelCommand(Commandline cmd) throws BuildException { | |||||
| if (m_FromLabel == null && m_ToLabel == null) { | |||||
| return; | |||||
| } | |||||
| if (m_FromLabel != null && m_ToLabel != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_ToLabel + VALUE_FROMLABEL + m_FromLabel); | |||||
| } else if (m_FromLabel != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION + VALUE_FROMLABEL + m_FromLabel); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_ToLabel); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Builds the version date command. | |||||
| * @param cmd the commandline the command is to be added to | |||||
| */ | |||||
| private void getOutputCommand(Commandline cmd) { | |||||
| if (m_OutputFileName != null) { | |||||
| cmd.createArgument().setValue(FLAG_OUTPUT + m_OutputFileName); | |||||
| } | |||||
| m_DateFormat = new SimpleDateFormat(dateFormat); | |||||
| } | } | ||||
| /** | |||||
| * Calculates the start date for version comparison. | |||||
| * <p> | |||||
| * Calculates the date numDay days earlier than startdate. | |||||
| */ | |||||
| private String calcDate(String fromDate, int numDays) throws ParseException { | |||||
| String toDate = null; | |||||
| Date currdate = new Date(); | |||||
| Calendar calend = new GregorianCalendar(); | |||||
| currdate = m_DateFormat.parse(fromDate); | |||||
| calend.setTime(currdate); | |||||
| calend.add(Calendar.DATE, numDays); | |||||
| toDate = m_DateFormat.format(calend.getTime()); | |||||
| return toDate; | |||||
| } | |||||
| /** | |||||
| * Flag to tell the task to recurse down the tree; | |||||
| * optional, default false. | |||||
| */ | |||||
| public void setRecursive(boolean recursive) { | |||||
| m_Recursive = recursive; | |||||
| } | |||||
| /** | |||||
| * Name the user whose changes we would like to see; optional | |||||
| */ | |||||
| public void setUser(String user) { | |||||
| m_User = user; | |||||
| } | |||||
| /** | |||||
| /** | |||||
| * Specify the output style; optional. | * Specify the output style; optional. | ||||
| * | * | ||||
| * @param option valid values: | |||||
| * @param attr valid values: | |||||
| * <ul> | * <ul> | ||||
| * <li>brief: -B Display a brief history. | |||||
| * <li>codediff: -D Display line-by-line file changes. | |||||
| * <li>nofile: -F- Do not display individual file updates in the project history. | |||||
| * <li>brief: -B Display a brief history. | |||||
| * <li>codediff: -D Display line-by-line file changes. | |||||
| * <li>nofile: -F- Do not display individual file updates in the project history. | |||||
| * <li>default: No option specified. Display in Source Safe's default format. | * <li>default: No option specified. Display in Source Safe's default format. | ||||
| * </ul> | * </ul> | ||||
| */ | */ | ||||
| public void setStyle(BriefCodediffNofile attr) { | public void setStyle(BriefCodediffNofile attr) { | ||||
| String option = attr.getValue(); | String option = attr.getValue(); | ||||
| if (option.equals("brief")) { | |||||
| m_Style = "-B"; | |||||
| } else if (option.equals("codediff")) { | |||||
| m_Style = "-D"; | |||||
| } else if (option.equals("default")) { | |||||
| if (option.equals(STYLE_BRIEF)) { | |||||
| m_Style = FLAG_BRIEF; | |||||
| } else if (option.equals(STYLE_CODEDIFF)) { | |||||
| m_Style = FLAG_CODEDIFF; | |||||
| } else if (option.equals(STYLE_DEFAULT)) { | |||||
| m_Style = ""; | m_Style = ""; | ||||
| } else if (option.equals("nofile")) { | |||||
| m_Style = "-F-"; | |||||
| } else if (option.equals(STYLE_NOFILE)) { | |||||
| m_Style = FLAG_NO_FILE; | |||||
| } else { | } else { | ||||
| throw new BuildException("Style " + attr + " unknown."); | throw new BuildException("Style " + attr + " unknown."); | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Extention of EnumeratedAttribute to hold the values for style. | |||||
| */ | |||||
| public static class BriefCodediffNofile extends EnumeratedAttribute { | public static class BriefCodediffNofile extends EnumeratedAttribute { | ||||
| public String[] getValues() { | |||||
| return new String[] {"brief", "codediff", "nofile", "default"}; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the list of allowable values. | |||||
| * @return The values. | |||||
| */ | |||||
| public String[] getValues() { | |||||
| return new String[] {STYLE_BRIEF, STYLE_CODEDIFF, STYLE_NOFILE, STYLE_DEFAULT}; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -1,7 +1,7 @@ | |||||
| /* | /* | ||||
| * The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
| * | * | ||||
| * Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||||
| * Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
| * reserved. | * reserved. | ||||
| * | * | ||||
| * Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
| @@ -105,194 +105,86 @@ import org.apache.tools.ant.types.Commandline; | |||||
| * <td>The comment to use for this label. Empty or '-' for no comment.</td> | * <td>The comment to use for this label. Empty or '-' for no comment.</td> | ||||
| * <td>No</td> | * <td>No</td> | ||||
| * </tr> | * </tr> | ||||
| * | |||||
| * | |||||
| * </table> | * </table> | ||||
| * | * | ||||
| * @author Phillip Wells | * @author Phillip Wells | ||||
| * @author Jesse Stockall | |||||
| * | * | ||||
| * @ant.task name="vsslabel" category="scm" | * @ant.task name="vsslabel" category="scm" | ||||
| */ | */ | ||||
| public class MSVSSLABEL extends MSVSS { | public class MSVSSLABEL extends MSVSS { | ||||
| private String m_AutoResponse = null; | |||||
| private String m_Label = null; | |||||
| private String m_Version = null; | |||||
| private String m_Comment = "-"; | |||||
| public static final String FLAG_LABEL = "-L"; | |||||
| /** | /** | ||||
| * Executes the task. | |||||
| * <p> | |||||
| * Builds a command line to execute ss and then calls Exec's run method | |||||
| * to execute the command line. | |||||
| * Builds a command line to execute ss. | |||||
| * @return The constructed commandline. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | |||||
| Commandline buildCmdLine() { | |||||
| Commandline commandLine = new Commandline(); | Commandline commandLine = new Commandline(); | ||||
| int result = 0; | |||||
| // first off, make sure that we've got a command and a vssdir and a label ... | // first off, make sure that we've got a command and a vssdir and a label ... | ||||
| if (getVsspath() == null) { | if (getVsspath() == null) { | ||||
| String msg = "vsspath attribute must be set!"; | |||||
| throw new BuildException(msg, getLocation()); | |||||
| throw new BuildException("vsspath attribute must be set!", getLocation()); | |||||
| } | } | ||||
| if (getLabel() == null) { | |||||
| if (getLabel() == "") { | |||||
| String msg = "label attribute must be set!"; | String msg = "label attribute must be set!"; | ||||
| throw new BuildException(msg, getLocation()); | throw new BuildException(msg, getLocation()); | ||||
| } | } | ||||
| // now look for illegal combinations of things ... | |||||
| // build the command line from what we got the format is | // build the command line from what we got the format is | ||||
| // ss Label VSS items [-C] [-H] [-I-] [-Llabel] [-N] [-O] [-V] [-Y] [-?] | |||||
| // ss Label VSS items [-C] [-H] [-I-] [-Llabel] [-N] [-O] [-V] [-Y] [-?] | |||||
| // as specified in the SS.EXE help | // as specified in the SS.EXE help | ||||
| commandLine.setExecutable(getSSCommand()); | commandLine.setExecutable(getSSCommand()); | ||||
| commandLine.createArgument().setValue(COMMAND_LABEL); | commandLine.createArgument().setValue(COMMAND_LABEL); | ||||
| // VSS items | // VSS items | ||||
| commandLine.createArgument().setValue(getVsspath()); | commandLine.createArgument().setValue(getVsspath()); | ||||
| // -C | // -C | ||||
| commandLine.createArgument().setValue("-C" + getComment()); | |||||
| commandLine.createArgument().setValue(getComment()); | |||||
| // -I- or -I-Y or -I-N | // -I- or -I-Y or -I-N | ||||
| getAutoresponse(commandLine); | |||||
| // -L | |||||
| // Specify the new label on the command line (instead of being prompted) | |||||
| getLabelCommand(commandLine); | |||||
| // -V | |||||
| // Label an existing file or project version | |||||
| getVersionCommand(commandLine); | |||||
| commandLine.createArgument().setValue(getAutoresponse()); | |||||
| // -L Specify the new label on the command line (instead of being prompted) | |||||
| commandLine.createArgument().setValue(getLabel()); | |||||
| // -V Label an existing file or project version | |||||
| commandLine.createArgument().setValue(getVersion()); | |||||
| // -Y | // -Y | ||||
| getLoginCommand(commandLine); | |||||
| result = run(commandLine); | |||||
| if (result != 0) { | |||||
| String msg = "Failed executing: " + commandLine.toString(); | |||||
| throw new BuildException(msg, getLocation()); | |||||
| } | |||||
| commandLine.createArgument().setValue(getLogin()); | |||||
| return commandLine; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the label to apply; required. | |||||
| * <p> | |||||
| * Note we assume that if the supplied string has the value "null" that something | |||||
| * went wrong and that the string value got populated from a null object. This | |||||
| * happens if a ant variable is used e.g. label="${label_server}" when label_server | |||||
| * has not been defined to ant! | |||||
| * @todo correct. | |||||
| * Set the label to apply in SourceSafe.; required. | |||||
| * @param label The label to apply. | |||||
| */ | */ | ||||
| public void setLabel(String label) { | public void setLabel(String label) { | ||||
| if (label.equals("") || label.equals("null")) { | |||||
| m_Label = null; | |||||
| } else { | |||||
| m_Label = label; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Builds the version command. | |||||
| * @param cmd the commandline the command is to be added to | |||||
| */ | |||||
| public void getVersionCommand(Commandline cmd) { | |||||
| if (m_Version != null) { | |||||
| cmd.createArgument().setValue(FLAG_VERSION + m_Version); | |||||
| } | |||||
| m_Label = label; | |||||
| } | } | ||||
| /** | /** | ||||
| * Builds the label command. | |||||
| * @param cmd the commandline the command is to be added to | |||||
| */ | |||||
| public void getLabelCommand(Commandline cmd) { | |||||
| if (m_Label != null) { | |||||
| cmd.createArgument().setValue(FLAG_LABEL + m_Label); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Name an existing file or project version to label; optional. | |||||
| * By default the current version is labelled. | |||||
| * <p> | |||||
| * Note we assume that if the supplied string has the value "null" that something | |||||
| * went wrong and that the string value got populated from a null object. This | |||||
| * happens if a ant variable is used e.g. version="${ver_server}" when ver_server | |||||
| * has not been defined to ant! | |||||
| * @todo fix | |||||
| * Set the stored version string.; optional. | |||||
| * @param version The version to label. | |||||
| */ | */ | ||||
| public void setVersion(String version) { | public void setVersion(String version) { | ||||
| if (version.equals("") || version.equals("null")) { | |||||
| m_Version = null; | |||||
| } else { | |||||
| m_Version = version; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Gets the label to be applied. | |||||
| * @return the label to be applied. | |||||
| */ | |||||
| public String getLabel() { | |||||
| return m_Label; | |||||
| m_Version = version; | |||||
| } | } | ||||
| /** | /** | ||||
| * The comment to use for this label; optional. | |||||
| * The comment to use for this label.; optional. | |||||
| * Empty or '-' for no comment. | * Empty or '-' for no comment. | ||||
| * <p> | |||||
| * If this is null or empty, it will be replaced with "-" which | |||||
| * is what SourceSafe uses for an empty comment. | |||||
| *@todo correct | |||||
| * @param comment The comment to apply in SourceSafe | |||||
| */ | */ | ||||
| public void setComment(String comment) { | public void setComment(String comment) { | ||||
| if (comment.equals("") || comment.equals("null")) { | |||||
| m_Comment = "-"; | |||||
| } else { | |||||
| m_Comment = comment; | |||||
| } | |||||
| m_Comment = comment; | |||||
| } | } | ||||
| /** | /** | ||||
| * Gets the comment to be applied. | |||||
| * @return the comment to be applied. | |||||
| */ | |||||
| public String getComment() { | |||||
| return m_Comment; | |||||
| } | |||||
| /** | |||||
| * What to respond with (sets the -I option). By default, -I- is | |||||
| * used; values of Y or N will be appended to this. | |||||
| * Sets the autoresponce behaviour.; optional. | |||||
| * <p> | |||||
| * Valid options are Y and N. | |||||
| * @param response The auto response value. | |||||
| */ | */ | ||||
| public void setAutoresponse(String response){ | public void setAutoresponse(String response){ | ||||
| if (response.equals("") || response.equals("null")) { | |||||
| m_AutoResponse = null; | |||||
| } else { | |||||
| m_AutoResponse = response; | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Checks the value set for the autoResponse. | |||||
| * if it equals "Y" then we return -I-Y | |||||
| * if it equals "N" then we return -I-N | |||||
| * otherwise we return -I | |||||
| */ | |||||
| public void getAutoresponse(Commandline cmd) { | |||||
| if (m_AutoResponse == null) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("Y")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||||
| } else if (m_AutoResponse.equalsIgnoreCase("N")) { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||||
| } else { | |||||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||||
| } // end of else | |||||
| m_AutoResponse = response; | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,458 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 The Apache Software Foundation. All rights | |||||
| * reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in | |||||
| * the documentation and/or other materials provided with the | |||||
| * distribution. | |||||
| * | |||||
| * 3. The end-user documentation included with the redistribution, if | |||||
| * any, must include the following acknowlegement: | |||||
| * "This product includes software developed by the | |||||
| * Apache Software Foundation (http://www.apache.org/)." | |||||
| * Alternately, this acknowlegement may appear in the software itself, | |||||
| * if and wherever such third-party acknowlegements normally appear. | |||||
| * | |||||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
| * Foundation" must not be used to endorse or promote products derived | |||||
| * from this software without prior written permission. For written | |||||
| * permission, please contact apache@apache.org. | |||||
| * | |||||
| * 5. Products derived from this software may not be called "Apache" | |||||
| * nor may "Apache" appear in their names without prior written | |||||
| * permission of the Apache Group. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| * ==================================================================== | |||||
| * | |||||
| * This software consists of voluntary contributions made by many | |||||
| * individuals on behalf of the Apache Software Foundation. For more | |||||
| * information on the Apache Software Foundation, please see | |||||
| * <http://www.apache.org/>. | |||||
| */ | |||||
| package org.apache.tools.ant.taskdefs.optional.vss; | |||||
| import java.io.File; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.Calendar; | |||||
| import java.util.Date; | |||||
| import java.util.TimeZone; | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| import org.apache.tools.ant.Location; | |||||
| import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.taskdefs.Tstamp; | |||||
| import org.apache.tools.ant.types.Commandline; | |||||
| import org.apache.tools.ant.types.Path; | |||||
| /** | |||||
| * Testcase to ensure that command line generation and required attributes are correct. | |||||
| * | |||||
| * @author Jesse Stockall | |||||
| */ | |||||
| public class MSVSSTest extends BuildFileTest { | |||||
| private Project project; | |||||
| private Commandline commandline; | |||||
| private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini"; | |||||
| private static final String VSS_PROJECT_PATH = "/SourceRoot/Project"; | |||||
| private static final String DS_VSS_PROJECT_PATH = "$/SourceRoot/Project"; | |||||
| private static final String VSS_USERNAME = "ant"; | |||||
| private static final String VSS_PASSWORD = "rocks"; | |||||
| private static final String LOCAL_PATH = "testdir"; | |||||
| private static final String SRC_FILE = "Class1.java"; | |||||
| private static final String SRC_LABEL = "label1"; | |||||
| private static final String SRC_COMMENT = "I fixed a bug"; | |||||
| private static final String VERSION = "007"; | |||||
| private static final String DATE = "00-00-00"; | |||||
| private static final String DATE2 = "01-01-01"; | |||||
| private static final String OUTPUT = "output.log"; | |||||
| private static final String SS_DIR = "c:/winnt"; | |||||
| /** | |||||
| * Constructor for the MSVSSTest object | |||||
| * | |||||
| * @param s Test name | |||||
| */ | |||||
| public MSVSSTest(String s) { | |||||
| super(s); | |||||
| } | |||||
| /** | |||||
| * The JUnit setup method | |||||
| * | |||||
| * @throws Exception | |||||
| */ | |||||
| protected void setUp() | |||||
| throws Exception { | |||||
| ; | |||||
| project = new Project(); | |||||
| project.setBasedir("."); | |||||
| } | |||||
| /** | |||||
| * The teardown method for JUnit | |||||
| * | |||||
| * @throws Exception | |||||
| */ | |||||
| protected void tearDown() | |||||
| throws Exception { | |||||
| File file = new File(project.getBaseDir(), LOCAL_PATH); | |||||
| if (file.exists()) { | |||||
| file.delete(); | |||||
| } | |||||
| } | |||||
| /** Tests VSSGet commandline generation. */ | |||||
| public void testGetCommandLine() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_GET, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_OVERRIDE_WORKING_DIR + project.getBaseDir().getAbsolutePath() | |||||
| + File.separator + LOCAL_PATH, MSVSS.FLAG_AUTORESPONSE_DEF, | |||||
| MSVSS.FLAG_RECURSION, MSVSS.FLAG_VERSION + VERSION, MSVSS.FLAG_LOGIN | |||||
| + VSS_USERNAME + "," + VSS_PASSWORD}; | |||||
| // Set up a VSSGet task | |||||
| MSVSSGET vssGet = new MSVSSGET(); | |||||
| vssGet.setProject(project); | |||||
| vssGet.setRecursive(true); | |||||
| vssGet.setLocalpath(new Path(project, LOCAL_PATH)); | |||||
| vssGet.setLogin(VSS_USERNAME + "," + VSS_PASSWORD); | |||||
| vssGet.setVersion(VERSION); | |||||
| vssGet.setQuiet(false); | |||||
| vssGet.setDate(DATE); | |||||
| vssGet.setLabel(SRC_LABEL); | |||||
| vssGet.setVsspath(VSS_PROJECT_PATH); | |||||
| commandline = vssGet.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** Tests VSSGet required attributes. */ | |||||
| public void testGetExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vssget.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** Tests Label commandline generation. */ | |||||
| public void testLabelCommandLine() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_LABEL, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_COMMENT + SRC_COMMENT, MSVSS.FLAG_AUTORESPONSE_YES, | |||||
| MSVSS.FLAG_LABEL + SRC_LABEL, MSVSS.FLAG_VERSION + VERSION, MSVSS.FLAG_LOGIN | |||||
| + VSS_USERNAME + "," + VSS_PASSWORD}; | |||||
| // Set up a VSSLabel task | |||||
| MSVSSLABEL vssLabel = new MSVSSLABEL(); | |||||
| vssLabel.setProject(project); | |||||
| vssLabel.setComment(SRC_COMMENT); | |||||
| vssLabel.setLogin(VSS_USERNAME + "," + VSS_PASSWORD); | |||||
| vssLabel.setVersion(VERSION); | |||||
| vssLabel.setAutoresponse("Y"); | |||||
| vssLabel.setLabel(SRC_LABEL); | |||||
| vssLabel.setVsspath(VSS_PROJECT_PATH); | |||||
| commandline = vssLabel.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSLabel required attributes. | |||||
| */ | |||||
| public void testLabelExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsslabel.1", "some cause", "vsspath attribute must be set!"); | |||||
| expectSpecificBuildException("vsslabel.2", "some cause", "label attribute must be set!"); | |||||
| } | |||||
| /** Tests VSSHistory commandline generation with from label. */ | |||||
| public void testHistoryCommandLine1() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_HISTORY, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_VERSION_LABEL + SRC_LABEL | |||||
| + MSVSS.VALUE_FROMLABEL + SRC_LABEL, MSVSS.FLAG_LOGIN + VSS_USERNAME | |||||
| + "," + VSS_PASSWORD, MSVSS.FLAG_OUTPUT + project.getBaseDir().getAbsolutePath() | |||||
| + File.separator + OUTPUT}; | |||||
| // Set up a VSSHistory task | |||||
| MSVSSHISTORY vssHistory = new MSVSSHISTORY(); | |||||
| vssHistory.setProject(project); | |||||
| vssHistory.setLogin(VSS_USERNAME + "," + VSS_PASSWORD); | |||||
| vssHistory.setFromLabel(SRC_LABEL); | |||||
| vssHistory.setToLabel(SRC_LABEL); | |||||
| vssHistory.setVsspath(VSS_PROJECT_PATH); | |||||
| vssHistory.setRecursive(false); | |||||
| vssHistory.setOutput(new File(project.getBaseDir().getAbsolutePath(), OUTPUT)); | |||||
| commandline = vssHistory.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** Tests VSSHistory commandline generation with from date. */ | |||||
| public void testHistoryCommandLine2() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_HISTORY, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_VERSION_DATE + DATE + MSVSS.VALUE_FROMDATE | |||||
| + DATE2, MSVSS.FLAG_RECURSION, MSVSS.FLAG_LOGIN + VSS_USERNAME + "," + VSS_PASSWORD}; | |||||
| // Set up a VSSHistory task | |||||
| MSVSSHISTORY vssHistory = new MSVSSHISTORY(); | |||||
| vssHistory.setProject(project); | |||||
| vssHistory.setLogin(VSS_USERNAME + "," + VSS_PASSWORD); | |||||
| vssHistory.setFromDate(DATE2); | |||||
| vssHistory.setToDate(DATE); | |||||
| vssHistory.setVsspath(VSS_PROJECT_PATH); | |||||
| vssHistory.setRecursive(true); | |||||
| commandline = vssHistory.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** Tests VSSHistory commandline generation with date calculation. */ | |||||
| public void testHistoryCommandLine3() { | |||||
| // Set up a Timestamp | |||||
| Tstamp tstamp = new Tstamp(); | |||||
| Location location = new Location("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| tstamp.setLocation(location); | |||||
| tstamp.setProject(project); | |||||
| Tstamp.CustomFormat format = tstamp.createFormat(); | |||||
| format.setProperty("today"); | |||||
| format.setPattern("HH:mm:ss z"); | |||||
| format.setTimezone("GMT"); | |||||
| Date date = Calendar.getInstance().getTime(); | |||||
| format.execute(project, date, location); | |||||
| String today = project.getProperty("today"); | |||||
| // Get today's date | |||||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z"); | |||||
| sdf.setTimeZone( TimeZone.getTimeZone("GMT") ); | |||||
| String expected = sdf.format(date); | |||||
| // Set up a VSSHistory task | |||||
| MSVSSHISTORY vssHistory = new MSVSSHISTORY(); | |||||
| vssHistory.setProject(project); | |||||
| vssHistory.setLogin(VSS_USERNAME); | |||||
| vssHistory.setToDate(today); | |||||
| vssHistory.setVsspath(VSS_PROJECT_PATH); | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_HISTORY, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_VERSION_DATE + expected, MSVSS.FLAG_LOGIN + VSS_USERNAME}; | |||||
| commandline = vssHistory.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Tests VSSHistory required attributes. | |||||
| */ | |||||
| public void testHistoryExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsshistory.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** Tests CheckIn commandline generation. */ | |||||
| public void testCheckinCommandLine() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_CHECKIN, DS_VSS_PROJECT_PATH, | |||||
| MSVSS.FLAG_AUTORESPONSE_NO, MSVSS.FLAG_WRITABLE, MSVSS.FLAG_LOGIN + VSS_USERNAME, | |||||
| MSVSS.FLAG_COMMENT + SRC_COMMENT}; | |||||
| // Set up a VSSCheckIn task | |||||
| MSVSSCHECKIN vssCheckin = new MSVSSCHECKIN(); | |||||
| vssCheckin.setProject(project); | |||||
| vssCheckin.setComment(SRC_COMMENT); | |||||
| vssCheckin.setLogin(VSS_USERNAME); | |||||
| vssCheckin.setAutoresponse("N"); | |||||
| vssCheckin.setVsspath(VSS_PROJECT_PATH); | |||||
| vssCheckin.setWritable(true); | |||||
| commandline = vssCheckin.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSCheckIn required attributes. | |||||
| */ | |||||
| public void testCheckinExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsscheckin.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** Tests CheckOut commandline generation. */ | |||||
| public void testCheckoutCommandLine() { | |||||
| String[] sTestCmdLine = {SS_DIR + File.separator + MSVSS.SS_EXE, MSVSS.COMMAND_CHECKOUT, | |||||
| DS_VSS_PROJECT_PATH, MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_RECURSION, | |||||
| MSVSS.FLAG_VERSION_DATE + DATE, MSVSS.FLAG_LOGIN + VSS_USERNAME}; | |||||
| // Set up a VSSCheckOut task | |||||
| MSVSSCHECKOUT vssCheckout = new MSVSSCHECKOUT(); | |||||
| vssCheckout.setProject(project); | |||||
| vssCheckout.setLogin(VSS_USERNAME); | |||||
| vssCheckout.setVsspath(DS_VSS_PROJECT_PATH); | |||||
| vssCheckout.setRecursive(true); | |||||
| vssCheckout.setDate(DATE); | |||||
| vssCheckout.setSsdir(SS_DIR); | |||||
| commandline = vssCheckout.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSCheckout required attributes. | |||||
| */ | |||||
| public void testCheckoutExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsscheckout.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** Tests Add commandline generation. */ | |||||
| public void testAddCommandLine() { | |||||
| String[] sTestCmdLine = {SS_DIR + File.separator + MSVSS.SS_EXE, MSVSS.COMMAND_ADD, | |||||
| project.getBaseDir().getAbsolutePath() + File.separator + LOCAL_PATH, | |||||
| MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_RECURSION, | |||||
| MSVSS.FLAG_LOGIN + VSS_USERNAME + "," + VSS_PASSWORD, MSVSS.FLAG_COMMENT + "-"}; | |||||
| // Set up a VSSAdd task | |||||
| MSVSSADD vssAdd = new MSVSSADD(); | |||||
| vssAdd.setProject(project); | |||||
| vssAdd.setLogin(VSS_USERNAME + "," + VSS_PASSWORD); | |||||
| vssAdd.setVsspath(DS_VSS_PROJECT_PATH); | |||||
| vssAdd.setRecursive(true); | |||||
| vssAdd.setSsdir(SS_DIR); | |||||
| vssAdd.setWritable(false); | |||||
| vssAdd.setLocalpath(new Path(project, LOCAL_PATH)); | |||||
| commandline = vssAdd.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSAdd required attributes. | |||||
| */ | |||||
| public void testAddExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vssadd.1", "some cause", "localPath attribute must be set!"); | |||||
| } | |||||
| /** Tests CP commandline generation. */ | |||||
| public void testCpCommandLine() { | |||||
| String[] sTestCmdLine = {MSVSS.SS_EXE, MSVSS.COMMAND_CP, | |||||
| DS_VSS_PROJECT_PATH, MSVSS.FLAG_AUTORESPONSE_DEF, MSVSS.FLAG_LOGIN + | |||||
| VSS_USERNAME}; | |||||
| // Set up a VSSCp task | |||||
| MSVSSCP vssCp = new MSVSSCP(); | |||||
| vssCp.setProject(project); | |||||
| vssCp.setLogin(VSS_USERNAME); | |||||
| vssCp.setVsspath(DS_VSS_PROJECT_PATH); | |||||
| commandline = vssCp.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSCP required attributes. | |||||
| */ | |||||
| public void testCpExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsscp.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** Tests Create commandline generation. */ | |||||
| public void testCreateCommandLine() { | |||||
| String[] sTestCmdLine = { MSVSS.SS_EXE, MSVSS.COMMAND_CREATE, | |||||
| DS_VSS_PROJECT_PATH, MSVSS.FLAG_COMMENT + SRC_COMMENT, MSVSS.FLAG_AUTORESPONSE_NO, | |||||
| MSVSS.FLAG_QUIET, MSVSS.FLAG_LOGIN + VSS_USERNAME}; | |||||
| // Set up a VSSCreate task | |||||
| MSVSSCREATE vssCreate = new MSVSSCREATE(); | |||||
| vssCreate.setProject(project); | |||||
| vssCreate.setComment(SRC_COMMENT); | |||||
| vssCreate.setLogin(VSS_USERNAME); | |||||
| vssCreate.setVsspath(DS_VSS_PROJECT_PATH); | |||||
| vssCreate.setFailOnError(true); | |||||
| vssCreate.setAutoresponse("N"); | |||||
| vssCreate.setQuiet(true); | |||||
| commandline = vssCreate.buildCmdLine(); | |||||
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); | |||||
| } | |||||
| /** | |||||
| * Test VSSCreate required attributes. | |||||
| */ | |||||
| public void testCreateExceptions() { | |||||
| configureProject("src/etc/testcases/taskdefs/optional/vss/vss.xml"); | |||||
| expectSpecificBuildException("vsscreate.1", "some cause", "vsspath attribute must be set!"); | |||||
| } | |||||
| /** | |||||
| * Iterate through the generated command line comparing it to reference one. | |||||
| * @param sTestCmdLine The reference command line; | |||||
| * @param sGeneratedCmdLine The generated command line; | |||||
| */ | |||||
| private void checkCommandLines(String[] sTestCmdLine, String[] sGeneratedCmdLine) { | |||||
| int testLength = sTestCmdLine.length; | |||||
| int genLength = sGeneratedCmdLine.length; | |||||
| int genIndex = 0; | |||||
| int testIndex = 0; | |||||
| while (testIndex < testLength) { | |||||
| try { | |||||
| if (sGeneratedCmdLine[genIndex] == "") { | |||||
| genIndex++; | |||||
| continue; | |||||
| } | |||||
| assertEquals("arg # " + testIndex, | |||||
| sTestCmdLine[testIndex], | |||||
| sGeneratedCmdLine[genIndex]); | |||||
| testIndex++; | |||||
| genIndex++; | |||||
| } catch (ArrayIndexOutOfBoundsException aioob) { | |||||
| fail("missing arg " + sTestCmdLine[testIndex]); | |||||
| } | |||||
| } | |||||
| // Count the number of empty strings | |||||
| int cnt = 0; | |||||
| for (int i = 0; i < genLength; i++) { | |||||
| if (sGeneratedCmdLine[i] == "") { | |||||
| cnt++; | |||||
| } | |||||
| } | |||||
| if (genLength - cnt > sTestCmdLine.length) { | |||||
| // We have extra elements | |||||
| fail("extra args"); | |||||
| } | |||||
| } | |||||
| } | |||||