@@ -470,6 +470,7 @@ int git_configset_add_parameters(struct config_set *cs);
* The caller should not free or modify the returned pointer, as it is
* owned by the cache.
*/
+RESULT_MUST_BE_USED
int git_configset_get_value_multi(struct config_set *cs, const char *key,
const struct string_list **dest);
@@ -478,6 +479,7 @@ int git_configset_get_value_multi(struct config_set *cs, const char *key,
* value is < 0. Use it for keys known to pass git_config_parse_key(),
* i.e. those hardcoded in the code, and never user-provided keys.
*/
+RESULT_MUST_BE_USED
int git_configset_get_knownkey_value_multi(struct config_set *cs,
const char *const key,
const struct string_list **dest);
@@ -514,9 +516,11 @@ struct repository;
void repo_config(struct repository *repo, config_fn_t fn, void *data);
int repo_config_get_value(struct repository *repo,
const char *key, const char **value);
+RESULT_MUST_BE_USED
int repo_config_get_value_multi(struct repository *repo,
const char *key,
const struct string_list **dest);
+RESULT_MUST_BE_USED
int repo_config_get_knownkey_value_multi(struct repository *repo,
const char *const key,
const struct string_list **dest);
@@ -571,6 +575,7 @@ int git_config_get_value(const char *key, const char **value);
* The caller should not free or modify the returned pointer, as it is
* owned by the cache.
*/
+RESULT_MUST_BE_USED
int git_config_get_value_multi(const char *key,
const struct string_list **dest);
@@ -579,6 +584,7 @@ int git_config_get_value_multi(const char *key,
* git_configset_get_knownkey_value_multi() does for
* git_configset_get_value_multi().
*/
+RESULT_MUST_BE_USED
int git_config_get_knownkey_value_multi(const char *const key,
const struct string_list **dest);
@@ -160,19 +160,23 @@ int versioncmp(const char *s1, const char *s2)
}
if (!initialized) {
- const struct string_list *deprecated_prereleases = NULL;
+ const struct string_list *deprecated_prereleases;
+ int prereleases_ret, deprecated_prereleases_ret;
initialized = 1;
- git_config_get_knownkey_value_multi("versionsort.suffix",
- &prereleases);
- git_config_get_value_multi("versionsort.prereleasesuffix",
- &deprecated_prereleases);
-
- if (prereleases) {
- if (deprecated_prereleases)
+ prereleases_ret =
+ git_config_get_knownkey_value_multi("versionsort.suffix",
+ &prereleases);
+ deprecated_prereleases_ret =
+ git_config_get_knownkey_value_multi("versionsort.prereleasesuffix",
+ &deprecated_prereleases);
+
+ if (!prereleases_ret) {
+ if (!deprecated_prereleases_ret)
warning("ignoring versionsort.prereleasesuffix because versionsort.suffix is set");
- } else
+ } else if (!deprecated_prereleases_ret) {
prereleases = deprecated_prereleases;
+ }
}
if (prereleases && swap_prereleases(s1, s2, (const char *) p1 - s1 - 1,
&diff))
Use the RESULT_MUST_BE_USED attribute to assert that all users of the *_multi() API use the return values, in the preceding commit "for-each-repo" started using the return value meaningfully. This requires changing versioncmp() so that we use the "ret" versions of the return values, and don't implicitly rely on "deprecated_prereleases" being set to NULL if the key didn't exist. See 1e8697b5c4e (submodule--helper: check repo{_submodule,}_init() return values, 2022-09-01) for the introduction of RESULT_MUST_BE_USED. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- config.h | 6 ++++++ versioncmp.c | 22 +++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-)