ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ste...@apache.org
Subject cvs commit: ant/src/etc/testcases/taskdefs/optional dotnet.xml
Date Fri, 24 Oct 2003 05:54:23 GMT
stevel      2003/10/23 22:54:23

  Modified:    src/testcases/org/apache/tools/ant/taskdefs/optional Tag:
                        ANT_16_BRANCH DotnetTest.java
               src/main/org/apache/tools/ant/taskdefs/optional/dotnet Tag:
                        ANT_16_BRANCH DotnetCompile.java JSharp.java
                        NetCommand.java
               src/etc/testcases/taskdefs/optional Tag: ANT_16_BRANCH
                        dotnet.xml
  Log:
  Ant1.6 backport of fix for bug#19630; no handling large files. Needs testing on mono! (split
into multple commits as CVS is whining)
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.5.2.1   +8 -0      ant/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java
  
  Index: DotnetTest.java
  ===================================================================
  RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/optional/DotnetTest.java,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- DotnetTest.java	21 Sep 2003 22:29:54 -0000	1.5
  +++ DotnetTest.java	24 Oct 2003 05:54:22 -0000	1.5.2.1
  @@ -157,5 +157,13 @@
       public void testJsharp() throws Exception {
           executeTarget("jsharp");
       }
  +
  +    /**
  +     * test we can handle jsharp (if found)
  +     */
  +    public void testResponseFile() throws Exception {
  +        executeTarget("testCSCresponseFile");
  +    }
  +
   }
   
  
  
  
  No                   revision
  No                   revision
  1.17.2.2  +27 -0     ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java
  
  Index: DotnetCompile.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/DotnetCompile.java,v
  retrieving revision 1.17.2.1
  retrieving revision 1.17.2.2
  diff -u -r1.17.2.1 -r1.17.2.2
  --- DotnetCompile.java	23 Sep 2003 08:29:07 -0000	1.17.2.1
  +++ DotnetCompile.java	24 Oct 2003 05:54:23 -0000	1.17.2.2
  @@ -205,6 +205,11 @@
        */
       protected Vector referenceFilesets = new Vector();
   
  +    /**
  +     * flag to set to to use @file based command cache
  +     */
  +    private boolean useResponseFile = false;
  +    private static final int AUTOMATIC_RESPONSE_FILE_THRESHOLD = 64;
   
       /**
        *  constructor inits everything and set up the search pattern
  @@ -796,6 +801,25 @@
           return "**/*." + getFileExtension();
       }
   
  +    /**
  +     * getter for flag
  +     * @return
  +     */
  +    public boolean isUseResponseFile() {
  +        return useResponseFile;
  +    }
  +
  +    /**
  +     * Flag to turn on response file use; default=false.
  +     * When set the command params are saved to a file and
  +     * this is passed in with @file. The task automatically switches
  +     * to this mode with big commands; this option is here for
  +     * testing and emergencies
  +     * @param useResponseFile
  +     */
  +    public void setUseResponseFile(boolean useResponseFile) {
  +        this.useResponseFile = useResponseFile;
  +    }
   
       /**
        *  do the work by building the command line and then calling it
  @@ -806,6 +830,9 @@
                throws BuildException {
           validate();
           NetCommand command = createNetCommand();
  +        //set up response file options
  +        command.setAutomaticResponseFileThreshold(AUTOMATIC_RESPONSE_FILE_THRESHOLD);
  +        command.setUseResponseFile(useResponseFile);
           //fill in args
           fillInSharedParameters(command);
           addResources(command);
  
  
  
  1.5.2.2   +1 -1      ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java
  
  Index: JSharp.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/JSharp.java,v
  retrieving revision 1.5.2.1
  retrieving revision 1.5.2.2
  diff -u -r1.5.2.1 -r1.5.2.2
  --- JSharp.java	27 Sep 2003 03:00:05 -0000	1.5.2.1
  +++ JSharp.java	24 Oct 2003 05:54:23 -0000	1.5.2.2
  @@ -69,7 +69,7 @@
    *
    * @author Steve Loughran
    * @since ant1.6
  - * @ant.task category="dotnet"
  + * @ant.task category="dotnet" name="jsharpc"
    */
   public class JSharp extends DotnetCompile {
   
  
  
  
  1.25.2.1  +101 -1    ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
  
  Index: NetCommand.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java,v
  retrieving revision 1.25
  retrieving revision 1.25.2.1
  diff -u -r1.25 -r1.25.2.1
  --- NetCommand.java	21 Sep 2003 20:20:03 -0000	1.25
  +++ NetCommand.java	24 Oct 2003 05:54:23 -0000	1.25.2.1
  @@ -65,12 +65,17 @@
   
   import java.io.File;
   import java.io.IOException;
  +import java.io.FileOutputStream;
  +import java.io.PrintWriter;
  +import java.io.BufferedOutputStream;
  +import java.io.FileNotFoundException;
   import java.util.Hashtable;
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.Task;
   import org.apache.tools.ant.DirectoryScanner;
  +import org.apache.tools.ant.util.FileUtils;
   import org.apache.tools.ant.taskdefs.Execute;
   import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
   import org.apache.tools.ant.taskdefs.LogStreamHandler;
  @@ -131,6 +136,21 @@
       private File directory;
   
       /**
  +     * flag to set to to use @file based command cache
  +     */
  +    private boolean useResponseFile=false;
  +
  +    /**
  +     * name of a temp file; may be null
  +     */
  +    private File temporaryCommandFile;
  +
  +    /**
  +     * internal threshold for auto-switch
  +     */
  +    private int automaticResponseFileThreshold = 64;
  +
  +    /**
        *  constructor
        *
        *@param  title        (for logging/errors)
  @@ -232,6 +252,38 @@
       }
   
       /**
  +     * getter
  +     * @return response file state
  +     */
  +    public boolean isUseResponseFile() {
  +        return useResponseFile;
  +    }
  +
  +    /**
  +     * set this to true to always use the response file
  +     * @param useResponseFile
  +     */
  +    public void setUseResponseFile(boolean useResponseFile) {
  +        this.useResponseFile = useResponseFile;
  +    }
  +
  +    /**
  +     * getter for threshold
  +     * @return 0 for disabled, or a threshold for enabling response files
  +     */
  +    public int getAutomaticResponseFileThreshold() {
  +        return automaticResponseFileThreshold;
  +    }
  +
  +    /**
  +     * set threshold for automatically using response files -use 0 for off
  +     * @param automaticResponseFileThreshold
  +     */
  +    public void setAutomaticResponseFileThreshold(int automaticResponseFileThreshold) {
  +        this.automaticResponseFileThreshold = automaticResponseFileThreshold;
  +    }
  +
  +    /**
        *  set up the command sequence..
        */
       protected void prepareExecutor() {
  @@ -272,7 +324,7 @@
                   //in verbose mode we always log stuff
                   logVerbose(commandLine.describeCommand());
               }
  -            executable.setCommandline(commandLine.getCommandline());
  +            setExecutableCommandLine();
               err = executable.execute();
               if (Execute.isFailure(err)) {
                   if (failOnError) {
  @@ -283,6 +335,54 @@
               }
           } catch (IOException e) {
               throw new BuildException(title + " failed: " + e, e, owner.getLocation());
  +        } finally {
  +            if (temporaryCommandFile != null) {
  +                temporaryCommandFile.delete();
  +            }
  +        }
  +    }
  +
  +    /**
  +     * set the executable command line
  +     */
  +    private void setExecutableCommandLine() {
  +
  +        String[] commands = commandLine.getCommandline();
  +        //always trigger file mode if commands are big enough
  +        if (automaticResponseFileThreshold>0 &&
  +                commands.length > automaticResponseFileThreshold) {
  +            useResponseFile = true;
  +        }
  +        if (!useResponseFile || commands.length <= 1) {
  +            //the simple action is to send the command line in as is
  +            executable.setCommandline(commands);
  +        } else {
  +            //but for big operations, we save all the params to a temp file
  +            //and set @tmpfile as the command -then we remember to delete the tempfile
  +            //afterwards
  +            FileOutputStream fos = null;
  +            FileUtils fileUtils = FileUtils.newFileUtils();
  +
  +            temporaryCommandFile = fileUtils.createTempFile("cmd", ".txt", null);
  +            owner.log("Using response file"+temporaryCommandFile,Project.MSG_VERBOSE);
  +
  +            try {
  +                fos = new FileOutputStream(temporaryCommandFile);
  +                PrintWriter out = new PrintWriter(new BufferedOutputStream(fos));
  +                //start at 1 because element 0 is the executable name
  +                for (int i = 1; i < commands.length; ++i) {
  +                    out.println(commands[i]);
  +                }
  +                out.flush();
  +                out.close();
  +            } catch (IOException ex) {
  +                throw new BuildException("saving command stream to " + temporaryCommandFile,
ex);
  +            }
  +
  +            String newCommandLine[] = new String[2];
  +            newCommandLine[0] = commands[0];
  +            newCommandLine[1] = "@" + temporaryCommandFile.getAbsolutePath();
  +            executable.setCommandline(newCommandLine);
           }
       }
   
  
  
  
  No                   revision
  No                   revision
  1.13.2.3  +25 -0     ant/src/etc/testcases/taskdefs/optional/dotnet.xml
  
  Index: dotnet.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/optional/dotnet.xml,v
  retrieving revision 1.13.2.2
  retrieving revision 1.13.2.3
  diff -u -r1.13.2.2 -r1.13.2.3
  --- dotnet.xml	6 Oct 2003 14:25:31 -0000	1.13.2.2
  +++ dotnet.xml	24 Oct 2003 05:54:23 -0000	1.13.2.3
  @@ -101,6 +101,16 @@
         </and>
      </condition>
      <property name="mono.executable" value="mint"/>
  +
  +   <!-- now set a prop of the compiler name to whatever we found --> 
  +   <condition property="cs.compiler" value="csc">
  +      <isset property="csc.found"/>
  +   </condition>   
  +
  +   <condition property="cs.compiler" value="mcs">
  +      <isset property="mcs.found"/>
  +   </condition>   
  +   
     </target>
   
     <target name="init" depends="probe_for_apps">
  @@ -333,6 +343,21 @@
       </jsharpc>
       <exec executable="${jsharp.exe}" failonerror="true" />
     </target>
  +
  +  <target name="testCSCresponseFile" depends="validate_csc" >
  +    <property name="testCSCresponseFile.exe"
  +      location="${build.dir}/testCSCresponseFile.exe" />
  +    <csc
  +      destFile="${testCSCresponseFile.exe}"
  +      targetType="exe"
  +      executable="${cs.compiler}"
  +      useResponseFile="true"
  +      >
  +    </csc>
  +    <available property="app.created" file="${testCSCresponseFile.exe}"/>
  +    <fail unless="app.created">No app ${testCSCresponseFile.exe} created</fail>
  +    <delete file="${testCSCresponseFile.exe}"/>
  +  </target>  
   
   
   </project>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message