You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2016/07/29 07:08:10 UTC
[1/2] karaf git commit: [KARAF-4639] Add job control in the console
Repository: karaf
Updated Branches:
refs/heads/master 4d335611a -> 5bbaf7181
[KARAF-4639] Add job control in the console
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/8c06b2e9
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/8c06b2e9
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/8c06b2e9
Branch: refs/heads/master
Commit: 8c06b2e9298941b132e12d1fdf4485c173dba3b3
Parents: 4d33561
Author: Guillaume Nodet <gn...@apache.org>
Authored: Thu Jul 28 17:38:37 2016 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Thu Jul 28 18:04:39 2016 +0200
----------------------------------------------------------------------
.../base/src/main/resources/resources/bin/karaf | 6 ++
.../shell/impl/console/ConsoleSessionImpl.java | 47 +++++++++++++++-
.../shell/impl/console/SessionFactoryImpl.java | 58 ++++++++++++++++++++
3 files changed, 110 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/8c06b2e9/assemblies/features/base/src/main/resources/resources/bin/karaf
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf b/assemblies/features/base/src/main/resources/resources/bin/karaf
index 0040859..5a0487a 100755
--- a/assemblies/features/base/src/main/resources/resources/bin/karaf
+++ b/assemblies/features/base/src/main/resources/resources/bin/karaf
@@ -510,8 +510,14 @@ run() {
done
}
+nothing() {
+ # nothing to do here
+ a=a
+}
+
main() {
init
+ trap 'nothing' SIGTSTP
run "$@"
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/8c06b2e9/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
index 2a10396..c246530 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java
@@ -29,10 +29,12 @@ import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.felix.gogo.api.Job;
+import org.apache.felix.gogo.api.Job.Status;
import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Converter;
@@ -260,6 +262,28 @@ public class ConsoleSessionImpl implements Session {
Properties brandingProps = Branding.loadBrandingProperties(terminal);
welcome(brandingProps);
setSessionProperties(brandingProps);
+
+ AtomicBoolean reading = new AtomicBoolean();
+
+ session.setJobListener((job, previous, current) -> {
+ if (previous == Status.Background || current == Status.Background
+ || previous == Status.Suspended || current == Status.Suspended) {
+ int width = terminal.getWidth();
+ String status = current.name().toLowerCase();
+ jlineTerminal.writer().write(getStatusLine(job, width, status));
+ jlineTerminal.flush();
+ if (reading.get()) {
+ reader.redrawLine();
+ reader.redisplay();
+ }
+ }
+ });
+ jlineTerminal.handle(Signal.TSTP, s -> {
+ Job current = session.foregroundJob();
+ if (current != null) {
+ current.suspend();
+ }
+ });
jlineTerminal.handle(Signal.INT, s -> {
Job current = session.foregroundJob();
if (current != null) {
@@ -271,7 +295,13 @@ public class ConsoleSessionImpl implements Session {
executeScript(scriptFileName);
while (running) {
try {
- String command = reader.readLine(getPrompt());
+ reading.set(true);
+ String command;
+ try {
+ command = reader.readLine(getPrompt());
+ } finally {
+ reading.set(false);
+ }
Object result = session.execute(command);
if (result != null) {
session.getConsole().println(session.format(result, Converter.INSPECT));
@@ -294,6 +324,21 @@ public class ConsoleSessionImpl implements Session {
}
}
+ private String getStatusLine(Job job, int width, String status) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < width - 1; i++) {
+ sb.append(' ');
+ }
+ sb.append('\r');
+ sb.append("[").append(job.id()).append("] ");
+ sb.append(status);
+ for (int i = status.length(); i < "background".length(); i++) {
+ sb.append(' ');
+ }
+ sb.append(" ").append(job.command()).append("\n");
+ return sb.toString();
+ }
+
@Override
public Object execute(CharSequence commandline) throws Exception {
String command = CommandLineParser.parse(this, commandline.toString());
http://git-wip-us.apache.org/repos/asf/karaf/blob/8c06b2e9/shell/core/src/main/java/org/apache/karaf/shell/impl/console/SessionFactoryImpl.java
----------------------------------------------------------------------
diff --git a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/SessionFactoryImpl.java b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/SessionFactoryImpl.java
index c238aa0..77997fa 100644
--- a/shell/core/src/main/java/org/apache/karaf/shell/impl/console/SessionFactoryImpl.java
+++ b/shell/core/src/main/java/org/apache/karaf/shell/impl/console/SessionFactoryImpl.java
@@ -21,12 +21,19 @@ package org.apache.karaf.shell.impl.console;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.function.BiConsumer;
+import org.apache.felix.gogo.jline.Builtin;
import org.apache.felix.gogo.runtime.CommandProcessorImpl;
+import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Function;
import org.apache.felix.service.threadio.ThreadIO;
import org.apache.karaf.shell.api.console.Command;
+import org.apache.karaf.shell.api.console.Completer;
+import org.apache.karaf.shell.api.console.Parser;
import org.apache.karaf.shell.api.console.Registry;
import org.apache.karaf.shell.api.console.Session;
import org.apache.karaf.shell.api.console.SessionFactory;
@@ -48,6 +55,9 @@ public class SessionFactoryImpl extends RegistryImpl implements SessionFactory,
commandProcessor = new CommandProcessorImpl(threadIO);
register(new ExitCommand());
new HelpCommand(this);
+ register(new JobCommand("jobs", "List shell jobs", (session, args) -> new Builtin().jobs(session, args)));
+ register(new JobCommand("fg", "Put job in foreground", (session, args) -> new Builtin().fg(session, args)));
+ register(new JobCommand("bg", "Put job in background", (session, args) -> new Builtin().bg(session, args)));
}
public CommandProcessorImpl getCommandProcessor() {
@@ -137,4 +147,52 @@ public class SessionFactoryImpl extends RegistryImpl implements SessionFactory,
}
}
+ private class JobCommand implements Command {
+ private final String name;
+ private final String desc;
+ private final BiConsumer<CommandSession, String[]> consumer;
+
+ public JobCommand(String name, String desc, BiConsumer<CommandSession, String[]> consumer) {
+ this.name = name;
+ this.desc = desc;
+ this.consumer = consumer;
+ }
+
+ @Override
+ public String getScope() {
+ return "shell";
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String getDescription() {
+ return desc;
+ }
+
+ @Override
+ public Completer getCompleter(boolean scoped) {
+ return null;
+ }
+
+ @Override
+ public Parser getParser() {
+ return null;
+ }
+
+ @Override
+ public Object execute(Session session, List<Object> arguments) throws Exception {
+ CommandSession cmdSession = (CommandSession) session.get(".commandSession");
+ String[] args = new String[arguments.size()];
+ for (int i = 0; i < args.length; i++) {
+ args[i] = Objects.toString(arguments.get(i));
+ }
+ consumer.accept(cmdSession, args);
+ return null;
+ }
+ }
+
}
[2/2] karaf git commit: [KARAF-4628] [KARAF-4564] Fix unix startup
scripts
Posted by gn...@apache.org.
[KARAF-4628] [KARAF-4564] Fix unix startup scripts
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/5bbaf718
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/5bbaf718
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/5bbaf718
Branch: refs/heads/master
Commit: 5bbaf71814df514b112cbe8cd73ba57fefdc869f
Parents: 8c06b2e
Author: Guillaume Nodet <gn...@apache.org>
Authored: Fri Jul 29 09:08:03 2016 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Jul 29 09:08:03 2016 +0200
----------------------------------------------------------------------
.../main/filtered-resources/resources/bin/client | 18 ++++++++++++++----
.../filtered-resources/resources/bin/instance | 18 ++++++++++++++----
.../main/filtered-resources/resources/bin/shell | 18 ++++++++++++++----
.../main/filtered-resources/resources/bin/start | 18 ++++++++++++++----
.../main/filtered-resources/resources/bin/status | 18 ++++++++++++++----
.../main/filtered-resources/resources/bin/stop | 18 ++++++++++++++----
.../base/src/main/resources/resources/bin/karaf | 18 ++++++++++++++----
7 files changed, 98 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/client
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/client b/assemblies/features/base/src/main/filtered-resources/resources/bin/client
index 6a9be4c..1012fcc 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/client
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/client
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/instance
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/instance b/assemblies/features/base/src/main/filtered-resources/resources/bin/instance
index 3eff681..e26668b 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/instance
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/instance
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/shell
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/shell b/assemblies/features/base/src/main/filtered-resources/resources/bin/shell
index 66dde7b..cbdbfc3 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/shell
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/shell
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/start
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/start b/assemblies/features/base/src/main/filtered-resources/resources/bin/start
index 710e9ec..b700006 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/start
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/start
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/status
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/status b/assemblies/features/base/src/main/filtered-resources/resources/bin/status
index c0cd796..31e9e17 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/status
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/status
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/filtered-resources/resources/bin/stop
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/filtered-resources/resources/bin/stop b/assemblies/features/base/src/main/filtered-resources/resources/bin/stop
index bb7eb72..35a698b 100755
--- a/assemblies/features/base/src/main/filtered-resources/resources/bin/stop
+++ b/assemblies/features/base/src/main/filtered-resources/resources/bin/stop
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")
http://git-wip-us.apache.org/repos/asf/karaf/blob/5bbaf718/assemblies/features/base/src/main/resources/resources/bin/karaf
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf b/assemblies/features/base/src/main/resources/resources/bin/karaf
index 5a0487a..761c68a 100755
--- a/assemblies/features/base/src/main/resources/resources/bin/karaf
+++ b/assemblies/features/base/src/main/resources/resources/bin/karaf
@@ -16,10 +16,20 @@
# limitations under the License.
#
-REALNAME=`readlink -e "$0" > /dev/null 2>&1`
-if [ $? != 0 ]; then
- REALNAME=$0
-fi
+realpath() {
+ OURPWD=${PWD}
+ cd "$(dirname "${1}")"
+ LINK=$(readlink "$(basename "${1}")")
+ while [ "${LINK}" ]; do
+ cd "$(dirname "${LINK}")"
+ LINK=$(readlink "$(basename "${1}")")
+ done
+ REALPATH="${PWD}/$(basename "${1}")"
+ cd "${OURPWD}"
+ echo "${REALPATH}"
+}
+
+REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")