diff options
author | Wayne Davison <wayne@opencoder.net> | 2022-10-20 10:54:14 -0700 |
---|---|---|
committer | Wayne Davison <wayne@opencoder.net> | 2022-10-20 17:50:06 -0700 |
commit | 3b719d1d6e914a2ad29ad0dae5e24d64f71ae68b (patch) | |
tree | 6f61a1bef90c11a4e229f7bf711396b98b9a1750 | |
parent | ebe1af749cf8debca9ca90f09306a67cac9c9d4d (diff) | |
download | rsync-3b719d1d6e914a2ad29ad0dae5e24d64f71ae68b.tar.gz |
Improve JSON output a bit more.
-rw-r--r-- | NEWS.md | 7 | ||||
-rwxr-xr-x | support/json-rsync-version | 25 | ||||
-rw-r--r-- | usage.c | 2 |
3 files changed, 26 insertions, 8 deletions
@@ -29,18 +29,19 @@ environment var for how to customize this. - Improved the xattr hash table to use a 64-bit key without slowing down the - key's computation. This should make extra sure that a collision doesn't + key's computation. This should make extra sure that a hash collision doesn't happen. - If the `--version` option is repeated (e.g. `-VV`) then the information is - output in a (still fairly readable) JSON format. Client side only. + output in a (still readable) JSON format. Client side only. - The script `support/json-rsync-version` is available to get the JSON style version output from any rsync. The script accepts either text on stdin **or** an arg that specifies an rsync executable to run with a doubled `--version` option. If the text we get isn't already in JSON format, it is converted. Newer rsync versions will provide more complete json info than - older rsync versions. + older rsync versions. Various tweaks are made to keep the flag names + consistent across versions. - The [`use chroot`](rsyncd.conf.5#) daemon parameter now defaults to "unset" so that rsync can use chroot when it works and a sanitized copy when chroot diff --git a/support/json-rsync-version b/support/json-rsync-version index bf5684b7..31fed7f1 100755 --- a/support/json-rsync-version +++ b/support/json-rsync-version @@ -2,6 +2,17 @@ import sys, argparse, subprocess, json +TWEAK_NAME = { + 'asm': 'asm_roll', + 'ASM': 'asm_roll', + 'hardlink_special': 'hardlink_specials', + 'protect_args': 'secluded_args', + 'protected_args': 'secluded_args', + 'SIMD': 'SIMD_roll', + } + +MOVE_OPTIM = set('asm_roll SIMD_roll'.split()) + def main(): if not args.rsync or args.rsync == '-': ver_out = sys.stdin.read().strip() @@ -11,6 +22,7 @@ def main(): print(ver_out) return info = { } + misplaced_optims = { } for line in ver_out.splitlines(): if line.startswith('rsync '): prog, vstr, ver, pstr, vstr2, proto = line.split() @@ -40,13 +52,16 @@ def main(): elif val.endswith('-bit'): var = var[:-1] + '_bits' val = int(val.split('-')[0]) - if var == 'protect-args': - var = 'secluded-args' else: var = x val = True var = var.replace(' ', '_').replace('-', '_') - info[sect_name][var] = val + if var in TWEAK_NAME: + var = TWEAK_NAME[var] + if sect_name[0] != 'o' and var in MOVE_OPTIM: + misplaced_optims[var] = val + else: + info[sect_name][var] = val else: info[sect_name] += [ x for x in line.split() if not x.startswith('(') ] elif line == '': @@ -58,10 +73,12 @@ def main(): for chk in 'capabilities optimizations'.split(): if chk not in info: info[chk] = { } + if misplaced_optims: + info['optimizations'].update(misplaced_optims) for chk in 'checksum_list compress_list daemon_auth_list'.split(): if chk not in info: info[chk] = [ ] - info['license'] = 'GPL3' + info['license'] = 'GPLv3' if ver[0] == '3' else 'GPLv2' info['caveat'] = 'rsync comes with ABSOLUTELY NO WARRANTY' print(json.dumps(info)) @@ -290,7 +290,7 @@ void print_rsync_version(enum logcode f) output_nno_list(f, "Daemon auth list", &valid_auth_checksums); if (f == FNONE) { - json_line("license", "GPL3"); + json_line("license", "GPLv3"); json_line("caveat", "rsync comes with ABSOLUTELY NO WARRANTY"); printf("\n}\n"); return; |