mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
CLI/git: opportunistically use bindings to check for known messages
If the bindings are installed, use them to avoid one exec of notmuch search per message.
This commit is contained in:
parent
bd4347499f
commit
f599b8873f
1 changed files with 28 additions and 5 deletions
|
@ -698,6 +698,32 @@ def _is_unmerged(ref='@{upstream}'):
|
||||||
stdout=_subprocess.PIPE, wait=True)
|
stdout=_subprocess.PIPE, wait=True)
|
||||||
return base != fetch_head
|
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', '--output=files', 'id:{0}'.format(id)],
|
||||||
|
stdout=_subprocess.PIPE,
|
||||||
|
wait=True)
|
||||||
|
self._known[id] = stdout != None
|
||||||
|
return self._known[id]
|
||||||
|
|
||||||
@timed
|
@timed
|
||||||
def get_status():
|
def get_status():
|
||||||
|
@ -705,14 +731,11 @@ def get_status():
|
||||||
'deleted': {},
|
'deleted': {},
|
||||||
'missing': {},
|
'missing': {},
|
||||||
}
|
}
|
||||||
|
db = DatabaseCache()
|
||||||
with PrivateIndex(repo=NOTMUCH_GIT_DIR, prefix=TAG_PREFIX) as index:
|
with PrivateIndex(repo=NOTMUCH_GIT_DIR, prefix=TAG_PREFIX) as index:
|
||||||
maybe_deleted = index.diff(filter='D')
|
maybe_deleted = index.diff(filter='D')
|
||||||
for id, tags in maybe_deleted.items():
|
for id, tags in maybe_deleted.items():
|
||||||
(_, stdout, stderr) = _spawn(
|
if db.known(id):
|
||||||
args=['notmuch', 'search', '--output=files', 'id:{0}'.format(id)],
|
|
||||||
stdout=_subprocess.PIPE,
|
|
||||||
wait=True)
|
|
||||||
if stdout:
|
|
||||||
status['deleted'][id] = tags
|
status['deleted'][id] = tags
|
||||||
else:
|
else:
|
||||||
status['missing'][id] = tags
|
status['missing'][id] = tags
|
||||||
|
|
Loading…
Reference in a new issue