2026-03-21 12:53:54 -05:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
import errno
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
2026-04-29 17:44:22 -05:00
|
|
|
import uuid
|
2026-03-21 12:53:54 -05:00
|
|
|
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
from posix_parity import cleanup_dir
|
2026-03-21 12:53:54 -05:00
|
|
|
from posix_parity import fail
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
from posix_parity import join
|
2026-04-29 17:44:22 -05:00
|
|
|
from posix_parity import mergerfs_branches
|
2026-03-21 12:53:54 -05:00
|
|
|
from posix_parity import mergerfs_get_option
|
|
|
|
|
from posix_parity import mergerfs_set_option
|
|
|
|
|
from posix_parity import touch
|
|
|
|
|
|
|
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
SKIP = 77
|
|
|
|
|
|
|
|
|
|
|
2026-03-21 12:53:54 -05:00
|
|
|
def get_errno(func):
|
|
|
|
|
try:
|
|
|
|
|
func()
|
|
|
|
|
return 0
|
|
|
|
|
except OSError as exc:
|
|
|
|
|
return exc.errno
|
|
|
|
|
|
|
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
def symlink_resolves(path):
|
|
|
|
|
target = os.readlink(path)
|
|
|
|
|
if os.path.isabs(target):
|
|
|
|
|
return os.path.realpath(target)
|
|
|
|
|
return os.path.realpath(join(os.path.dirname(path), target))
|
2026-03-21 12:53:54 -05:00
|
|
|
|
|
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
def require_symlink(path, label):
|
|
|
|
|
if not os.path.islink(path):
|
|
|
|
|
return f"{label}: expected symlink fallback"
|
|
|
|
|
if not os.path.exists(path):
|
|
|
|
|
return f"{label}: symlink target does not exist: {os.readlink(path)!r}"
|
2026-03-21 12:53:54 -05:00
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
def setup_paths(branches, mount, rel_base, name):
|
|
|
|
|
src_rel = join(rel_base, f"{name}.src")
|
|
|
|
|
dst_rel = join(rel_base, "dst", name)
|
|
|
|
|
src = join(mount, src_rel)
|
|
|
|
|
dst = join(mount, dst_rel)
|
2026-03-21 12:53:54 -05:00
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
cleanup_dir(join(branches[0], rel_base))
|
|
|
|
|
cleanup_dir(join(branches[1], rel_base))
|
|
|
|
|
os.makedirs(join(branches[0], rel_base), exist_ok=True)
|
|
|
|
|
os.makedirs(join(branches[1], rel_base, "dst"), exist_ok=True)
|
|
|
|
|
touch(join(branches[0], src_rel), b"src")
|
2026-03-21 12:53:54 -05:00
|
|
|
|
2026-04-29 17:44:22 -05:00
|
|
|
return src, dst, join(branches[0], src_rel)
|
2026-03-21 12:53:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
if len(sys.argv) != 2:
|
|
|
|
|
print("usage: TEST_cfg_link_rename_exdev <mountpoint>", file=sys.stderr)
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
mount = sys.argv[1]
|
2026-04-29 17:44:22 -05:00
|
|
|
rel_base = f".mergerfs_exdev_test_{os.getpid()}_{uuid.uuid4().hex}"
|
|
|
|
|
branches = mergerfs_branches(mount)
|
|
|
|
|
if len(branches) < 2:
|
|
|
|
|
print("EXDEV fallback test requires at least 2 branches", end="")
|
|
|
|
|
return SKIP
|
|
|
|
|
branches = branches[:2]
|
|
|
|
|
if os.stat(branches[0]).st_dev == os.stat(branches[1]).st_dev:
|
|
|
|
|
print("EXDEV fallback test requires branches on different devices", end="")
|
|
|
|
|
return SKIP
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
|
2026-03-21 12:53:54 -05:00
|
|
|
try:
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
try:
|
|
|
|
|
orig_create = mergerfs_get_option(mount, "category.create")
|
|
|
|
|
orig_link = mergerfs_get_option(mount, "link-exdev")
|
|
|
|
|
orig_rename = mergerfs_get_option(mount, "rename-exdev")
|
|
|
|
|
except (PermissionError, FileNotFoundError, OSError):
|
2026-04-29 17:44:22 -05:00
|
|
|
print("EXDEV fallback runtime options unavailable", end="")
|
|
|
|
|
return SKIP
|
2026-03-21 12:53:54 -05:00
|
|
|
|
|
|
|
|
try:
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
# Maximize chance of EXDEV path by path-preserving create policy.
|
|
|
|
|
mergerfs_set_option(mount, "category.create", "epmfs")
|
|
|
|
|
|
|
|
|
|
# link-exdev passthrough => EXDEV when cross-device path preserving applies.
|
2026-04-29 17:44:22 -05:00
|
|
|
src, dst, src_base = setup_paths(branches, mount, rel_base, "link_pass")
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
mergerfs_set_option(mount, "link-exdev", "passthrough")
|
|
|
|
|
err = get_errno(lambda: os.link(src, dst + ".link.pass"))
|
2026-04-29 17:44:22 -05:00
|
|
|
if err != errno.EXDEV:
|
|
|
|
|
print(f"link-exdev passthrough did not exercise EXDEV, errno={err}", end="")
|
|
|
|
|
return SKIP
|
|
|
|
|
|
|
|
|
|
for mode in ("rel-symlink", "abs-base-symlink", "abs-pool-symlink"):
|
|
|
|
|
src, dst, src_base = setup_paths(branches, mount, rel_base, f"link_{mode}")
|
|
|
|
|
mergerfs_set_option(mount, "link-exdev", mode)
|
|
|
|
|
link_path = dst + ".link"
|
|
|
|
|
err = get_errno(lambda: os.link(src, link_path))
|
|
|
|
|
if err != 0:
|
|
|
|
|
return fail(f"link-exdev={mode} returned errno={err}")
|
|
|
|
|
err_msg = require_symlink(link_path, f"link-exdev={mode}")
|
|
|
|
|
if err_msg:
|
|
|
|
|
return fail(err_msg)
|
|
|
|
|
resolved = symlink_resolves(link_path)
|
|
|
|
|
if mode == "abs-base-symlink" and resolved != os.path.realpath(src_base):
|
|
|
|
|
return fail(f"link-exdev={mode}: target {resolved!r} != {os.path.realpath(src_base)!r}")
|
|
|
|
|
if mode != "abs-base-symlink" and resolved != os.path.realpath(src):
|
|
|
|
|
return fail(f"link-exdev={mode}: target {resolved!r} != {os.path.realpath(src)!r}")
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
|
|
|
|
|
# rename-exdev passthrough => EXDEV in cross-device path preserving case.
|
2026-04-29 17:44:22 -05:00
|
|
|
src_ren, dst_ren, _ = setup_paths(branches, mount, rel_base, "rename_pass")
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
mergerfs_set_option(mount, "rename-exdev", "passthrough")
|
2026-04-29 17:44:22 -05:00
|
|
|
err = get_errno(lambda: os.rename(src_ren, dst_ren + ".ren.pass"))
|
|
|
|
|
if err != errno.EXDEV:
|
|
|
|
|
print(f"rename-exdev passthrough did not exercise EXDEV, errno={err}", end="")
|
|
|
|
|
return SKIP
|
|
|
|
|
|
|
|
|
|
for mode in ("rel-symlink", "abs-symlink"):
|
|
|
|
|
src_ren, dst_ren, _ = setup_paths(branches, mount, rel_base, f"rename_{mode}")
|
|
|
|
|
mergerfs_set_option(mount, "rename-exdev", mode)
|
|
|
|
|
ren_path = dst_ren + ".ren"
|
|
|
|
|
err = get_errno(lambda: os.rename(src_ren, ren_path))
|
|
|
|
|
if err != 0:
|
|
|
|
|
return fail(f"rename-exdev={mode} returned errno={err}")
|
|
|
|
|
err_msg = require_symlink(ren_path, f"rename-exdev={mode}")
|
|
|
|
|
if err_msg:
|
|
|
|
|
return fail(err_msg)
|
|
|
|
|
target = symlink_resolves(ren_path)
|
|
|
|
|
if ".mergerfs_rename_exdev" not in target:
|
|
|
|
|
return fail(f"rename-exdev={mode}: target not moved under .mergerfs_rename_exdev: {target!r}")
|
|
|
|
|
with open(ren_path, "rb") as fp:
|
|
|
|
|
if fp.read() != b"src":
|
|
|
|
|
return fail(f"rename-exdev={mode}: symlink target content mismatch")
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
except (PermissionError, FileNotFoundError, OSError):
|
2026-04-29 17:44:22 -05:00
|
|
|
return SKIP
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
finally:
|
|
|
|
|
try:
|
|
|
|
|
mergerfs_set_option(mount, "category.create", orig_create)
|
|
|
|
|
mergerfs_set_option(mount, "link-exdev", orig_link)
|
|
|
|
|
mergerfs_set_option(mount, "rename-exdev", orig_rename)
|
|
|
|
|
except OSError:
|
|
|
|
|
pass
|
2026-03-21 12:53:54 -05:00
|
|
|
|
Add unit and integration tests for recently changed code
Unit tests (29 new in tests/tests.cpp):
- str::eq() and str::startswith() char* nullptr safety
- str::from() u64/s64/int suffix parsing (K/M/G/T, overflow, invalid)
- num::humanize() byte formatting (0, 512, 1K, 1M, 1G, 1T, non-exact)
- RmdirErr priority error accumulation (ENOTEMPTY/EEXIST override rules)
- HashSet inline-to-heap growth, empty string, and large insertion
- fs::inode algorithm switching (valid/invalid names, passthrough raw ino,
distinct inodes across algorithms)
- RND::rand64() bounds (range, max, shrink_to_rand_elem)
- Branches::Impl copy and move assignment re-links default_minfreespace
Integration tests (5 new in tests/):
- TEST_policy_lup: LUP policy create and search
- TEST_rmdir_enotempty_priority: rmdir returns ENOTEMPTY for non-empty dirs
- TEST_open_after_unlink: read/write via fd after unlink
- TEST_api_xattr: mergerfs xattr API (fullpath, relpath, basepath, allpaths)
- TEST_movefile_enospc: moveonenospc configuration round-trip
Also: remove xattr nosys checks from TEST_cfg_xattr_modes, reformat
integration test scripts to use temp_dir/cleanup_dir helpers, and
minor parameter alignment changes in fuse_getxattr, fuse_init,
fuse_rename.
2026-04-29 12:19:54 -05:00
|
|
|
return 0
|
|
|
|
|
finally:
|
2026-04-29 17:44:22 -05:00
|
|
|
for branch in branches:
|
|
|
|
|
cleanup_dir(join(branch, rel_base))
|
2026-03-21 12:53:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
raise SystemExit(main())
|