Test failures on Windows
まだ誰も着手していません。
評価
調査の方向性
Start with libarchive/write.py, especially ArchiveWrite.add_files, which the traceback shows failing while reading directory entries and opening archive source paths. Then inspect the failing tests tests/test_convert.py, tests/test_entry.py, and tests/test_rwx.py on Windows. Done means the six reported tests pass on Windows and archive writing works across the listed writer types.
索引モデルが issue の本文から書いたものです。
説明
These tests fail for mysterious reasons.
They are all somehow related to writing archives.
I wonder why the new_archive_entry is reused in the paths loop when adding files rather than having a new entry? Nevertheless the failure might be due to the fact that somehow the file being added may be already opened for writing? Not sure. To investigate.. This could all be due to a single problem.
Possibly a build problem, though the built lib works rather well otherwise.
FWIW errno 22 is EINVAL
================================== FAILURES ===================================
________________________________ test_convert _________________________________
def test_convert():
# Collect information on what should be in the archive
tree = treestat('libarchive')
# Create an archive of our libarchive/ directory
buf = bytes(bytearray(1000000))
with memory_writer(buf, 'gnutar', 'xz') as archive1:
> archive1.add_files('libarchive/')
tests\test_convert.py:21:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
libarchive\write.py:61: in add_files
r = read_next_header2(read_p, entry_p)
libarchive\ffi.py:85: in check_int
raise archive_error(args[0], retcode)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
archive_p = 3609976, retcode = -25
def archive_error(archive_p, retcode):
msg = _error_string(archive_p)
> raise ArchiveError(msg, errno(archive_p), retcode, archive_p)
E ArchiveError: <unprintable ArchiveError object>
libarchive\ffi.py:69: ArchiveError
____________________________ test_entry_properties ____________________________
def test_entry_properties():
buf = bytes(bytearray(1000000))
with memory_writer(buf, 'gnutar') as archive:
> archive.add_files('README.rst')
tests\test_entry.py:17:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <libarchive.write.ArchiveWrite object at 0x03460150>
paths = ('README.rst',), write_p = 3609224, block_size = 10240
entry_p = 47076136
def add_files(self, *paths):
"""Read the given paths from disk and add them to the archive.
"""
write_p = self._pointer
block_size = ffi.write_get_bytes_per_block(write_p)
if block_size <= 0:
block_size = 10240 # pragma: no cover
with new_archive_entry() as entry_p:
entry = ArchiveEntry(None, entry_p)
for path in paths:
with new_archive_read_disk(path) as read_p:
while 1:
r = read_next_header2(read_p, entry_p)
if r == ARCHIVE_EOF:
break
entry.pathname = entry.pathname.lstrip('/')
read_disk_descend(read_p)
write_header(write_p, entry_p)
try:
> with open(entry_sourcepath(entry_p), 'rb') as f:
while 1:
E IOError: [Errno 13] Permission denied: '\\\\?\\c:\\w421\\python-libarchive-c\\README.rst'
libarchive\write.py:68: IOError
________________________________ test_buffers _________________________________
tmpdir = local('c:\\tmp\\pytest-49\\test_buffers0')
def test_buffers(tmpdir):
# Collect information on what should be in the archive
tree = treestat('libarchive')
# Create an archive of our libarchive/ directory
buf = bytes(bytearray(1000000))
with libarchive.memory_writer(buf, 'gnutar', 'xz') as archive:
> archive.add_files('libarchive/')
tests\test_rwx.py:23:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
libarchive\write.py:61: in add_files
r = read_next_header2(read_p, entry_p)
libarchive\ffi.py:85: in check_int
raise archive_error(args[0], retcode)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
archive_p = 3668736, retcode = -25
def archive_error(archive_p, retcode):
msg = _error_string(archive_p)
> raise ArchiveError(msg, errno(archive_p), retcode, archive_p)
E ArchiveError: H??????: Couldn't visit directory (errno=22, retcode=-25, archive_p=3668736)
libarchive\ffi.py:69: ArchiveError
___________________________________ test_fd ___________________________________
tmpdir = local('c:\\tmp\\pytest-49\\test_fd0')
def test_fd(tmpdir):
archive_file = open(tmpdir.strpath+'/test.tar.bz2', 'w+b')
fd = archive_file.fileno()
# Collect information on what should be in the archive
tree = treestat('libarchive')
# Create an archive of our libarchive/ directory
> with libarchive.fd_writer(fd, 'gnutar', 'bzip2') as archive:
archive.add_files('libarchive/')
tests\test_rwx.py:45:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
c:\Python27\Lib\contextlib.py:17: in __enter__
return self.gen.next()
libarchive\write.py:116: in fd_writer
ffi.write_open_fd(archive_p, fd)
libarchive\ffi.py:85: in check_int
raise archive_error(args[0], retcode)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
archive_p = 3669416, retcode = -30
def archive_error(archive_p, retcode):
msg = _error_string(archive_p)
> raise ArchiveError(msg, errno(archive_p), retcode, archive_p)
E ArchiveError: Failed to clean up compressor (errno=22, retcode=-30, archive_p=3669416)
libarchive\ffi.py:69: ArchiveError
_________________________________ test_files __________________________________
tmpdir = local('c:\\tmp\\pytest-49\\test_files0')
def test_files(tmpdir):
archive_path = tmpdir.strpath+'/test.tar.gz'
# Collect information on what should be in the archive
tree = treestat('libarchive')
# Create an archive of our libarchive/ directory
with libarchive.file_writer(archive_path, 'ustar', 'gzip') as archive:
> archive.add_files('libarchive/')
tests\test_rwx.py:70:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
libarchive\write.py:61: in add_files
r = read_next_header2(read_p, entry_p)
libarchive\ffi.py:85: in check_int
raise archive_error(args[0], retcode)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
archive_p = 3609400, retcode = -25
def archive_error(archive_p, retcode):
msg = _error_string(archive_p)
> raise ArchiveError(msg, errno(archive_p), retcode, archive_p)
E ArchiveError: Hibarchive/: Couldn't visit directory (errno=22, retcode=-25, archive_p=3609400)
libarchive\ffi.py:69: ArchiveError
_____________________________ test_custom_writer ______________________________
def test_custom_writer():
# Collect information on what should be in the archive
tree = treestat('libarchive')
# Create an archive of our libarchive/ directory
blocks = []
def write_cb(data):
blocks.append(data[:])
return len(data)
with libarchive.custom_writer(write_cb, 'zip') as archive:
> archive.add_files('libarchive/')
tests\test_rwx.py:97:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
libarchive\write.py:61: in add_files
r = read_next_header2(read_p, entry_p)
libarchive\ffi.py:85: in check_int
raise archive_error(args[0], retcode)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
archive_p = 3666496, retcode = -25
def archive_error(archive_p, retcode):
msg = _error_string(archive_p)
> raise ArchiveError(msg, errno(archive_p), retcode, archive_p)
E ArchiveError: 9: Couldn't visit directory (errno=22, retcode=-25, archive_p=3666496)
libarchive\ffi.py:69: ArchiveError
===================== 6 failed, 5 passed in 1.53 seconds ======================
- 主要言語
- Python
- スター
- 84
- フォーク
- 41
- 平均マージ
- 6日 12時間
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Changaco/python-libarchive-c のほかの issue
-
feature
難易度 2/5 1〜3時間 初心者へのやさしさ 51/100
Changaco/python-libarchive-c#144 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 52/100
Changaco/python-libarchive-c#143 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
Changaco/python-libarchive-c#129 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
Changaco/python-libarchive-c#122 · コメント 1 件 ·
-
Type checkingオープンfeature
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
Changaco/python-libarchive-c#111 ·
Changaco/python-libarchive-c の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
-
Validate finite output clamping limits in StepPredictor.prepare_clamping_params to prevent silent NaN/Inf propagation対応中かも @muskan-creates352 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
mllam/neural-lam#848 ·
メンテナーはふだん 2 日以内に返信
-
infra
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
fab-geocommuns/RNB-coeur#1166 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
deepspeedai/DeepSpeed#8951 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
aws/context-ontology-accelerator#343 ·
メンテナーはふだん 1 日以内に返信