docs: def cache_dir(self, path, saltenv='base', include_empty=False,
                    include_pat=None, exclude_pat=None, cachedir=None):
          '''
          Download all of the files in a subdir of the master
          '''
          ret = []
  
          path = self._check_proto(salt.utils.data.decode(path))
          # We want to make sure files start with this *directory*, use
          # '/' explicitly because the master (that's generating the
          # list of files) only runs on POSIX
          if not path.endswith('/'):
              path = path + '/'
  
          log.info(
              'Caching directory \'%s\' for environment \'%s\'', path, saltenv
          )
          # go through the list of all files finding ones that are in
          # the target directory and caching them
          for fn_ in self.file_list(saltenv):
              fn_ = salt.utils.data.decode(fn_)
              if fn_.strip() and fn_.startswith(path):
                  if salt.utils.stringutils.check_include_exclude(
                          fn_, include_pat, exclude_pat):
                      fn_ = self.cache_file(
                          salt.utils.url.create(fn_), saltenv, cachedir=cachedir)
                      if fn_:
                          ret.append(fn_)
  
          if include_empty:
              # Break up the path into a list containing the bottom-level
              # directory (the one being recursively copied) and the directories
              # preceding it
              # separated = string.rsplit(path, '/', 1)
              # if len(separated) != 2:
              #     # No slashes in path. (So all files in saltenv will be copied)
              #     prefix = ''
              # else:
              #     prefix = separated[0]
              cachedir = self.get_cachedir(cachedir)
  
              dest = salt.utils.path.join(cachedir, 'files', saltenv)
              for fn_ in self.file_list_emptydirs(saltenv):
                  fn_ = salt.utils.data.decode(fn_)
                  if fn_.startswith(path):
                      minion_dir = '{0}/{1}'.format(dest, fn_)
                      if not os.path.isdir(minion_dir):
                          os.makedirs(minion_dir)
                      ret.append(minion_dir)
          return ret