code: def populate_cmdsets(job, cmdsets, depth):
      
      if len(cmdsets) < depth:
          cmdsets.append(set())
      cmdsets[depth-1].add(job.command)
      if len(job.dependencies) == 0:
          return cmdsets
      for j in job.dependencies:
          cmdsets = populate_cmdsets(j, cmdsets, depth+1)
      return cmdsets
docs: Creates a list of sets containing jobs at different depths of the
      dependency tree.
  
      This is a recursive function (is there something quicker in the itertools
      module?) that descends each 'root' job in turn, populating each