Perf will show which binaries are using the CPU cycles, and standard
python profilers will show which python functions, but neither is
great at finding which call to an external binary is taking time, or
locating I/O hotspots.
+def timed(fn):
+ """Timer decorator"""
+ from time import perf_counter
+
+ def inner(*args, **kwargs):
+ start_time = perf_counter()
+ rval = fn(*args, **kwargs)
+ end_time = perf_counter()
+ _LOG.info('{0}: {1:.8f}s elapsed'.format(fn.__name__, end_time - start_time))
+ return rval
+
+ return inner
+
+
class SubprocessError(RuntimeError):
"A subprocess exited with a nonzero status"
def __init__(self, args, status, stdout=None, stderr=None):
class SubprocessError(RuntimeError):
"A subprocess exited with a nonzero status"
def __init__(self, args, status, stdout=None, stderr=None):
_git(args=['read-tree', treeish], wait=True)
raise
_git(args=['read-tree', treeish], wait=True)
raise
def _update_index(status):
with _git(
args=['update-index', '--index-info'],
def _update_index(status):
with _git(
args=['update-index', '--index-info'],
return base != fetch_head
return base != fetch_head
def get_status():
status = {
'deleted': {},
def get_status():
status = {
'deleted': {},
_os.remove(index)
return status
_os.remove(index)
return status
def _index_tags():
"Write notmuch tags to the nmbug.index."
path = _os.path.join(NOTMUCH_GIT_DIR, 'nmbug.index')
def _index_tags():
"Write notmuch tags to the nmbug.index."
path = _os.path.join(NOTMUCH_GIT_DIR, 'nmbug.index')
yield '{mode} {hash}\t{path}\n'.format(mode=mode, hash=hash, path=path)
yield '{mode} {hash}\t{path}\n'.format(mode=mode, hash=hash, path=path)
def _diff_index(index, filter):
"""
Get an {id: {tag, ...}} dict for a given filter.
def _diff_index(index, filter):
"""
Get an {id: {tag, ...}} dict for a given filter.