mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-30 17:48:36 -04:00
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import subprocess
|
|
|
|
from harness.mutation import plant_operator_symlink, run_symlink_matrix
|
|
from harness.rsync import rsync_argv
|
|
|
|
PINNED = 1000000000
|
|
|
|
def _setup(ctx):
|
|
src = ctx.base / 'src'
|
|
dest = ctx.base / 'dest'
|
|
src.mkdir()
|
|
dest.mkdir()
|
|
(src / 'f0').write_text("PAYLOAD-DATA\n")
|
|
return plant_operator_symlink(ctx, dest)
|
|
|
|
def _run(ctx, opt):
|
|
extra = ['--insecure-links'] if ctx.insecure else []
|
|
subprocess.run(
|
|
rsync_argv('-a', '--delay-updates', f'--partial-dir={opt}', *extra,
|
|
'src/', 'dest/'),
|
|
cwd=str(ctx.base), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
|
|
def case_create(ctx):
|
|
opt, escape = _setup(ctx)
|
|
_run(ctx, opt)
|
|
return escape.exists()
|
|
|
|
def case_reuse(ctx):
|
|
opt, escape = _setup(ctx)
|
|
escape.mkdir(parents=True, exist_ok=True)
|
|
os.utime(escape, (PINNED, PINNED))
|
|
pinned = escape.stat().st_mtime
|
|
_run(ctx, opt)
|
|
return escape.stat().st_mtime != pinned
|
|
|
|
run_symlink_matrix('--partial-dir', case_create, paths=('abs',), locations=('parent',),
|
|
label='create')
|
|
run_symlink_matrix('--partial-dir', case_reuse, paths=('abs',), locations=('parent',),
|
|
label='reuse')
|
|
print("--partial-dir symlink policy (abs, parent; create + reuse): enforced")
|