docstr: Create the directory tree that will become the source
  distribution archive.  All directories implied by the filenames in
  'files' are created under 'base_dir', and then we hard link or copy
  (if hard linking is unavailable) those files into place.
  Essentially, this duplicates the developer's source tree, but in a
  directory named after the distribution, containing only the files
  to be distributed.
code: def make_release_tree(self, base_dir, files):
      """Create the directory tree that will become the source
      distribution archive.  All directories implied by the filenames in
      'files' are created under 'base_dir', and then we hard link or copy
      (if hard linking is unavailable) those files into place.
      Essentially, this duplicates the developer's source tree, but in a
      directory named after the distribution, containing only the files
      to be distributed.
      """
      # Create all the directories under 'base_dir' necessary to
      # put 'files' there; the 'mkpath()' is just so we don't die
      # if the manifest happens to be empty.
      self.mkpath(base_dir)
      dir_util.create_tree(base_dir, files, dry_run=self.dry_run)
  
      # And walk over the list of files, either making a hard link (if
      # os.link exists) to each one that doesn't already exist in its
      # corresponding location under 'base_dir', or copying each file
      # that's out-of-date in 'base_dir'.  (Usually, all files will be
      # out-of-date, because by default we blow away 'base_dir' when
      # we're done making the distribution archives.)
  
      if hasattr(os, "link"):  # can make hard links on this system
          link = "hard"
          msg = "making hard links in %s..." % base_dir
      else:  # nope, have to copy
          link = None
          msg = "copying files to %s..." % base_dir
  
      if not files:
          log.warning("no files to distribute -- empty manifest?")
      else:
          log.info(msg)
      for file in files:
          if not os.path.isfile(file):
              log.warning("'%s' not a regular file -- skipping", file)
          else:
              dest = os.path.join(base_dir, file)
              self.copy_file(file, dest, link=link)
  
      self.distribution.metadata.write_pkg_info(base_dir)
  
imports: import os
  import sys
  from glob import glob
  from warnings import warn
  from ..core import Command
  from distutils import dir_util
  from distutils import file_util
  from distutils import archive_util
  from ..text_file import TextFile
  from ..filelist import FileList
  from distutils._log import log
  from ..util import convert_path
  from ..errors import DistutilsOptionError, DistutilsTemplateError
label_desc: Use image node_id 21 for calling the sdist obj's underlying member method code with example usage: obj.make_release_tree(base_dir, files) without return types