Skip to content

Commit 8bbea98

Browse files
tridgeclaude
andcommitted
runtests.py: accept a relative --rsync-bin
Tests are launched with subprocess.run(..., cwd=TOOLDIR) so the subprocess's argv[0] resolves against TOOLDIR, not the runner's invocation cwd. A user-supplied --rsync-bin=../foo/rsync therefore worked when invoked from inside TOOLDIR but silently failed (or ENOENT'd inside individual tests) when invoked from a sibling directory. Fix: absolutize rsync_bin via os.path.abspath() at parse time, before it propagates into build_rsync_cmd()/RSYNC. abspath() captures os.getcwd() now, which is the operator's invocation cwd -- exactly what the --rsync-bin=../path form expresses. Regression check: cd /tmp/somewhere-else ln -s /path/to/rsync ./alt/rsync python3 /path/to/rsync-git/runtests.py \ --rsync-bin=./alt/rsync \ --srcdir=/path/to/rsync-git --tooldir=/path/to/rsync-git \ 00-hello Before this commit the test failed at subprocess time with the relative path being looked up under TOOLDIR; after, it passes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f2eef1f commit 8bbea98

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

runtests.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,12 @@ def main():
323323
if not srcdir or srcdir == '.':
324324
srcdir = tooldir
325325
rsync_bin = args.rsync_bin or os.environ.get('rsync_bin') or os.path.join(tooldir, 'rsync')
326+
# Absolutize: tests run with subprocess(cwd=TOOLDIR) below, so a relative
327+
# argv[0] would re-resolve against TOOLDIR rather than the runner's
328+
# invocation cwd, breaking --rsync-bin=../foo/rsync forms. abspath()
329+
# captures os.getcwd() now, which is what the operator intended.
330+
if rsync_bin and not os.path.isabs(rsync_bin):
331+
rsync_bin = os.path.abspath(rsync_bin)
326332

327333
suitedir = os.path.join(srcdir, 'testsuite')
328334
scratchbase = os.path.join(os.environ.get('scratchbase', tooldir), 'testtmp')

0 commit comments

Comments
 (0)