Skip to content

Commit 88520c3

Browse files
committed
refactor
1 parent 6fecf8b commit 88520c3

2 files changed

Lines changed: 17 additions & 17 deletions

File tree

libarchive/ffi.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@
3535
ARCHIVE_FAILED = -25 # Current operation cannot complete.
3636
ARCHIVE_FATAL = -30 # No more operations are possible.
3737

38-
ARCHIVE_SYMLINK_MODE_HYBRID = 'H'
39-
ARCHIVE_SYMLINK_MODE_LOGICAL = 'L'
40-
ARCHIVE_SYMLINK_MODE_PHYSICAL = 'P'
4138

4239
# Callback types
4340

libarchive/write.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def add_entries(self, entries):
4646

4747
def add_files(
4848
self, *paths, flags=0, lookup=False, pathname=None, recursive=True,
49-
symlink_mode=ffi.ARCHIVE_SYMLINK_MODE_PHYSICAL, **attributes
49+
symlink_mode=None, **attributes
5050
):
5151
"""Read files through the OS and add them to the archive.
5252
@@ -63,11 +63,9 @@ def add_files(
6363
recursive (bool):
6464
when False, if a path in `paths` is a directory,
6565
only the directory itself is added.
66-
symlink_mode (enum):
67-
Determines how symlinks are traversed. Valid options are
68-
ARCHIVE_SYMLINK_MODE_HYBRID, ARCHIVE_SYMLINK_MODE_LOGICAL, and
69-
ARCHIVE_SYMLINK_MODE_PHYSICAL as defined in the ffi module.
70-
Default value matches default from libarchive.
66+
symlink_mode (Literal['hybrid', 'logical', 'physical'] | None):
67+
how symbolic links should be handled; see `man archive_read_disk`
68+
for meanings
7169
attributes (dict): passed to `ArchiveEntry.modify()`
7270
7371
Raises:
@@ -80,18 +78,23 @@ def add_files(
8078
if block_size <= 0:
8179
block_size = 10240 # pragma: no cover
8280

81+
set_symlink_mode = None
82+
if symlink_mode:
83+
try:
84+
set_symlink_mode = getattr(
85+
ffi, f'read_disk_set_symlink_{symlink_mode}'
86+
)
87+
except AttributeError:
88+
raise ValueError(
89+
f"symlink_mode value {symlink_mode!r} is invalid"
90+
) from None
91+
8392
entry = ArchiveEntry(header_codec=self.header_codec)
8493
entry_p = entry._entry_p
8594
for path in paths:
8695
with new_archive_read_disk(path, flags, lookup) as read_p:
87-
if (symlink_mode == ffi.ARCHIVE_SYMLINK_MODE_PHYSICAL):
88-
ffi.read_disk_set_symlink_physical(read_p)
89-
elif (symlink_mode == ffi.ARCHIVE_SYMLINK_MODE_LOGICAL):
90-
ffi.read_disk_set_symlink_logical(read_p)
91-
elif (symlink_mode == ffi.ARCHIVE_SYMLINK_MODE_HYBRID):
92-
ffi.read_disk_set_symlink_hybrid(read_p)
93-
else:
94-
raise ValueError(f"Bad symlink mode value {symlink_mode}")
96+
if set_symlink_mode:
97+
set_symlink_mode(read_p)
9598
while 1:
9699
r = read_next_header2(read_p, entry_p)
97100
if r == ARCHIVE_EOF:

0 commit comments

Comments
 (0)