code: def copy_dir(source, dest, variables, out_=sys.stdout, i=0):
      
      def out(msg):
          out_.write('%s%s' % (' ' * (i * 2), msg))
          out_.write('\n')
          out_.flush()
  
      names = sorted(pkg_resources.resource_listdir(source[0], source[1]))
      if not os.path.exists(dest):
          out('Creating %s' % dest)
          makedirs(dest)
      else:
          out('%s already exists' % dest)
          return
  
      for name in names:
  
          full = '/'.join([source[1], name])
          dest_full = os.path.join(dest, substitute_filename(name, variables))
  
          sub_file = False
          if dest_full.endswith('_tmpl'):
              dest_full = dest_full[:-5]
              sub_file = True
  
          if pkg_resources.resource_isdir(source[0], full):
              out('Recursing into %s' % os.path.basename(full))
              copy_dir((source[0], full), dest_full, variables, out_, i + 1)
              continue
          else:
              content = pkg_resources.resource_string(source[0], full)
  
          if sub_file:
              content = render_template(content, variables)
              if content is None:
                  continue  # pragma: no cover
  
          out('Copying %s to %s' % (full, dest_full))
  
          f = open(dest_full, 'wb')
          f.write(content)
          f.close()
docs: Copies the ``source`` directory to the ``dest`` directory, where
      ``source`` is some tuple representing an installed package and a
      subdirectory in the package, e.g.,
  
      ('pecan', os.path.join('scaffolds', 'base'))
      ('pecan_extension', os.path.join('scaffolds', 'scaffold_name'))
  
      ``variables``: A dictionary of variables to use in any substitutions.
      Substitution is performed via ``string.Template``.
  
      ``out_``: File object to write to (default is sys.stdout).