summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Davison <wayne@opencoder.net>2022-10-20 10:54:14 -0700
committerWayne Davison <wayne@opencoder.net>2022-10-20 17:50:06 -0700
commit3b719d1d6e914a2ad29ad0dae5e24d64f71ae68b (patch)
tree6f61a1bef90c11a4e229f7bf711396b98b9a1750
parentebe1af749cf8debca9ca90f09306a67cac9c9d4d (diff)
downloadrsync-3b719d1d6e914a2ad29ad0dae5e24d64f71ae68b.tar.gz
Improve JSON output a bit more.
-rw-r--r--NEWS.md7
-rwxr-xr-xsupport/json-rsync-version25
-rw-r--r--usage.c2
3 files changed, 26 insertions, 8 deletions
diff --git a/NEWS.md b/NEWS.md
index 24862dd0..ad1aaee0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -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))
diff --git a/usage.c b/usage.c
index 2db64767..a5b59ad8 100644
--- a/usage.c
+++ b/usage.c
@@ -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;