`shutil.copytree` fails on bcachefs case insensitive directories
オープン
まだ誰も着手していません。
stdlib
type-bug
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Bug report
Bug description:
On bcachefs create case insensitive directory with some file inside:
mkdir ncs
chattr +F ncs
touch ncs/something.txt
then do this
import shutil
shutil.copytree("ncs/", "target/")
fails with
Traceback (most recent call last):
File "<string>", line 1, in <module>
import shutil; shutil.copytree("ncs/", "target/")
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/shutil.py", line 654, in copytree
return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks,
ignore=ignore, copy_function=copy_function,
ignore_dangling_symlinks=ignore_dangling_symlinks,
dirs_exist_ok=dirs_exist_ok)
File "/usr/lib/python3.14/shutil.py", line 608, in _copytree
raise Error(errors)
shutil.Error: [('ncs/', 'target/', "[Errno 39] Directory not empty: 'target/'")]
This is because of
listxattr("ncs/", "bcachefs.casefold\0bcachefs_effec"..., 256) = 46
getxattr("ncs/", "bcachefs.casefold", "1", 128) = 1
setxattr("target/", "bcachefs.casefold", "1", 1, 0) = -1 ENOTEMPTY (Directory not empty)
getcwd("/home/user/_x", 1024) = 14
happening after contents were copied and case insensitivity can't be enabled afterwards.
Note: On ext4 copytree results in a directory without casefolding flag.
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
- gh-145869
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まずリンクされている PR gh-145869 を確認し、その後 shutil.py の shutil.copytree と _copytree から着手してください。報告にあるコマンドと Python の例を使って case-insensitive bcachefs の失敗を再現してください。報告されたコピー操作がファイルシステム属性を正しく処理し、表示された Directory not empty エラーを発生させなければ完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- operating-systems
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100