message: drake: let the notification include the duration
diff: @@ -199,8 +199,11 @@ class Drake:
  def adjust_mtime_second(self):
  return self.__adjust_mtime_second
  - def notify(self, title, message):
  + def notify(self, title, message, start, stop=None):
  '''Notify the user that a run was finished.'''
  + if not stop:
  + stop = time.time()
  + title += ' ({})'.format(duration(start, stop))
  # For some reason, the some first characters (such as open paren
  # or bracket) must be escaped. Fortunately, a leading backlash
  # suffices.
  @@ -210,6 +213,7 @@ class Drake:
  _OS.system(cmd.format(title=title, message=message))
  def run(self, *cfg, **kwcfg):
  + start = time.time()
  try:
  g = self.__globals
  module = self.__module
  @@ -289,7 +293,7 @@ class Drake:
  if i == len(args):
  break
  except Exception as e:
  - self.notify('failed', str(e))
  + self.notify('failed', str(e), start)
  print('%s: %s' % (sys.argv[0], e))
  if 'DRAKE_DEBUG_BACKTRACE' in _OS.environ:
  import traceback
  @@ -298,7 +302,7 @@ class Drake:
  except KeyboardInterrupt:
  print('%s: interrupted.' % sys.argv[0])
  exit(1)
  - self.notify('done', ' '.join(args))
  + self.notify('done', ' '.join(args), start)
  EXPLAIN = 'DRAKE_EXPLAIN' in _OS.environ
  def explain(node, reason):
  