From a331b5e6d4724365bad9edeb9420c7e26e7f50da Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Fri, 28 Jun 2013 17:26:30 +0200 Subject: 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 --- shell-completion/bash/journalctl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'shell-completion/bash') diff --git a/shell-completion/bash/journalctl b/shell-completion/bash/journalctl index 5ab59c994..29bf6bca3 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 -- cgit v1.2.3