summaryrefslogtreecommitdiff
path: root/shell-completion
diff options
context:
space:
mode:
authorJan Janssen <medhefgo@web.de>2013-06-28 17:26:30 +0200
committerLennart Poettering <lennart@poettering.net>2013-07-16 17:38:12 +0200
commita331b5e6d4724365bad9edeb9420c7e26e7f50da (patch)
treed2bbe6684dbbf91e3ac89a552b0b4c211aa5bbe4 /shell-completion
parent18d4e7c26e7806ac363d19989df7144d5058ce41 (diff)
journalctl: Add support for showing messages from a previous boot
Hi, I redid the boot ID look up to use enumerate_unique. This is quite fast if the cache is warm but painfully slow if it isn't. It has a slight chance of returning the wrong order if realtime clock jumps around. This one has to do n searches for every boot ID there is plus a sort, so it depends heavily on cache hotness. This is in contrast to the other way of look-up through filtering by a MESSAGE_ID, which only needs about 1 seek + whatever amount of relative IDs you want to walk. I also have a linked-list + (in-place) mergesort version of this patch, which has pretty much the same runtime. But since this one is using libc sorting and armortized allocation, I prefer this one. To summarize: The MESSAGE_ID way is a *lot* faster but can be incomplete due to rotation, while the enumerate+sort will find every boot ID out there but will be painfully slow for large journals and cold caches. You choose :P Jan
Diffstat (limited to 'shell-completion')
-rw-r--r--shell-completion/bash/journalctl11
1 files changed, 7 insertions, 4 deletions
diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl
index 5ab59c9940..29bf6bca3f 100644
--- a/shell-completion/bash/journalctl
+++ b/shell-completion/bash/journalctl
@@ -37,19 +37,22 @@ __journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
_journalctl() {
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local -A OPTS=(
- [STANDALONE]='-a --all --full
- --system --user
- -b --this-boot --disk-usage -f --follow --header
+ [STANDALONE]='-a --all --full --system --user
+ --disk-usage -f --follow --header
-h --help -l --local --new-id128 -m --merge --no-pager
--no-tail -q --quiet --setup-keys --this-boot --verify
--version --list-catalog --update-catalog'
- [ARG]='-D --directory -F --field -o --output -u --unit --user-unit'
+ [ARG]='-b --boot --this-boot -D --directory -F --field
+ -o --output -u --unit --user-unit'
[ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until
--verify-key'
)
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
case $prev in
+ --boot|--this-boot|-b)
+ comps=$(journalctl -F '_BOOT_ID' 2>/dev/null)
+ ;;
--directory|-D)
comps=$(compgen -d -- "$cur")
compopt -o filenames