From 5cdcf0210ee2a101ad23c7152df220015591ccad Mon Sep 17 00:00:00 2001 From: blob42 Date: Mon, 27 Feb 2023 00:50:23 +0100 Subject: [PATCH] send params to `cargo install` command --- README.md | 1 + rcargo | 33 +++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index aa3757a..28b8667 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ binaries into local machine. ##### Todo: * [ ] Installing binaries * [x] install a package binary from crates.io + * [x] handle custom install parameters for cargo * [ ] install a cargo package bin from local path * [ ] Building local project on remote machine * [ ] rsync local changes and build diff --git a/rcargo b/rcargo index 658b131..f8f5b77 100755 --- a/rcargo +++ b/rcargo @@ -60,11 +60,31 @@ def inst_get_binary(conn, package, debug=False): def install(args): + args.debug and print(f'{args}') print(f'{LOCAL_BIN_PATH}') - package = args.package + + # args could be a package name or a list of parameters for cargo install + package = '' + params = [] + if len(args.package) == 1 and not args.package[0].startswith('-'): + package = args.package[0] + else: + for arg in args.package: + print(arg) + if arg.startswith('--') or arg.startswith('-'): + params.append(arg) + else: + package = arg + + if len(package) == 0: + print('no package specified') + sys.exit(ERR_CMD) + + args.debug and print(f"package {package}, params: {params}") conn = Connection(args.host) - cargo_install = conn.run('cargo install {}'.format(package), warn=True, echo=True) + param_str = ' '.join(params) + cargo_install = conn.run(f'cargo install {param_str} {package}', warn=True, echo=True) print('{}'.format(cargo_install.stdout.strip())) if cargo_install.failed: print(cargo_install.stderr) @@ -98,9 +118,14 @@ if __name__ == '__main__': subparsers = parser.add_subparsers(dest='command') - install_parser = subparsers.add_parser('install', help='install packages from crates.io with remote build') + install_parser = subparsers.add_parser('install', prefix_chars="+", help='install packages from crates.io with remote build') install_parser.set_defaults(func=install) - install_parser.add_argument('package', help='package name', metavar='PACKAGE_NAME') + + install_parser.add_argument('package', nargs="*", help='package name', metavar='PACKAGE_NAME') + + # catch any parameter for cargo commands + # for example if I run `rcargoos install --force package_name` it will be catched by any_cmd + build = subparsers.add_parser('build', help='remote build local cargo package')