builtin/config: refactor functions to have common exit paths

Refactor functions to have a single exit path. This will make it easier in subsequent commits to add common cleanup code. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed May 15, 2024 at 08:42 UTC 999425cb12face7e8e67c87d255003d40a3d3cf8
1 file changed +38 -26
builtin/config.c
+38 -26
@@ -798,6 +798,7 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix)
798 OPT_STRING(0, "default", &default_value, N_("value"), N_("use default value when missing entry")),
799 OPT_END(),
800 };
801 + int ret;
802
803 argc = parse_options(argc, argv, prefix, opts, builtin_config_get_usage,
804 PARSE_OPT_STOP_AT_NON_OPTION);
@@ -816,8 +817,11 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix)
817 setup_auto_pager("config", 1);
818
819 if (url)
819 - return get_urlmatch(argv[0], url);
820 - return get_value(argv[0], value_pattern, flags);
820 + ret = get_urlmatch(argv[0], url);
821 + else
822 + ret = get_value(argv[0], value_pattern, flags);
823 +
824 + return ret;
825 }
826
827 static int cmd_config_set(int argc, const char **argv, const char *prefix)
@@ -888,6 +892,7 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix)
892 OPT_BIT(0, "fixed-value", &flags, N_("use string equality when comparing values to value pattern"), CONFIG_FLAGS_FIXED_VALUE),
893 OPT_END(),
894 };
895 + int ret;
896
897 argc = parse_options(argc, argv, prefix, opts, builtin_config_unset_usage,
898 PARSE_OPT_STOP_AT_NON_OPTION);
@@ -900,12 +905,14 @@ static int cmd_config_unset(int argc, const char **argv, const char *prefix)
905 check_write();
906
907 if ((flags & CONFIG_FLAGS_MULTI_REPLACE) || value_pattern)
903 - return git_config_set_multivar_in_file_gently(given_config_source.file,
904 - argv[0], NULL, value_pattern,
905 - NULL, flags);
908 + ret = git_config_set_multivar_in_file_gently(given_config_source.file,
909 + argv[0], NULL, value_pattern,
910 + NULL, flags);
911 else
907 - return git_config_set_in_file_gently(given_config_source.file, argv[0],
908 - NULL, NULL);
912 + ret = git_config_set_in_file_gently(given_config_source.file, argv[0],
913 + NULL, NULL);
914 +
915 + return ret;
916 }
917
918 static int cmd_config_rename_section(int argc, const char **argv, const char *prefix)
@@ -926,11 +933,13 @@ static int cmd_config_rename_section(int argc, const char **argv, const char *pr
933 ret = git_config_rename_section_in_file(given_config_source.file,
934 argv[0], argv[1]);
935 if (ret < 0)
929 - return ret;
936 + goto out;
937 else if (!ret)
938 die(_("no such section: %s"), argv[0]);
939 + ret = 0;
940
933 - return 0;
941 +out:
942 + return ret;
943 }
944
945 static int cmd_config_remove_section(int argc, const char **argv, const char *prefix)
@@ -951,11 +960,13 @@ static int cmd_config_remove_section(int argc, const char **argv, const char *pr
960 ret = git_config_rename_section_in_file(given_config_source.file,
961 argv[0], NULL);
962 if (ret < 0)
954 - return ret;
963 + goto out;
964 else if (!ret)
965 die(_("no such section: %s"), argv[0]);
966 + ret = 0;
967
958 - return 0;
968 +out:
969 + return ret;
970 }
971
972 static int show_editor(void)
@@ -1199,41 +1210,41 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix)
1210 }
1211 else if (actions == ACTION_GET) {
1212 check_argc(argc, 1, 2);
1202 - return get_value(argv[0], argv[1], flags);
1213 + ret = get_value(argv[0], argv[1], flags);
1214 }
1215 else if (actions == ACTION_GET_ALL) {
1216 do_all = 1;
1217 check_argc(argc, 1, 2);
1207 - return get_value(argv[0], argv[1], flags);
1218 + ret = get_value(argv[0], argv[1], flags);
1219 }
1220 else if (actions == ACTION_GET_REGEXP) {
1221 show_keys = 1;
1222 use_key_regexp = 1;
1223 do_all = 1;
1224 check_argc(argc, 1, 2);
1214 - return get_value(argv[0], argv[1], flags);
1225 + ret = get_value(argv[0], argv[1], flags);
1226 }
1227 else if (actions == ACTION_GET_URLMATCH) {
1228 check_argc(argc, 2, 2);
1218 - return get_urlmatch(argv[0], argv[1]);
1229 + ret = get_urlmatch(argv[0], argv[1]);
1230 }
1231 else if (actions == ACTION_UNSET) {
1232 check_write();
1233 check_argc(argc, 1, 2);
1234 if (argc == 2)
1224 - return git_config_set_multivar_in_file_gently(given_config_source.file,
1225 - argv[0], NULL, argv[1],
1226 - NULL, flags);
1235 + ret = git_config_set_multivar_in_file_gently(given_config_source.file,
1236 + argv[0], NULL, argv[1],
1237 + NULL, flags);
1238 else
1228 - return git_config_set_in_file_gently(given_config_source.file,
1229 - argv[0], NULL, NULL);
1239 + ret = git_config_set_in_file_gently(given_config_source.file,
1240 + argv[0], NULL, NULL);
1241 }
1242 else if (actions == ACTION_UNSET_ALL) {
1243 check_write();
1244 check_argc(argc, 1, 2);
1234 - return git_config_set_multivar_in_file_gently(given_config_source.file,
1235 - argv[0], NULL, argv[1],
1236 - NULL, flags | CONFIG_FLAGS_MULTI_REPLACE);
1245 + ret = git_config_set_multivar_in_file_gently(given_config_source.file,
1246 + argv[0], NULL, argv[1],
1247 + NULL, flags | CONFIG_FLAGS_MULTI_REPLACE);
1248 }
1249 else if (actions == ACTION_RENAME_SECTION) {
1250 check_write();
@@ -1241,7 +1252,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix)
1252 ret = git_config_rename_section_in_file(given_config_source.file,
1253 argv[0], argv[1]);
1254 if (ret < 0)
1244 - return ret;
1255 + goto out;
1256 else if (!ret)
1257 die(_("no such section: %s"), argv[0]);
1258 else
@@ -1253,7 +1264,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix)
1264 ret = git_config_rename_section_in_file(given_config_source.file,
1265 argv[0], NULL);
1266 if (ret < 0)
1256 - return ret;
1267 + goto out;
1268 else if (!ret)
1269 die(_("no such section: %s"), argv[0]);
1270 else
@@ -1267,9 +1278,10 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix)
1278 check_argc(argc, 1, 2);
1279 if (argc == 2)
1280 color_stdout_is_tty = git_config_bool("command line", argv[1]);
1270 - return get_colorbool(argv[0], argc == 2);
1281 + ret = get_colorbool(argv[0], argc == 2);
1282 }
1283
1284 +out:
1285 free(comment);
1286 free(value);
1287 return ret;