X-Git-Url: https://git.cworth.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-git.py;h=57098aae7821e5ddb5e1543d6e6c58d2c3d9a0bd;hp=4d9887c81aaa3b3e5a79723a24a0de0c4b6277d1;hb=refs%2Fheads%2Fnmweb;hpb=bd4347499f6ddab1af0967d596ad97996eea74f8 diff --git a/notmuch-git.py b/notmuch-git.py index 4d9887c8..57098aae 100644 --- a/notmuch-git.py +++ b/notmuch-git.py @@ -254,7 +254,7 @@ def count_messages(prefix=None): def get_tags(prefix=None): "Get a list of tags with a given prefix." (status, stdout, stderr) = _spawn( - args=['notmuch', 'search', '--query=sexp', '--output=tags', _tag_query(prefix)], + args=['notmuch', 'search', '--exclude=false', '--query=sexp', '--output=tags', _tag_query(prefix)], stdout=_subprocess.PIPE, wait=True) return [tag for tag in stdout.splitlines()] @@ -698,6 +698,32 @@ def _is_unmerged(ref='@{upstream}'): stdout=_subprocess.PIPE, wait=True) return base != fetch_head +class DatabaseCache: + def __init__(self): + try: + from notmuch2 import Database + self._notmuch = Database() + except ImportError: + self._notmuch = None + self._known = {} + + def known(self,id): + if id in self._known: + return self._known[id]; + + if self._notmuch: + try: + _ = self._notmuch.find(id) + self._known[id] = True + except LookupError: + self._known[id] = False + else: + (_, stdout, stderr) = _spawn( + args=['notmuch', 'search', '--exclude=false', '--output=files', 'id:{0}'.format(id)], + stdout=_subprocess.PIPE, + wait=True) + self._known[id] = stdout != None + return self._known[id] @timed def get_status(): @@ -705,14 +731,11 @@ def get_status(): 'deleted': {}, 'missing': {}, } + db = DatabaseCache() with PrivateIndex(repo=NOTMUCH_GIT_DIR, prefix=TAG_PREFIX) as index: maybe_deleted = index.diff(filter='D') for id, tags in maybe_deleted.items(): - (_, stdout, stderr) = _spawn( - args=['notmuch', 'search', '--output=files', 'id:{0}'.format(id)], - stdout=_subprocess.PIPE, - wait=True) - if stdout: + if db.known(id): status['deleted'][id] = tags else: status['missing'][id] = tags