code: def test_clone_report_permission_issue(tdir=None):
      pdir = Path(tdir) / "protected"
      pdir.mkdir()
      # make it read-only
      pdir.chmod(0o555)
      with chpwd(pdir):
          # first check the premise of the test. If we can write (strangely
          # mounted/crippled file system, subsequent assumptions are violated
          # and we can stop
          probe = Path("probe")
          try:
              probe.write_text("should not work")
              raise SkipTest
          except PermissionError:
              # we are indeed in a read-only situation
              pass
          res = clone(
              "///",
              result_xfm=None,
              return_type="list",
              on_failure="ignore",
          )
          assert_status("error", res)
          assert_result_count(
              res,
              1,
              status="error",
              message="could not create work tree dir '%s/%s': Permission denied"
              % (pdir, get_datasets_topdir()),
          )
  
imports: import logging
  import os.path
  import stat
  from unittest.mock import patch
  import pytest
  from datalad import consts
  from datalad.api import clone, create, remove
  from datalad.cmd import GitWitlessRunner
  from datalad.cmd import WitlessRunner
  from datalad.config import ConfigManager
  from datalad.core.distributed.clone_utils import _get_installationpath_from_url, decode_source_spec
  from datalad.distribution.dataset import Dataset
  from datalad.support.annexrepo import AnnexRepo
  from datalad.support.exceptions import IncompleteResultsError
  from datalad.support.external_versions import external_versions
  from datalad.support.gitrepo import GitRepo
  from datalad.support.network import get_local_file_url
  from datalad.tests.utils_pytest import DEFAULT_BRANCH, DEFAULT_REMOTE, SkipTest, assert_false, assert_in, assert_in_results, assert_message, assert_not_in, assert_not_is_instance, assert_raises, assert_repo_status, assert_result_count, assert_result_values_equal, assert_status, create_tree, eq_, get_datasets_topdir, has_symlink_capability, integration, known_failure, known_failure_githubci_win, known_failure_osx, known_failure_windows, neq_, nok_, ok_, ok_file_has_content, ok_startswith, on_github, on_osx, on_travis, patch_config, serve_path_via_http, set_date, skip_if, skip_if_adjusted_branch, skip_if_no_network, skip_if_on_windows, skip_ssh, slow, swallow_logs, with_sameas_remote, with_tempfile, with_tree, xfail_buggy_annex_info
  from datalad.utils import Path, chpwd, get_home_envvars, on_windows, rmtree
label_desc: Use image node_id 18 for calling a global function with example usage: test_clone_report_permission_issue(tdir) without return types