Non-empty read-only directories not handled during 'bst build' and others

It seems that non-empty read-only directories are not handled as expected.

If I construct a tar file like so:

mkdir files
touch files/{a,b}
chmod ugo-w files
tar cvf files.tar files

I cannot use it in an 'import' element as I would expect:

cat > tar.bst <<EOF
kind: import
description: Import shell

sources:
- kind: tar
  url: file:///src/files.tar
  base-dir: ''
EOF

bst track tar.bst
bst build tar.bst

The 'bst build' step fails. After re-creating the read-only directory, os.link fails to create a link in it:

[--:--:--][991e5007][ main:tar.bst  ] START   Starting build
[--:--:--][991e5007][build:tar.bst  ] START   hello-buildstream/tar/991e5007-build.92.log
[--:--:--][991e5007][build:tar.bst  ] START   Staging sources
[00:00:00][991e5007][build:tar.bst  ] SUCCESS Staging sources
[00:00:00][991e5007][build:tar.bst  ] BUG     hello-buildstream/tar/991e5007-build.92.log

    An unhandled exception occured:

    Traceback (most recent call last):
      File "/src/buildstream/buildstream/_scheduler/job.py", line 265, in child_action
        result = self.action(element)
      File "/src/buildstream/buildstream/_scheduler/buildqueue.py", line 34, in process
        element._assemble()
      File "/src/buildstream/buildstream/element.py", line 1093, in _assemble
        utils.link_files(collectdir, filesdir)
      File "/src/buildstream/buildstream/utils.py", line 386, in link_files
        _process_list(src, dest, files, safe_link, result, ignore_missing=ignore_missing)
      File "/src/buildstream/buildstream/utils.py", line 553, in _process_list
        actionfunc(srcpath, destpath, result=result)
      File "/src/buildstream/buildstream/utils.py", line 250, in safe_link
        os.link(src, dest)
    PermissionError: [Errno 13] Permission denied: '/tmp/home/.cache/buildstream/build/tar-5djrnjyl/root/output/files/a' -> '/tmp/home/.cache/buildstream/build/tar-5djrnjyl/root/tmpwf74shc0/files/files/a'

If you do this as root user, it of course succeeds because root ignores permissions. Interestingly, a subsequent bst checkout as root will fail with a similar error though. Perhaps it copies as user 'tomjon', and inside the sandbox.