Commit 9d3c3811 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

more editing, added console script timeout and connected Eclipse

pattern matching
parent 992d3ccf
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -328,10 +328,12 @@ public class LaunchCore {
        launch.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, null);
        launch.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, null);
        DebugPlugin.getDefault().getLaunchManager().addLaunch(launch);                                       
        DebugPlugin.getDefault().getLaunchManager().addLaunch(launch);                                       
        VDTRunner runner = VDTLaunchUtil.getRunner();
        VDTRunner runner = VDTLaunchUtil.getRunner();
		int numItem=configuration.getBuildStep();
        runner.run(configuration,
        runner.run(configuration,
        		VDTRunner.renderProcessLabel(configuration.getToolName()), // toolname + (date)
        		VDTRunner.renderProcessLabel(configuration.getToolName()), // toolname + (date)
        		launch,
        		launch,
        		null);
        		null,
        		numItem);
    } // launch()
    } // launch()
        
        
        
        
+48 −14
Original line number Original line Diff line number Diff line
@@ -19,6 +19,8 @@ package com.elphel.vdt.core.launching;
import java.io.IOException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;


import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.CoreException;
@@ -49,6 +51,7 @@ import com.elphel.vdt.core.tools.contexts.BuildParamsItem;
import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.ui.MessageUI;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.VerilogPlugin;
import com.elphel.vdt.veditor.preference.PreferenceStrings;
import com.elphel.vdt.veditor.preference.PreferenceStrings;
import com.sun.net.ssl.internal.www.protocol.https.Handler;


public class VDTConsoleRunner{
public class VDTConsoleRunner{
	private final VDTRunnerConfiguration runConfig;
	private final VDTRunnerConfiguration runConfig;
@@ -67,7 +70,8 @@ public class VDTConsoleRunner{
	public VDTConsoleRunner (VDTRunnerConfiguration runConfig){
	public VDTConsoleRunner (VDTRunnerConfiguration runConfig){
		this.runConfig=runConfig;
		this.runConfig=runConfig;
	}
	}
	private BuildParamsItem getParser( String parserName){
/*
 * 	private BuildParamsItem getParser( String parserName){
		if (parserName==null) return null;
		if (parserName==null) return null;
		BuildParamsItem[] buildParamsItems = runConfig.getArgumentsItemsArray(); // uses already calculated
		BuildParamsItem[] buildParamsItems = runConfig.getArgumentsItemsArray(); // uses already calculated
		if (buildParamsItems==null) return null;
		if (buildParamsItems==null) return null;
@@ -78,6 +82,19 @@ public class VDTConsoleRunner{
		return null;
		return null;
	}
	}


 */
	private int getParserIndex( String parserName){
		if (parserName==null) return -1;
		BuildParamsItem[] buildParamsItems = runConfig.getArgumentsItemsArray(); // uses already calculated
		if (buildParamsItems==null) return -1;
		for (int i=0;i<buildParamsItems.length;i++){
			if (parserName.equals(buildParamsItems[i].getNameAsParser()))
				return i;
		}
		return -1;
	}

	
	public IOConsole runConsole(String consolePrefix
	public IOConsole runConsole(String consolePrefix
			, ILaunch launch
			, ILaunch launch
			, IProgressMonitor monitor 
			, IProgressMonitor monitor 
@@ -124,9 +141,12 @@ public class VDTConsoleRunner{
        process=((ProcessConsole)iCons).getProcess();
        process=((ProcessConsole)iCons).getProcess();
//        IStreamsProxy consoleInStreamProxy= process.getStreamsProxy();
//        IStreamsProxy consoleInStreamProxy= process.getStreamsProxy();
        consoleInStreamProxy= process.getStreamsProxy();
        consoleInStreamProxy= process.getStreamsProxy();
        
        int stderrParserIndex=getParserIndex(buildParamsItem.getStderr());
        BuildParamsItem stderrParser=getParser(buildParamsItem.getStderr()); // re-parses all - why?
        int stdoutParserIndex=getParserIndex(buildParamsItem.getStdout());
        BuildParamsItem stdoutParser=getParser(buildParamsItem.getStdout());
        BuildParamsItem stderrParser=(stderrParserIndex>=0)?runConfig.getArgumentsItemsArray()[stderrParserIndex]:null;
        BuildParamsItem stdoutParser=(stdoutParserIndex>=0)?runConfig.getArgumentsItemsArray()[stdoutParserIndex]:null;
//        BuildParamsItem stderrParser=getParser(buildParamsItem.getStderr()); // re-parses all - why?
//        BuildParamsItem stdoutParser=getParser(buildParamsItem.getStdout());
        
        
        System.out.println("Using parser for stderr: "+((stderrParser!=null)?stderrParser.getNameAsParser():"none")); // actually may be the same as stdout
        System.out.println("Using parser for stderr: "+((stderrParser!=null)?stderrParser.getNameAsParser():"none")); // actually may be the same as stdout
        System.out.println("Using parser for stdout: "+((stdoutParser!=null)?stdoutParser.getNameAsParser():"none"));
        System.out.println("Using parser for stdout: "+((stdoutParser!=null)?stdoutParser.getNameAsParser():"none"));
@@ -145,7 +165,8 @@ public class VDTConsoleRunner{
        	processOut=runner.run(runConfig,
        	processOut=runner.run(runConfig,
        			"OUT for "+iCons.getName(),
        			"OUT for "+iCons.getName(),
        			launch,
        			launch,
        			null); //monitor);
        			null, //monitor
        			stdoutParserIndex);
            stdoutStreamProxy= processOut.getStreamsProxy();
            stdoutStreamProxy= processOut.getStreamsProxy();
//TODO: Add error parsers            
//TODO: Add error parsers            
        }
        }
@@ -160,7 +181,8 @@ public class VDTConsoleRunner{
        	processErr=runner.run(runConfig,
        	processErr=runner.run(runConfig,
        			"ERR for "+iCons.getName(),
        			"ERR for "+iCons.getName(),
        			launch,
        			launch,
        			null); //monitor);
        			null, //monitor);
        			stderrParserIndex);
            stderrStreamProxy= processErr.getStreamsProxy();
            stderrStreamProxy= processErr.getStreamsProxy();
          //TODO: Add error parsers            
          //TODO: Add error parsers            
        }
        }
@@ -229,8 +251,20 @@ public class VDTConsoleRunner{
        } catch (IOException e) {
        } catch (IOException e) {
        	System.out.println("Can not write to outStream of console "+iCons.getName());
        	System.out.println("Can not write to outStream of console "+iCons.getName());
        }
        }
        int timeout=buildParamsItem.getTimeout();
        if ((timeout==0) && (buildParamsItem.getPrompt()==null)) timeout=1;// should specify at least one of timeout or prompt
        if (timeout>0){
        	System.out.println("Setting timeout "+timeout);
        	final int fTimeout = timeout;
        	new Timer().schedule(new TimerTask() {          
        		@Override
        		public void run() {
        			System.out.println(">>Timeout<<");
        			finishConsolescript();
        		}
        	}, fTimeout*1000);
        }
        return iCons;
        return iCons;
		
	}
	}


	
	
+32 −5
Original line number Original line Diff line number Diff line
@@ -26,6 +26,8 @@ import java.util.Date;
import java.util.HashMap;
import java.util.HashMap;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;


import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
//import org.eclipse.core.resources.IProject;
//import org.eclipse.core.resources.IProject;
@@ -36,6 +38,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfiguration;
@@ -78,6 +81,8 @@ import com.elphel.vdt.veditor.preference.PreferenceStrings;








//import com.elphel.vdt.core.Utils;
//import com.elphel.vdt.core.Utils;
import org.eclipse.ui.console.IConsoleListener;
import org.eclipse.ui.console.IConsoleListener;


@@ -137,7 +142,9 @@ public class VDTRunner {
//					renderProcessLabel(runConfig.getToolName()), // toolname + (date)
//					renderProcessLabel(runConfig.getToolName()), // toolname + (date)
			        runConfig.getOriginalConsoleName(),
			        runConfig.getOriginalConsoleName(),
					launch,
					launch,
					monitor);
					monitor,
					numItem
              );


			//Andrey: if there is a single item - launch asynchronously, if more - verify queue is empty
			//Andrey: if there is a single item - launch asynchronously, if more - verify queue is empty
			// will not change
			// will not change
@@ -148,6 +155,8 @@ public class VDTRunner {
				runningBuilds.removeConfiguration(consoleName); 
				runningBuilds.removeConfiguration(consoleName); 
				return;
				return;
			}
			}
			
			
			if (numItem<(argumentsItemsArray.length-1)){ // Not for the last
			if (numItem<(argumentsItemsArray.length-1)){ // Not for the last
				//                IConsoleManager man = ConsolePlugin.getDefault().getConsoleManager(); // debugging
				//                IConsoleManager man = ConsolePlugin.getDefault().getConsoleManager(); // debugging
				//                IConsole[] consoles=(IConsole[]) man.getConsoles();
				//                IConsole[] consoles=(IConsole[]) man.getConsoles();
@@ -191,6 +200,23 @@ public class VDTRunner {
					iCons.firePropertyChange(fiCons,"org.eclipse.jface.text", consoleName, fConsoleName); 
					iCons.firePropertyChange(fiCons,"org.eclipse.jface.text", consoleName, fConsoleName); 
				}
				}
				System.out.println("return - waiting to be awaken");
				System.out.println("return - waiting to be awaken");
		        int timeout=argumentsItemsArray[numItem].getTimeout();
		        if (timeout>0){
		        	final int fTimeout = timeout;
		        	final IProcess fProcess=process;
		        	new Timer().schedule(new TimerTask() {          
		        		@Override
		        		public void run() {
		        			System.out.println(">>Timeout<<");
		        			try {
								fProcess.terminate();
							} catch (DebugException e) {
								System.out.println("Failed to terminate preocess on "+fConsoleName);
							}
		        		}
		        	}, fTimeout*1000);
		        }

				return;
				return;
				
				
			}
			}
@@ -257,13 +283,14 @@ public class VDTRunner {
    		   , String consoleLabel
    		   , String consoleLabel
               , ILaunch launch
               , ILaunch launch
               , IProgressMonitor monitor
               , IProgressMonitor monitor
               , int numItem
               ) throws CoreException
               ) throws CoreException
    {
    {
        if (monitor == null) {
        if (monitor == null) {
            monitor = new NullProgressMonitor();
            monitor = new NullProgressMonitor();
        }
        }
		int numItem=configuration.getBuildStep();
//		int numItem=configuration.getBuildStep();
//        BuildParamsItem buildParamsItem= VDTLaunchUtil.getArguments(configuration.getConfiguration())[numItem];

        BuildParamsItem buildParamsItem = configuration.getArgumentsItemsArray()[numItem]; // uses already calculated
        BuildParamsItem buildParamsItem = configuration.getArgumentsItemsArray()[numItem]; // uses already calculated
        String patternErrors=  combinePatterns(buildParamsItem.getErrors(),  configuration.getPatternErrors()) ;
        String patternErrors=  combinePatterns(buildParamsItem.getErrors(),  configuration.getPatternErrors()) ;
        String patternWarnings=combinePatterns(buildParamsItem.getWarnings(),configuration.getPatternWarnings()) ;
        String patternWarnings=combinePatterns(buildParamsItem.getWarnings(),configuration.getPatternWarnings()) ;
+2 −0
Original line number Original line Diff line number Diff line
@@ -67,6 +67,7 @@ public class CommandLinesNodeReader extends AbstractConditionNodeReader {
        
        
        String stderr  =    XMLConfig.getAttributeValue(node, XMLConfig.CONTEXT_LINEBLOCK_STDERR_ATTR);
        String stderr  =    XMLConfig.getAttributeValue(node, XMLConfig.CONTEXT_LINEBLOCK_STDERR_ATTR);
        String stdout  =    XMLConfig.getAttributeValue(node, XMLConfig.CONTEXT_LINEBLOCK_STDOUT_ATTR);
        String stdout  =    XMLConfig.getAttributeValue(node, XMLConfig.CONTEXT_LINEBLOCK_STDOUT_ATTR);
        String timeout =    XMLConfig.getAttributeValue(node, XMLConfig.CONTEXT_LINEBLOCK_TIMEOUT_ATTR);
        
        
        if(name == null)
        if(name == null)
            throw new ConfigException("Unnamed lines block definition in context '" +
            throw new ConfigException("Unnamed lines block definition in context '" +
@@ -92,6 +93,7 @@ public class CommandLinesNodeReader extends AbstractConditionNodeReader {
                                     interrupt,
                                     interrupt,
                                     stderr,
                                     stderr,
                                     stdout,
                                     stdout,
                                     timeout,
                                     lines,
                                     lines,
                                     deleteLines,
                                     deleteLines,
                                     insertLines);
                                     insertLines);
+1 −0
Original line number Original line Diff line number Diff line
@@ -135,6 +135,7 @@ public class XMLConfig extends Config {
    static final String CONTEXT_LINEBLOCK_INTERRUPT_ATTR ="interrupt";
    static final String CONTEXT_LINEBLOCK_INTERRUPT_ATTR ="interrupt";
    static final String CONTEXT_LINEBLOCK_STDERR_ATTR =   "stderr";
    static final String CONTEXT_LINEBLOCK_STDERR_ATTR =   "stderr";
    static final String CONTEXT_LINEBLOCK_STDOUT_ATTR =   "stdout";
    static final String CONTEXT_LINEBLOCK_STDOUT_ATTR =   "stdout";
    static final String CONTEXT_LINEBLOCK_TIMEOUT_ATTR =  "timeout";
 
 
    static final String CONTEXT_STRINGS_DELETE_TAG = "delete";
    static final String CONTEXT_STRINGS_DELETE_TAG = "delete";
    static final String CONTEXT_STRINGS_INSERT_TAG = "insert";
    static final String CONTEXT_STRINGS_INSERT_TAG = "insert";
Loading