code: def reference_cluster(envs, name):
      
      edges = [
          set([env['name'], ref])
          for env in envs
          for ref in env['refs']
      ]
      prev, cluster = set(), set([name])
      while prev != cluster:
          # While cluster grows
          prev = set(cluster)
          to_visit = []
          for edge in edges:
              if cluster & edge:
                  # Add adjacent nodes:
                  cluster |= edge
              else:
                  # Leave only edges that are out
                  # of cluster for the next round:
                  to_visit.append(edge)
          edges = to_visit
      return cluster
docs: Return set of all env names referencing or
      referenced by given name.
  
      >>> cluster = sorted(reference_cluster([
      ...     {'name': 'base', 'refs': []},
      ...     {'name': 'test', 'refs': ['base']},
      ...     {'name': 'local', 'refs': ['test']},
      ... ], 'test'))
      >>> cluster == ['base', 'local', 'test']
      True