* [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history
@ 2017-04-27 22:36 John Snow
2017-04-28 15:30 ` Stefan Hajnoczi
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: John Snow @ 2017-04-27 22:36 UTC (permalink / raw)
To: qemu-devel; +Cc: armbru, kchamart, John Snow
Use the existing readline history function we are utilizing
to provide persistent command history across instances of qmp-shell.
This assists entering debug commands across sessions that may be
interrupted by QEMU sessions terminating, where the qmp-shell has
to be relaunched.
Signed-off-by: John Snow <jsnow@redhat.com>
---
v3: Hardcoded limit of 1024 lines of history for now,
as setting limits in ~/.inputrc does not appear to work (Nir)
v2: Adjusted the errors to whine about non-ENOENT errors, but still
intercept all errors as non-fatal.
Save history atexit() to match bash standard behavior
scripts/qmp/qmp-shell | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index eccb88a..6ece6e7 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -70,6 +70,9 @@ import json
import ast
import readline
import sys
+import os
+import errno
+import atexit
class QMPCompleter(list):
def complete(self, text, state):
@@ -109,6 +112,8 @@ class QMPShell(qmp.QEMUMonitorProtocol):
self._pretty = pretty
self._transmode = False
self._actions = list()
+ self._histfile = os.path.join(os.path.expanduser('~'),
+ '.qmp-shell_history')
def __get_address(self, arg):
"""
@@ -132,11 +137,27 @@ class QMPShell(qmp.QEMUMonitorProtocol):
def __completer_setup(self):
self._completer = QMPCompleter()
self._fill_completion()
+ readline.set_history_length(1024)
readline.set_completer(self._completer.complete)
readline.parse_and_bind("tab: complete")
# XXX: default delimiters conflict with some command names (eg. query-),
# clearing everything as it doesn't seem to matter
readline.set_completer_delims('')
+ try:
+ readline.read_history_file(self._histfile)
+ except Exception as e:
+ if isinstance(e, IOError) and e.errno == errno.ENOENT:
+ # File not found. No problem.
+ pass
+ else:
+ print "Failed to read history '%s'; %s" % (self._histfile, e)
+ atexit.register(self.__save_history)
+
+ def __save_history(self):
+ try:
+ readline.write_history_file(self._histfile)
+ except Exception as e:
+ print "Failed to save history file '%s'; %s" % (self._histfile, e)
def __parse_value(self, val):
try:
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history
2017-04-27 22:36 [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history John Snow
@ 2017-04-28 15:30 ` Stefan Hajnoczi
2017-04-28 21:13 ` Kashyap Chamarthy
2017-05-02 11:33 ` Markus Armbruster
2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2017-04-28 15:30 UTC (permalink / raw)
To: John Snow; +Cc: qemu-devel, armbru
[-- Attachment #1: Type: text/plain, Size: 871 bytes --]
On Thu, Apr 27, 2017 at 06:36:28PM -0400, John Snow wrote:
> Use the existing readline history function we are utilizing
> to provide persistent command history across instances of qmp-shell.
>
> This assists entering debug commands across sessions that may be
> interrupted by QEMU sessions terminating, where the qmp-shell has
> to be relaunched.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>
> v3: Hardcoded limit of 1024 lines of history for now,
> as setting limits in ~/.inputrc does not appear to work (Nir)
>
> v2: Adjusted the errors to whine about non-ENOENT errors, but still
> intercept all errors as non-fatal.
> Save history atexit() to match bash standard behavior
>
> scripts/qmp/qmp-shell | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history
2017-04-27 22:36 [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history John Snow
2017-04-28 15:30 ` Stefan Hajnoczi
@ 2017-04-28 21:13 ` Kashyap Chamarthy
2017-05-02 11:33 ` Markus Armbruster
2 siblings, 0 replies; 4+ messages in thread
From: Kashyap Chamarthy @ 2017-04-28 21:13 UTC (permalink / raw)
To: John Snow; +Cc: qemu-devel, armbru
On Thu, Apr 27, 2017 at 06:36:28PM -0400, John Snow wrote:
> Use the existing readline history function we are utilizing
> to provide persistent command history across instances of qmp-shell.
>
> This assists entering debug commands across sessions that may be
> interrupted by QEMU sessions terminating, where the qmp-shell has
> to be relaunched.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>
> v3: Hardcoded limit of 1024 lines of history for now,
> as setting limits in ~/.inputrc does not appear to work (Nir)
Yeah, as-is, this is strict improvement, so it's alright for now.
> v2: Adjusted the errors to whine about non-ENOENT errors, but still
> intercept all errors as non-fatal.
> Save history atexit() to match bash standard behavior
>
>
> scripts/qmp/qmp-shell | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
Reviewed-by: Kashyap Chamarthy <kchamart@redhat.com>
Tested-by: Kashyap Chamarthy <kchamart@redhat.com>
Can confim the, expected, 'atexit' behavior -- only upon termination
does the history file get saved:
$ cat ~/.qmp-shell_history
query-block
query-named-block-nodes
query-kvm
quit
Tested with:
$ git describe
v3.9.0-304-gca7305b
Most of my test procedure is noted in my response to the earlier
revisions:
https://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg00356.html
> diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
> index eccb88a..6ece6e7 100755
> --- a/scripts/qmp/qmp-shell
> +++ b/scripts/qmp/qmp-shell
> @@ -70,6 +70,9 @@ import json
> import ast
> import readline
> import sys
> +import os
> +import errno
> +import atexit
>
> class QMPCompleter(list):
> def complete(self, text, state):
> @@ -109,6 +112,8 @@ class QMPShell(qmp.QEMUMonitorProtocol):
> self._pretty = pretty
> self._transmode = False
> self._actions = list()
> + self._histfile = os.path.join(os.path.expanduser('~'),
> + '.qmp-shell_history')
Thanks for changing the name :-) Now the raw QMP history file
(~/.qmp_history) and 'qmp-shell' history file (~/qmp-shell_history)
won't collide.
> def __get_address(self, arg):
> """
> @@ -132,11 +137,27 @@ class QMPShell(qmp.QEMUMonitorProtocol):
> def __completer_setup(self):
> self._completer = QMPCompleter()
> self._fill_completion()
> + readline.set_history_length(1024)
> readline.set_completer(self._completer.complete)
> readline.parse_and_bind("tab: complete")
> # XXX: default delimiters conflict with some command names (eg. query-),
> # clearing everything as it doesn't seem to matter
> readline.set_completer_delims('')
> + try:
> + readline.read_history_file(self._histfile)
> + except Exception as e:
> + if isinstance(e, IOError) and e.errno == errno.ENOENT:
> + # File not found. No problem.
> + pass
> + else:
> + print "Failed to read history '%s'; %s" % (self._histfile, e)
> + atexit.register(self.__save_history)
> +
> + def __save_history(self):
> + try:
> + readline.write_history_file(self._histfile)
> + except Exception as e:
> + print "Failed to save history file '%s'; %s" % (self._histfile, e)
>
> def __parse_value(self, val):
> try:
> --
> 2.9.3
>
--
/kashyap
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history
2017-04-27 22:36 [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history John Snow
2017-04-28 15:30 ` Stefan Hajnoczi
2017-04-28 21:13 ` Kashyap Chamarthy
@ 2017-05-02 11:33 ` Markus Armbruster
2 siblings, 0 replies; 4+ messages in thread
From: Markus Armbruster @ 2017-05-02 11:33 UTC (permalink / raw)
To: John Snow; +Cc: qemu-devel
John Snow <jsnow@redhat.com> writes:
> Use the existing readline history function we are utilizing
> to provide persistent command history across instances of qmp-shell.
>
> This assists entering debug commands across sessions that may be
> interrupted by QEMU sessions terminating, where the qmp-shell has
> to be relaunched.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
Applied to qapi-next, thanks!
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-05-02 11:33 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-27 22:36 [Qemu-devel] [PATCH v3] qmp-shell: add persistent command history John Snow
2017-04-28 15:30 ` Stefan Hajnoczi
2017-04-28 21:13 ` Kashyap Chamarthy
2017-05-02 11:33 ` Markus Armbruster
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.