diff --git a/src/client/client_cli.c b/src/client/client_cli.c index 4a3ca80..c1e656c 100644 --- a/src/client/client_cli.c +++ b/src/client/client_cli.c @@ -814,6 +814,13 @@ int parse_args(Config* config, int argc, char* argv[], int* positional_args, } else if (opt_is(argv[i], "--compress-threads", NULL) && i + 1 < argc) { if (set_compression_threads_option(&config->compression_threads, argv[++i]) != 0) 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] == '-') { char* escaped = output_escape(argv[i], false); fprintf(stderr, "Unknown option: %s\n", escaped ? escaped : ""); diff --git a/src/client/usage.c b/src/client/usage.c index 94c9d4e..7aa0b3d 100644 --- a/src/client/usage.c +++ b/src/client/usage.c @@ -38,6 +38,8 @@ void print_usage(void) { printf(" -@, --modify-window Modification time tolerance\n"); printf(" -u, --update Skip files newer than the source on receiver\n"); printf(" --existing Skip files not already present at destination\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(" -W, --whole-file Transfer changed files without delta processing\n"); printf(" --delta-block Delta block size in bytes (default: %d)\n", diff --git a/tests/test_client_cli.c b/tests/test_client_cli.c index 435ffcc..e9d73ca 100644 --- a/tests/test_client_cli.c +++ b/tests/test_client_cli.c @@ -753,6 +753,21 @@ static void test_parse_args_no_preserve_blocks_implicit_metadata() { } } +/* 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); + } +} + static void test_parse_args_rejects_unsafe_negation() { static const char* const options[] = {"--no-archive", "--no-timeout", "--no-unknown"}; for (size_t i = 0; i < sizeof(options) / sizeof(options[0]); i++) { @@ -766,6 +781,21 @@ static void test_parse_args_rejects_unsafe_negation() { } } +/* 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); + } +} + static void test_parse_args_old_args() { Config* cfg = config_create(); char* argv[] = {"fastsync", "--old-args", "/src", "/dst"}; @@ -1059,7 +1089,7 @@ void test_client_cli() { test_parse_args_info_verbose_order(); test_parse_args_rejects_invalid_info_flag(); test_parse_args_archive(); -test_parse_args_negations(); + test_parse_args_negations(); test_parse_args_negation_order(); test_parse_args_no_preserve_blocks_implicit_metadata(); test_parse_args_rejects_unsafe_negation(); @@ -1080,4 +1110,6 @@ test_parse_args_negations(); test_parse_args_rejects_invalid_compression_level_equals(); test_parse_args_rejects_invalid_compression_choice(); test_parse_args_partial_progress(); + test_parse_args_checksum_choice_aliases(); + test_parse_args_checksum_choice_requires_value(); }