code: def find_dependencies(self, dependent_rev, recurse=None):
          
          if recurse is None:
              recurse = self.options.recurse
  
          try:
              dependent = self.get_commit(dependent_rev)
          except InvalidCommitish as e:
              abort(e.message())
  
          self.todo.append(dependent)
          self.todo_d[dependent.hex] = True
  
          first_time = True
  
          while self.todo:
              sha1s = [commit.hex[:8] for commit in self.todo]
              if first_time:
                  self.logger.info("Initial TODO list: %s" % " ".join(sha1s))
                  first_time = False
              else:
                  self.logger.info("  TODO list now: %s" % " ".join(sha1s))
              dependent = self.todo.pop(0)
              dependent_sha1 = dependent.hex
              del self.todo_d[dependent_sha1]
              self.logger.info("  Processing %s from TODO list" %
                                dependent_sha1[:8])
  
              if dependent_sha1 in self.done_d:
                  self.logger.info("  %s already done previously" %
                                    dependent_sha1)
                  continue
  
              self.notify_listeners('new_commit', dependent)
  
              parent = dependent.parents[0]
              self.find_dependencies_with_parent(dependent, parent)
              self.done.append(dependent_sha1)
              self.done_d[dependent_sha1] = True
              self.logger.info("  Found all dependencies for %s" %
                                dependent_sha1[:8])
              # A commit won't have any dependencies if it only added new files
              dependencies = self.dependencies.get(dependent_sha1, {})
              self.notify_listeners('dependent_done', dependent, dependencies)
  
          self.logger.info("Finished processing TODO list")
          self.notify_listeners('all_done')
docs: Find all dependencies of the given revision, recursively traversing
          the dependency tree if requested.