Merge branch 'ao/submodule-wo-gitmodules-checked-out'
[gitweb.git] / builtin / submodule--helper.c
index 676175b9befa23c70e56e12c00746b8faf899b8c..d38113a31aeb3838190b7339475c7454e45f3a89 100644 (file)
@@ -2141,6 +2141,45 @@ static int check_name(int argc, const char **argv, const char *prefix)
        return 0;
 }
 
+static int module_config(int argc, const char **argv, const char *prefix)
+{
+       enum {
+               CHECK_WRITEABLE = 1
+       } command = 0;
+
+       struct option module_config_options[] = {
+               OPT_CMDMODE(0, "check-writeable", &command,
+                           N_("check if it is safe to write to the .gitmodules file"),
+                           CHECK_WRITEABLE),
+               OPT_END()
+       };
+       const char *const git_submodule_helper_usage[] = {
+               N_("git submodule--helper config name [value]"),
+               N_("git submodule--helper config --check-writeable"),
+               NULL
+       };
+
+       argc = parse_options(argc, argv, prefix, module_config_options,
+                            git_submodule_helper_usage, PARSE_OPT_KEEP_ARGV0);
+
+       if (argc == 1 && command == CHECK_WRITEABLE)
+               return is_writing_gitmodules_ok() ? 0 : -1;
+
+       /* Equivalent to ACTION_GET in builtin/config.c */
+       if (argc == 2)
+               return print_config_from_gitmodules(the_repository, argv[1]);
+
+       /* Equivalent to ACTION_SET in builtin/config.c */
+       if (argc == 3) {
+               if (!is_writing_gitmodules_ok())
+                       die(_("please make sure that the .gitmodules file is in the working tree"));
+
+               return config_set_in_gitmodules_file_gently(argv[1], argv[2]);
+       }
+
+       usage_with_options(git_submodule_helper_usage, module_config_options);
+}
+
 #define SUPPORT_SUPER_PREFIX (1<<0)
 
 struct cmd_struct {
@@ -2170,6 +2209,7 @@ static struct cmd_struct commands[] = {
        {"absorb-git-dirs", absorb_git_dirs, SUPPORT_SUPER_PREFIX},
        {"is-active", is_active, 0},
        {"check-name", check_name, 0},
+       {"config", module_config, 0},
 };
 
 int cmd_submodule__helper(int argc, const char **argv, const char *prefix)