code: def compress_files(files, archive, path=None, overwrite=True):
      """Compress `files` into an `archive` file
  
      Parameters
      ----------
      files : list of str
      archive : str
      path : str
        Alternative directory under which compressor will be invoked, to e.g.
        take into account relative paths of files and/or archive
      overwrite : bool
        Whether to allow overwriting the target archive file if one already exists
      """
      with swallow_outputs() as cmo:
          with chpwd(path):
              if not overwrite:
                  patoolib.util.check_new_filename(archive)
              patoolib.util.check_archive_filelist(files)
              # Call protected one to avoid the checks on existence on unixified path
              patoolib._create_archive(
                  unixify_path(archive),
                  [unixify_path(f) for f in files],
                  verbosity=100,
              )
          if cmo.out:
              lgr.debug("patool gave stdout:\n%s", cmo.out)
          if cmo.err:
              lgr.debug("patool gave stderr:\n%s", cmo.err)
  
file_path: datalad/datalad/support/archive_utils_patool.py
imports: import patoolib
  from .external_versions import external_versions
  import os
  from .exceptions import MissingExternalDependency
  from .path import basename, join
  from datalad.utils import ensure_bytes, chpwd
  import logging
  import patoolib.util
  from ..support.exceptions import CommandError
  from ..utils import swallow_outputs
  from datalad.cmd import WitlessRunner, StdOutErrCapture
  from ..utils import ensure_unicode
  from ..utils import on_windows
label_desc: Use image node_id 4 for calling a global function with example usage: compress_files(files, archive, path, overwrite) without return types