Skip to content

Commit

Permalink
[8.2.x] Fixes crashing under a squashfuse_ll read-only mount (#12302)
Browse files Browse the repository at this point in the history
Co-authored-by: Yutian Li <[email protected]>
  • Loading branch information
github-actions[bot] and hotpxl authored May 9, 2024
1 parent 8fdb729 commit 328001e
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 1 deletion.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,7 @@ Yao Xiao
Yoav Caspi
Yuliang Shao
Yusuke Kadowaki
Yutian Li
Yuval Shimon
Zac Hatfield-Dodds
Zachary Kneupper
Expand Down
1 change: 1 addition & 0 deletions changelog/12300.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixed handling of 'Function not implemented' error under squashfuse_ll, which is a different way to say that the mountpoint is read-only.
5 changes: 4 additions & 1 deletion src/_pytest/assertion/rewrite.py
Original file line number Diff line number Diff line change
Expand Up @@ -1171,7 +1171,10 @@ def try_makedirs(cache_dir: Path) -> bool:
return False
except OSError as e:
# as of now, EROFS doesn't have an equivalent OSError-subclass
if e.errno == errno.EROFS:
#
# squashfuse_ll returns ENOSYS "OSError: [Errno 38] Function not
# implemented" for a read-only error
if e.errno in {errno.EROFS, errno.ENOSYS}:
return False
raise
return True
Expand Down
5 changes: 5 additions & 0 deletions testing/test_assertrewrite.py
Original file line number Diff line number Diff line change
Expand Up @@ -1974,6 +1974,11 @@ def fake_mkdir(p, exist_ok=False, *, exc):
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
assert not try_makedirs(p)

err = OSError()
err.errno = errno.ENOSYS
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
assert not try_makedirs(p)

# unhandled OSError should raise
err = OSError()
err.errno = errno.ECHILD
Expand Down

0 comments on commit 328001e

Please sign in to comment.