code: def generate_snapshot(self, prov_dep):
          # type: (MutableMapping[Text, Any]) -> None
          
          self.self_check()
          for key, value in prov_dep.items():
              if key == "location" and value.split("/")[-1]:
                  filename = value.split("/")[-1]
                  path = os.path.join(self.folder, SNAPSHOT, filename)
                  filepath = ''
                  if "file://" in value:
                      filepath = value[7:]
                  else:
                      filepath = value
  
                  # FIXME: What if destination path already exists?
                  if os.path.exists(filepath):
                      try:
                          if os.path.isdir(filepath):
                              shutil.copytree(filepath, path)
                          else:
                              shutil.copy(filepath, path)
                          timestamp = datetime.datetime.fromtimestamp(os.path.getmtime(filepath))
                          self.add_tagfile(path, timestamp)
                      except PermissionError:
                          pass  # FIXME: avoids duplicate snapshotting; need better solution
              elif key in ("secondaryFiles", "listing"):
                  for files in value:
                      if isinstance(files, MutableMapping):
                          self.generate_snapshot(files)
              else:
                  pass
docs: Copy all of the CWL files to the snapshot/ directory.