Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
5.3 kB · 193 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194From df0a1cf61188b5b7bb98675d746cb63d9300f148 Mon Sep 17 00:00:00 2001From: rnhmjoj <rnhmjoj@inventati.org>Date: Sat, 1 Jul 2023 18:47:05 +0200Subject: [PATCH] Add mode to validate the atomic configuration
--- src/usr/argp/main.c | 6 ++++++ src/usr/argp/wargp/file.c | 26 +++++++++++++++++++++++++- src/usr/argp/wargp/file.h | 1 + src/usr/nl/file.c | 32 ++++++++++++++++++++++---------- src/usr/nl/file.h | 3 ++- 5 files changed, 56 insertions(+), 12 deletions(-)
diff --git a/src/usr/argp/main.c b/src/usr/argp/main.cindex 744a6df0..d04917da 100644--- a/src/usr/argp/main.c+++ b/src/usr/argp/main.c@@ -238,6 +238,12 @@ static struct cmd_option file_ops[] = { .handler = handle_file_update, .handle_autocomplete = autocomplete_file_update, },+ {+ .label = "check",+ .xt = XT_ANY,+ .handler = handle_file_check,+ .handle_autocomplete = autocomplete_file_update,+ }, { 0 }, }; diff --git a/src/usr/argp/wargp/file.c b/src/usr/argp/wargp/file.cindex 0951b544..27ee3e64 100644--- a/src/usr/argp/wargp/file.c+++ b/src/usr/argp/wargp/file.c@@ -26,6 +26,30 @@ static struct wargp_option update_opts[] = { { 0 }, }; +int handle_file_check(char *iname, int argc, char **argv, void const *arg)+{+ struct update_args uargs = { 0 };+ struct joolnl_socket sk = { 0 };+ struct jool_result result;++ result.error = wargp_parse(update_opts, argc, argv, &uargs);+ if (result.error)+ return result.error;++ if (!uargs.file_name.value) {+ struct requirement reqs[] = {+ { false, "a file name" },+ { 0 }+ };+ return requirement_print(reqs);+ }++ result = joolnl_file_parse(&sk, xt_get(), iname, uargs.file_name.value,+ uargs.force.value, true);++ return pr_result(&result);+}+ int handle_file_update(char *iname, int argc, char **argv, void const *arg) { struct update_args uargs = { 0 };@@ -49,7 +73,7 @@ int handle_file_update(char *iname, int argc, char **argv, void const *arg) return pr_result(&result); result = joolnl_file_parse(&sk, xt_get(), iname, uargs.file_name.value,- uargs.force.value);+ uargs.force.value, false); joolnl_teardown(&sk); return pr_result(&result);diff --git a/src/usr/argp/wargp/file.h b/src/usr/argp/wargp/file.hindex ce5de508..8ea4a4d2 100644--- a/src/usr/argp/wargp/file.h+++ b/src/usr/argp/wargp/file.h@@ -2,6 +2,7 @@ #define SRC_USR_ARGP_WARGP_FILE_H_ int handle_file_update(char *iname, int argc, char **argv, void const *arg);+int handle_file_check(char *iname, int argc, char **argv, void const *arg); void autocomplete_file_update(void const *args); #endif /* SRC_USR_ARGP_WARGP_FILE_H_ */diff --git a/src/usr/nl/file.c b/src/usr/nl/file.cindex f9413236..51a668bd 100644--- a/src/usr/nl/file.c+++ b/src/usr/nl/file.c@@ -29,6 +29,7 @@ static struct joolnl_socket sk; static char const *iname; static xlator_flags flags; static __u8 force;+static bool check; struct json_meta { char const *name; /* This being NULL signals the end of the array. */@@ -163,9 +164,11 @@ static struct jool_result handle_array(cJSON *json, int attrtype, char *name, goto too_small; nla_nest_end(msg, root);- result = joolnl_request(&sk, msg, NULL, NULL);- if (result.error)- return result;+ if (!check) {+ result = joolnl_request(&sk, msg, NULL, NULL);+ if (result.error)+ return result;+ } msg = NULL; json = json->prev;@@ -179,6 +182,8 @@ static struct jool_result handle_array(cJSON *json, int attrtype, char *name, return result_success(); nla_nest_end(msg, root);+ if (check)+ return result_success(); return joolnl_request(&sk, msg, NULL, NULL); too_small:@@ -244,6 +249,8 @@ static struct jool_result handle_global(cJSON *json) nla_nest_end(msg, root); free(meta);+ if (check)+ return result_success(); return joolnl_request(&sk, msg, NULL, NULL); revert_meta:@@ -654,9 +661,11 @@ static struct jool_result send_ctrl_msg(bool init) else NLA_PUT(msg, JNLAR_ATOMIC_END, 0, NULL); - result = joolnl_request(&sk, msg, NULL, NULL);- if (result.error)- return result;+ if (!check) {+ result = joolnl_request(&sk, msg, NULL, NULL);+ if (result.error)+ return result;+ } return result_success(); @@ -683,9 +692,11 @@ static struct jool_result do_parsing(char const *iname, char *buffer) if (result.error) goto fail; - result = send_ctrl_msg(true);- if (result.error)- goto fail;+ if (!check) {+ result = send_ctrl_msg(true);+ if (result.error)+ goto fail;+ } switch (xlator_flags2xt(flags)) { case XT_SIIT:@@ -718,12 +729,13 @@ fail: } struct jool_result joolnl_file_parse(struct joolnl_socket *_sk, xlator_type xt,- char const *iname, char const *file_name, bool _force)+ char const *iname, char const *file_name, bool _force, bool _check) { char *buffer; struct jool_result result; sk = *_sk;+ check = _check; flags = xt; force = _force ? JOOLNLHDR_FLAGS_FORCE : 0; diff --git a/src/usr/nl/file.h b/src/usr/nl/file.hindex 51802aaf..8b4a66dd 100644--- a/src/usr/nl/file.h+++ b/src/usr/nl/file.h@@ -9,7 +9,8 @@ struct jool_result joolnl_file_parse( xlator_type xt, char const *iname, char const *file_name,- bool force+ bool force,+ bool check ); struct jool_result joolnl_file_get_iname(-- 2.40.1