]> git.ipfire.org Git - thirdparty/rsync.git/commit
runtests.py: accept a relative --rsync-bin master
authorAndrew Tridgell <andrew@tridgell.net>
Tue, 26 May 2026 21:07:58 +0000 (07:07 +1000)
committerAndrew Tridgell <andrew@tridgell.net>
Tue, 26 May 2026 23:00:24 +0000 (09:00 +1000)
commit8bbea983929786eec07b3daeed4bd04fc24bcf2e
tree3b96e57e2be231d9f4bebc8dd55bc709256b9927
parentf2eef1f0d28d684a841019bdaac8bd8c8de26287
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>
runtests.py