From 01bf5c7970b3d7cb872902f5a5298b489da3defb Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 27 Nov 2008 19:35:55 -0500 Subject: [PATCH] Optimized bug loading from becommands/comment with partial-uuid matching. The code is a bit uglier now, but it's a good deal faster :). --- becommands/comment.py | 12 ++++++++++-- completion/be.bash | 39 --------------------------------------- 2 files changed, 10 insertions(+), 41 deletions(-) delete mode 100644 completion/be.bash diff --git a/becommands/comment.py b/becommands/comment.py index 8fdbe42..5000588 100644 --- a/becommands/comment.py +++ b/becommands/comment.py @@ -122,12 +122,20 @@ def complete(options, args, parser): for pos,value in enumerate(args): if value == "--complete": if pos == 0: # fist positional argument is a bug or comment id + if len(args) >= 2: + partial = args[1].split(':')[0] # take only bugid portion + else: + partial = "" ids = [] try: bd = bugdir.BugDir(from_disk=True, manipulate_encodings=False) - bd.load_all_bugs() - bugs = [bug for bug in bd if bug.active == True] + bugs = [] + for uuid in bd.list_uuids(): + if uuid.startswith(partial): + bug = bd.bug_from_uuid(uuid) + if bug.active == True: + bugs.append(bug) for bug in bugs: shortname = bd.bug_shortname(bug) ids.append(shortname) diff --git a/completion/be.bash b/completion/be.bash deleted file mode 100644 index dbe1214..0000000 --- a/completion/be.bash +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# Bash completion script for be (Bugs Everywhere) -# -# System wide installation: -# Copy this file to /etc/bash_completion/be -# Per-user installation: -# Copy this file to ~/.be-completion.sh and source it in your .bashrc: -# source ~/.be-completion.sh -# -# For a good intro to Bash completion, see Steve Kemp's article -# "An introduction to bash completion: part 2" -# http://www.debian-administration.org/articles/317 - -# Requires: -# be [X Y Z] --complete -# to print a list of available completions at that point -_be() -{ - local cur prev opts - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" - - if [ $COMP_CWORD -eq 1 ]; then - # no command yet, show all commands - COMPREPLY=( $( compgen -W "$(be --complete)" -- $cur ) ) - else - # remove the first word (should be "be") for security reasons - unset COMP_WORDS[0] - # remove the current word and all later words, because they - # are not needed for completion. - for i in `seq $COMP_CWORD ${#COMP_WORDS[@]}`; do - unset COMP_WORDS[$i]; - done - COMPREPLY=( $( compgen -W "$(be "${COMP_WORDS[@]}" --complete)" -- $cur ) ) - fi -} - -complete -F _be be -- 2.26.2