From 44ce154e375081b7c0a339aa77a6d0fd0888870a Mon Sep 17 00:00:00 2001 From: TapTap Date: Thu, 3 Sep 2026 16:42:29 +0200 Subject: [PATCH] feat: add checksum choice alias --- src/client/client_cli.c | 7 +++++++ src/client/usage.c | 2 ++ tests/test_client_cli.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/client/client_cli.c b/src/client/client_cli.c index 191cc07..3d54efc 100644 --- a/src/client/client_cli.c +++ b/src/client/client_cli.c @@ -361,6 +361,13 @@ int parse_args(Config* config, int argc, char* argv[], int* positional_args, log_message(LOG_LEVEL_ERROR, "--compress-level must be between 1 and 22"); return -1; } + } else if (opt_is(argv[i], "--checksum-choice", "--cc")) { + if (i + 1 >= argc) { + log_message(LOG_LEVEL_ERROR, "missing argument for %s", argv[i]); + return -1; + } + log_message(LOG_LEVEL_ERROR, "%s is not supported yet (xxHash64 is used)", argv[i]); + return -1; } else if (argv[i][0] == '-') { fprintf(stderr, "Unknown option: %s\n", argv[i]); print_usage(); diff --git a/src/client/usage.c b/src/client/usage.c index 2f800af..1d09f8b 100644 --- a/src/client/usage.c +++ b/src/client/usage.c @@ -28,6 +28,8 @@ void print_usage(void) { printf(" --max-size Skip files larger than n bytes\n"); printf(" --min-size Skip files smaller than n bytes\n"); printf(" --incremental Skip files unchanged since last transfer\n"); + printf(" --checksum-choice, --cc Checksum algorithm (not supported yet; xxHash64 is " + "used)\n"); printf(" --delta Delta transfer for changed files (requires --incremental)\n"); printf(" --delta-block Delta block size in bytes (default: %d)\n", DELTA_BLOCK_SIZE_DEFAULT); diff --git a/tests/test_client_cli.c b/tests/test_client_cli.c index 656fd40..98d1f6f 100644 --- a/tests/test_client_cli.c +++ b/tests/test_client_cli.c @@ -339,6 +339,36 @@ static void test_parse_args_archive() { config_delete(cfg); } +/* Checksum-choice spellings are recognized and rejected until algorithms are implemented. */ +static void test_parse_args_checksum_choice_aliases() { + static const char* const options[] = {"--checksum-choice", "--cc"}; + + for (size_t i = 0; i < sizeof(options) / sizeof(options[0]); i++) { + Config* cfg = config_create(); + char* argv[] = {"fastsync", (char*)options[i], "xxh64", "/src", "/dst"}; + int positional_args[2]; + int positional_count = 0; + + EXPECT_EQ_INT(parse_args(cfg, 5, argv, positional_args, &positional_count), -1); + config_delete(cfg); + } +} + +/* Both checksum-choice spellings require a value. */ +static void test_parse_args_checksum_choice_requires_value() { + static const char* const options[] = {"--checksum-choice", "--cc"}; + + for (size_t i = 0; i < sizeof(options) / sizeof(options[0]); i++) { + Config* cfg = config_create(); + char* argv[] = {"fastsync", (char*)options[i]}; + int positional_args[2]; + int positional_count = 0; + + EXPECT_EQ_INT(parse_args(cfg, 2, argv, positional_args, &positional_count), -1); + config_delete(cfg); + } +} + void test_client_cli() { test_validate_config_required_paths(); test_validate_config_incompatible_options(); @@ -360,4 +390,6 @@ void test_client_cli() { test_parse_args_unknown_option(); test_parse_args_rejects_unimplemented_options(); test_parse_args_archive(); + test_parse_args_checksum_choice_aliases(); + test_parse_args_checksum_choice_requires_value(); }