docs: def _maintain_dep_graph(self, p_todo):
          """
          Makes sure that the dependency graph is consistent according to the
          given todo.
          """
          dep_id = p_todo.tag_value('id')
          # maintain dependency graph
          if dep_id:
              self._parentdict[dep_id] = p_todo
              self._depgraph.add_node(hash(p_todo))
  
              # connect all tasks we have in memory so far that refer to this
              # task
              for dep in \
                      [dep for dep in self._todos if dep.has_tag('p', dep_id)]:
  
                  self._add_edge(p_todo, dep, dep_id)
  
          for dep_id in p_todo.tag_values('p'):
              try:
                  parent = self._parentdict[dep_id]
                  self._add_edge(parent, p_todo, dep_id)
              except KeyError:
                  pass