From: Wayne Davison Date: Mon, 20 Dec 2021 21:34:05 +0000 (-0800) Subject: Add --munge-links rsync option; convert to python. X-Git-Tag: v3.2.4pre1~22 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9015da151fff4fe1d844a5c8b3f07f7ecff63e9;p=thirdparty%2Frsync.git Add --munge-links rsync option; convert to python. --- diff --git a/packaging/cull_options b/packaging/cull_options index 7588002b..85311c7c 100755 --- a/packaging/cull_options +++ b/packaging/cull_options @@ -1,85 +1,138 @@ -#!/usr/bin/env perl -# This script outputs some perl code that parses all possible options -# that the code in options.c might send to the server. This perl code -# is included in the rrsync script. -use strict; - -our %short_no_arg; -our %short_with_num = ( '@' => 1 ); -our %long_opt = ( # These include some extra long-args that BackupPC uses: - 'block-size' => 1, - 'daemon' => -1, - 'debug' => 1, - 'fake-super' => 0, - 'fuzzy' => 0, - 'group' => 0, - 'hard-links' => 0, - 'ignore-times' => 0, - 'info' => 1, - 'links' => 0, - 'log-file' => 3, - 'one-file-system' => 0, - 'owner' => 0, - 'perms' => 0, - 'recursive' => 0, - 'times' => 0, - 'write-devices' => -1, -); -our $last_long_opt; - -open(IN, '../options.c') or die "Unable to open ../options.c: $!\n"; - -while () { - if (/\Qargstr[x++]\E = '([^.ie])'/) { - $short_no_arg{$1} = 1; - undef $last_long_opt; - } elsif (/\Qasprintf(\E[^,]+, "-([a-zA-Z0-9])\%l?[ud]"/) { - $short_with_num{$1} = 1; - undef $last_long_opt; - } elsif (/\Qargs[ac++]\E = "--([^"=]+)"/) { - $last_long_opt = $1; - $long_opt{$1} = 0 unless exists $long_opt{$1}; - } elsif (defined($last_long_opt) - && /\Qargs[ac++]\E = ([^["\s]+);/) { - $long_opt{$last_long_opt} = 2; - undef $last_long_opt; - } elsif (/return "--([^"]+-dest)";/) { - $long_opt{$1} = 2; - undef $last_long_opt; - } elsif (/\Qasprintf(\E[^,]+, "--([^"=]+)=/ || /\Qargs[ac++]\E = "--([^"=]+)=/ || /fmt = .*: "--([^"=]+)=/) { - $long_opt{$1} = 1; - undef $last_long_opt; - } -} -close IN; - -my $short_no_arg = join('', sort keys %short_no_arg); -my $short_with_num = join('', sort keys %short_with_num); - -print < $val,\n"; -} - -print ");\n\n"; +""" + + print(txt, end='') + + if args.python: + print("long_opt = {") + sep = ':' + else: + print("our %long_opt = (") + sep = ' =>' + + for opt in sorted(long_opt): + if opt.startswith(('min-', 'max-')): + val = 1 + else: + val = long_opt[opt] + print(' ', repr(opt) + sep, str(val) + ',') + + if args.python: + print("}") + else: + print(");") + print('') + + +def str_assign(name, val, comment=None): + comment = ' # ' + comment if comment else '' + if args.python: + return name + ' = ' + repr(val) + comment + "\n" + return 'our $' + name + ' = ' + repr(val) + ';' + comment + "\n" + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description="Output culled rsync options for rrsync.", add_help=False) + out_group = parser.add_mutually_exclusive_group() + out_group.add_argument('--perl', action='store_true', help="Output perl code (the default).") + out_group.add_argument('--python', action='store_true', help="Output python code.") + parser.add_argument('--help', '-h', action='help', help="Output this help message and exit.") + args = parser.parse_args() + main() + +# vim: sw=4 et