public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: rmoseley@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM] master: Add arguments to multiple start/run runs(bz 5500,5501).
Date: Thu, 17 Apr 2008 20:10:00 -0000 [thread overview]
Message-ID: <20080417201003.18700.qmail@sourceware.org> (raw)
The branch, master has been updated
via aae0d7923c971459bbb7019d121f40fb56b58eac (commit)
from f493456a57042ba675656a695cf44ec495fe077f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit aae0d7923c971459bbb7019d121f40fb56b58eac
Author: Rick Moseley <rmoseley@dhcp-215.hsv.redhat.com>
Date: Thu Apr 17 15:07:56 2008 -0500
Add arguments to multiple start/run runs(bz 5500,5501).
* StartRun.java: Add args to multiple runs for start/run
command(bz #5500, 5501).
* TestStartCommand.java: Tests for above.
* TestRunCommand.java: Ditto.
* CLI.java: Fix so output goes to correct queue.
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/hpd/CLI.java | 3 +-
frysk-core/frysk/hpd/ChangeLog | 8 ++
frysk-core/frysk/hpd/StartRun.java | 114 ++++++++++++++++++++++------
frysk-core/frysk/hpd/TestRunCommand.java | 57 +++++++++++++-
frysk-core/frysk/hpd/TestStartCommand.java | 55 ++++++++++++-
5 files changed, 202 insertions(+), 35 deletions(-)
First 500 lines of diff:
diff --git a/frysk-core/frysk/hpd/CLI.java b/frysk-core/frysk/hpd/CLI.java
index 1f30bea..cd02365 100644
--- a/frysk-core/frysk/hpd/CLI.java
+++ b/frysk-core/frysk/hpd/CLI.java
@@ -157,8 +157,7 @@ public class CLI {
while (true) {
try {
attachedLatch.await();
- outWriter.print("Attached to process ");
- outWriter.println(attached);
+ addMessage("Attached to process " + attached, Message.TYPE_NORMAL);
synchronized (this) {
attached = -1;
attachedLatch = null;
diff --git a/frysk-core/frysk/hpd/ChangeLog b/frysk-core/frysk/hpd/ChangeLog
index 029315c..7a78133 100644
--- a/frysk-core/frysk/hpd/ChangeLog
+++ b/frysk-core/frysk/hpd/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-17 Rick Moseley <rmoseley@redhat.com>
+
+ * StartRun.java: Add args to multiple runs for start/run
+ command(bz #5500, 5501).
+ * TestStartCommand.java: Tests for above.
+ * TestRunCommand.java: Ditto.
+ * CLI.java: Fix so output goes to correct queue.
+
2008-04-17 Teresa Thomas <tthomas@redhat.com>
* WatchCommand.java (WatchpointObserver.updateHit):
diff --git a/frysk-core/frysk/hpd/StartRun.java b/frysk-core/frysk/hpd/StartRun.java
index 8046540..c5855a2 100644
--- a/frysk-core/frysk/hpd/StartRun.java
+++ b/frysk-core/frysk/hpd/StartRun.java
@@ -59,7 +59,11 @@ import java.util.List;
*/
abstract class StartRun extends ParameterizedCommand {
- final ArrayList procList = new ArrayList();
+ final ArrayList procTaskDataList = new ArrayList();
+
+ final ArrayList procProcCommand = new ArrayList();
+
+ final ArrayList procProcArgs = new ArrayList();
PTSet userSet;
@@ -134,12 +138,19 @@ abstract class StartRun extends ParameterizedCommand {
if (killProcs(cli)) {
// See if there are any tasks in the current target set
TaskData taskData = null;
- Iterator foo = procList.iterator();
+ int counter = 0;
+ Iterator foo = procTaskDataList.iterator();
while (foo.hasNext()) {
taskData = (TaskData) foo.next();
- Task task = taskData.getTask();
- run(cli, cmd, task.getProc(), runToBreak, taskData.getParentID());
+ String command = (String) procProcCommand.get(counter);
+ String[] argList = (String[]) procProcArgs.get(counter);
+ run(cli, cmd, command, argList, runToBreak,
+ taskData.getParentID());
+ counter++;
}
+ procTaskDataList.clear();
+ procProcArgs.clear();
+ procProcCommand.clear();
return;
}
// Take care of loaded procs
@@ -153,7 +164,8 @@ abstract class StartRun extends ParameterizedCommand {
Task task = taskData.getTask();
if (!cli.loadedProcs.isEmpty() &&
cli.loadedProcs.containsKey(task.getProc())) {
- run(cli, cmd, task.getProc(), runToBreak, taskData.getParentID());
+ run(cli, cmd, task.getProc().getExeFile().getSysRootedPath(),
+ task.getProc().getCmdLine(), runToBreak, taskData.getParentID());
synchronized (cli) {
cli.loadedProcs.remove(task.getProc());
}
@@ -161,7 +173,8 @@ abstract class StartRun extends ParameterizedCommand {
// Take care of core procs
else if (!cli.coreProcs.isEmpty() &&
cli.coreProcs.containsKey(task.getProc())) {
- run(cli, cmd, task.getProc(), runToBreak, taskData.getParentID());
+ run(cli, cmd, task.getProc().getExeFile().getSysRootedPath(),
+ task.getProc().getCmdLine(), runToBreak, taskData.getParentID());
synchronized (cli) {
cli.coreProcs.remove(new Integer(taskData.getParentID()));
}
@@ -191,12 +204,14 @@ abstract class StartRun extends ParameterizedCommand {
Task task = taskData.getTask();
if (task.getProc().getPid() != oldPid &&
task.getProc().getPid() > 0) {
- procList.add(taskData);
+ procTaskDataList.add(taskData);
+ procProcCommand.add(task.getProc().getExeFile().getSysRootedPath());
+ procProcArgs.add(task.getProc().getCmdLine());
cli.execCommand("kill " + task.getProc().getPid() + "\n");
oldPid = task.getProc().getPid();
}
}
- if (procList.isEmpty())
+ if (procTaskDataList.isEmpty())
return false;
return true;
@@ -207,13 +222,14 @@ abstract class StartRun extends ParameterizedCommand {
*
* @param cli is the commandline object
* @param cmd is the command object with all the parameters
- * @param template is the proc to run
+ * @param command is a string containing the command to run
+ * @param argList is a String array with the args from the commandline
* @param runToBreak true if the process is to run to the first break point
* or until it blows up("run" command), false if it should stop
* at the first executable statement("start" command)
* @param taskid the internal target set id that should be used for this process
*/
- private void run(CLI cli, Input cmd, Proc template, boolean runToBreak,
+ private void run(CLI cli, Input cmd, String command, String[] argList, boolean runToBreak,
int taskid) {
Runner runner = new Runner(cli);
String startrun = "";
@@ -224,20 +240,34 @@ abstract class StartRun extends ParameterizedCommand {
switch (cmd.size()) {
+ // No parameters were passed on the commandline, except maybe "--"
case 0:
- cli.addMessage(startrun + " with this command: " +
- asString(template.getCmdLine()),
- Message.TYPE_NORMAL);
- Manager.host.requestCreateAttachedProc(template, runner);
+ /** There is an exception to the rule of cmd.size() being 0 and that
+ * is when a "--" was entered, CLI removes that but the full command line
+ * string in the Input object has it. So, if cmd.size() reports 0
+ * parameters, check to see if actually a "--" was entered. If it was
+ * the user wants no args passed to the process this run.
+ */
+ int index = cmd.getFullCommand().indexOf("--");
+ if (index != -1) {
+ cli.addMessage(startrun + " with this commmand: " +
+ command, Message.TYPE_NORMAL);
+ Manager.host.requestCreateAttachedProc(createArgList(null, argList), runner);
+ }
+ else {
+ String[] temp = new String[1];
+ temp [0] = argList[0];
+ cli.addMessage(startrun + " with this commmand: " +
+ asString("", temp, cmd), Message.TYPE_NORMAL);
+ Manager.host.requestCreateAttachedProc(createArgList(null, temp), runner);
+ }
break;
default:
- String[] args = new String[cmd.size() + 1];
- args[0] = template.getCmdLine()[0];
- for (int i = 1; i < args.length; i++)
- args[i] = cmd.parameter(i - 1);
+ String[] args = createArgList(command, cmd.stringArrayValue());
cli.addMessage(startrun + " with this command: " +
- asString(args), Message.TYPE_NORMAL);
+ asString(command, args, cmd), Message.TYPE_NORMAL);
+
Manager.host.requestCreateAttachedProc(args, runner);
}
while (true) {
@@ -261,18 +291,52 @@ abstract class StartRun extends ParameterizedCommand {
}
/**
+ * createArgList takes a path to the executable and an argument list
+ * and creates a String[] to pass to the create proc method.
+ * @param command is a String with the path to the executable
+ * @param argList is a String[] with an argument list
+ * @return a String[] to pass to Manager.host.createAttachedProc
+ */
+ private String[] createArgList(String command, String[] argList) {
+ // If command is null, the command is at the begging of argList
+ // so we need to do nothing
+ if (command == null)
+ return argList;
+ String[] args = new String[argList.length + 1];
+ args[0] = command;
+ if (args.length > 1) {
+ for (int i = 0; i < argList.length; i++) {
+ if (i == argList.length - 1 && argList.equals("--"))
+ args[i + 1] = "";
+ else
+ args[i + 1] = argList[i];
+ }
+ }
+ return args;
+ }
+ /**
* asString takes an array of arguments and converts it to a single
* string of args as would be appropriate for a commandline
- * @param args is an array of arguments to pass to the process to be run
+ * @param command is the String representing the full command path for
+ * this process
+ * @param argList is a String array of arguments to pass to the process to be run
+ * @param cmd is the current Input command object
* @return a String of args that are to be passed to the process
* on the commandline
*/
- private String asString(String[] args) {
- if (args == null || args.length <= 0)
- return "";
- StringBuffer b = new StringBuffer(args[0]);
- for (int i = 1; i < args.length; i++) {
+ private String asString(String command, String[] argList, Input cmd) {
+ String[] args = cmd.stringArrayValue();
+ // If there were no args on the commandline, see if there were any
+ // on a previous run and if there were, use those
+ if (args == null || args.length <= 0 || args == null)
+ args = argList;
+ StringBuffer b = new StringBuffer(command);
+ // No args entered, return just the command
+ if (args == null)
+ return b.toString();
+ // args were entered, append to the command
+ for (int i = 0; i < args.length; i++) {
b.append(" ");
b.append(args[i]);
}
diff --git a/frysk-core/frysk/hpd/TestRunCommand.java b/frysk-core/frysk/hpd/TestRunCommand.java
index 2b3b8ce..4d91245 100644
--- a/frysk-core/frysk/hpd/TestRunCommand.java
+++ b/frysk-core/frysk/hpd/TestRunCommand.java
@@ -181,8 +181,8 @@ public class TestRunCommand extends TestLib {
e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
"\\[1\\.0\\] Loaded executable file.*");
e.sendCommandExpectPrompt("focus [1.0]", "Creating new HPD notation set.*");
- e.sendCommandExpectPrompt("run", "Attached to process ([0-9]+).*" +
- "running.*" + "Running process ([0-9]+).*");
+ e.sendCommandExpectPrompt("run", "running.*" + "Attached to process ([0-9]+).*" +
+ "Running process ([0-9]+).*");
e.sendCommandExpectPrompt("load", "\\[0\\.0\\].*funit-hello.*");
e.send("quit\n");
e.expect("Quitting\\.\\.\\.");
@@ -202,8 +202,8 @@ public class TestRunCommand extends TestLib {
"\\[1\\.0\\] Loaded executable file.*");
e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
"\\[2\\.0\\] Loaded executable file.*");
- e.sendCommandExpectPrompt("[1.0] run", "Attached to process ([0-9]+).*" + "Creating new.*" +
- "running.*" + "Running process ([0-9]+).*");
+ e.sendCommandExpectPrompt("[1.0] run", "Creating new.*" + "running.*" +
+ "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
try { Thread.sleep(1000); } catch (Exception e) {}
//e.sendCommandExpectPrompt("load", "\\[0\\.0\\].*funit-hello.*\\[2\\.0\\].*funit-threads.*");
e.sendCommandExpectPrompt("focus", "Target set.*\\[0\\.0\\]\t\t0\t0.*" +
@@ -213,4 +213,53 @@ public class TestRunCommand extends TestLib {
e.expect("Quitting\\.\\.\\.");
e.close();
}
+
+ /**
+ * This test case tests passing of different parameters
+ *
+ */
+ public void testDiffParams() {
+ e = new HpdTestbed();
+ e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
+ "\\[0\\.0\\] Loaded executable file.*");
+ e.sendCommandExpectPrompt("run -arg1 -arg2", "running.*-arg1 -arg2.*" +
+ "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ e.sendCommandExpectPrompt("run -arg3", "running.*-arg3.*" +
+ "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ e.sendCommandExpectPrompt("run -arg4 -arg5", "running.*-arg4 -arg5.*" +
+ "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ e.send("quit\n");
+ e.expect("Quitting\\.\\.\\.");
+ e.close();
+ }
+
+ /**
+ * This test case tests passing of "--" to abort passing of any args
+ *
+ */
+ public void testNoParms() {
+ e = new HpdTestbed();
+ e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
+ "\\[0\\.0\\] Loaded executable file.*");
+ e.sendCommandExpectPrompt("run -arg1 -arg2", "running.*-arg1 -arg2.*" +
+ "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ //e.sendCommandExpectPrompt("run --", "running.*threads-looper \\r\\n" +
+ // "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ e.send("run --\n");
+ e.expect("Killing process.*");
+ e.expect("\\[0\\.0\\] Loaded executable file.*");
+ e.expect("running.*threads-looper\\r\\n");
+ e.expect("Attached to process ([0-9]+).*");
+ try { Thread.sleep(1000); } catch (Exception e) {}
+ //e.expect("Running process ([0-9]+).*");
+ //try { Thread.sleep(500); } catch (Exception e) {}
+ //e.sendCommandExpectPrompt("run -arg4 -arg5", "running.*-arg4 -arg5.*" +
+ // "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ e.send("quit\n");
+ e.expect("Quitting\\.\\.\\.");
+ e.close();
+ }
}
\ No newline at end of file
diff --git a/frysk-core/frysk/hpd/TestStartCommand.java b/frysk-core/frysk/hpd/TestStartCommand.java
index 40295a0..43ab03c 100644
--- a/frysk-core/frysk/hpd/TestStartCommand.java
+++ b/frysk-core/frysk/hpd/TestStartCommand.java
@@ -124,8 +124,7 @@ public class TestStartCommand extends TestLib {
e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
"\\[1\\.0\\] Loaded executable file.*");
e.sendCommandExpectPrompt("focus [1.0]", "Creating new HPD notation set.*");
- e.sendCommandExpectPrompt("start", "Attached to process ([0-9]+).*" +
- "starting.*");
+ e.sendCommandExpectPrompt("start", "starting.*" + "Attached to process ([0-9]+).*");
e.sendCommandExpectPrompt("load", "\\[0\\.0\\].*funit-hello.*");
e.send("quit\n");
e.expect("Quitting\\.\\.\\.");
@@ -145,8 +144,8 @@ public class TestStartCommand extends TestLib {
"\\[1\\.0\\] Loaded executable file.*");
e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
"\\[2\\.0\\] Loaded executable file.*");
- e.sendCommandExpectPrompt("[1.0] start", "Attached to process ([0-9]+).*" + "Creating new.*" +
- "starting.*");
+ e.sendCommandExpectPrompt("[1.0] start", "Creating new.*" +
+ "starting.*" + "Attached to process ([0-9]+).*");
try { Thread.sleep(1000); } catch (Exception e) {}
e.sendCommandExpectPrompt("focus", "Target set.*\\[0\\.0\\]\t\t0\t0.*" +
"\\[1\\.0\\]\t\t([0-9]+).*\\t([0-9]+).*\\[2\\.0\\]\t\t0\t0.*");
@@ -154,4 +153,52 @@ public class TestStartCommand extends TestLib {
e.expect("Quitting\\.\\.\\.");
e.close();
}
+
+ /**
+ * This test case tests passing of different parameters
+ *
+ */
+ public void testDiffParams() {
+ e = new HpdTestbed();
+ e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
+ "\\[0\\.0\\] Loaded executable file.*");
+ e.sendCommandExpectPrompt("start -arg1 -arg2", "starting.*-arg1 -arg2.*" +
+ "Attached to process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ e.sendCommandExpectPrompt("start -arg3", "starting.*-arg3.*" +
+ "Attached to process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ e.sendCommandExpectPrompt("start -arg4 -arg5", "starting.*-arg4 -arg5.*" +
+ "Attached to process ([0-9]+).*");
+ e.send("quit\n");
+ e.expect("Quitting\\.\\.\\.");
+ e.close();
+ }
+
+ /**
+ * This test case tests passing of "--" to abort passing of any args
+ *
+ */
+ public void testNoParms() {
+ e = new HpdTestbed();
+ e.sendCommandExpectPrompt("load " + Prefix.pkgLibFile("funit-threads-looper").getPath(),
+ "\\[0\\.0\\] Loaded executable file.*");
+ e.sendCommandExpectPrompt("start -arg1 -arg2", "starting.*-arg1 -arg2.*" +
+ "Attached to process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ //e.sendCommandExpectPrompt("run --", "running.*threads-looper \\r\\n" +
+ // "Attached to process ([0-9]+).*" + "Running process ([0-9]+).*");
+ e.send("start --\n");
+ e.expect("Killing process.*");
+ e.expect("\\[0\\.0\\] Loaded executable file.*");
+ e.expect("starting.*threads-looper\\r\\n");
+ e.expect("Attached to process ([0-9]+).*");
+ //try { Thread.sleep(1000); } catch (Exception e) {}
+ //e.sendCommandExpectPrompt("start -arg4 -arg5", "starting.*-arg4 -arg5.*");
+ // "Attached to process ([0-9]+).*");
+ try { Thread.sleep(500); } catch (Exception e) {}
+ e.send("quit\n");
+ e.expect("Quitting\\.\\.\\.");
+ e.close();
+ }
}
\ No newline at end of file
hooks/post-receive
--
frysk system monitor/debugger
reply other threads:[~2008-04-17 20:10 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080417201003.18700.qmail@sourceware.org \
--to=rmoseley@sourceware.org \
--cc=frysk-cvs@sourceware.org \
--cc=frysk@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).