]> git.ipfire.org Git - thirdparty/git.git/commitdiff
clean: improve -n and -f implementation and documentation
authorSergey Organov <sorganov@gmail.com>
Sun, 3 Mar 2024 09:50:32 +0000 (12:50 +0300)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Mar 2024 17:50:04 +0000 (09:50 -0800)
What -n actually does in addition to its documented behavior is
ignoring of configuration variable clean.requireForce, that makes
sense provided -n prevents files removal anyway.

So, first, document this in the manual, and then modify implementation
to make this more explicit in the code.

Improved implementation also stops to share single internal variable
'force' between command-line -f option and configuration variable
clean.requireForce, resulting in more clear logic.

Two error messages with slightly different text depending on if
clean.requireForce was explicitly set or not, are merged into a single
one.

The resulting error message now does not mention -n as well, as it
neither matches intended clean.requireForce usage nor reflects
clarified implementation.

Documentation of clean.requireForce is changed accordingly.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/clean.txt
Documentation/git-clean.txt
builtin/clean.c

index f05b9403b5ad903ea68d68e896acaff253bfde37..b19ca210f39b57353c0eac3681638238df266cd9 100644 (file)
@@ -1,3 +1,3 @@
 clean.requireForce::
-       A boolean to make git-clean do nothing unless given -f,
-       -i, or -n.  Defaults to true.
+       A boolean to make git-clean refuse to delete files unless -f
+       or -i is given. Defaults to true.
index 69331e3f05a13eed6ffb084e292f8452b241f13c..662eebb852076a22bde18c1fffdb3d1fe3026c77 100644 (file)
@@ -49,6 +49,8 @@ OPTIONS
 -n::
 --dry-run::
        Don't actually remove anything, just show what would be done.
+       Configuration variable clean.requireForce is ignored, as
+       nothing will be deleted anyway.
 
 -q::
 --quiet::
index d90766cad3a0ba13c41dd0b90c03254ba5eb83ee..41502dcb0ddeedaa80257097747de86714927de4 100644 (file)
@@ -25,7 +25,7 @@
 #include "help.h"
 #include "prompt.h"
 
-static int force = -1; /* unset */
+static int require_force = -1; /* unset */
 static int interactive;
 static struct string_list del_list = STRING_LIST_INIT_DUP;
 static unsigned int colopts;
@@ -128,7 +128,7 @@ static int git_clean_config(const char *var, const char *value,
        }
 
        if (!strcmp(var, "clean.requireforce")) {
-               force = !git_config_bool(var, value);
+               require_force = git_config_bool(var, value);
                return 0;
        }
 
@@ -920,7 +920,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
 {
        int i, res;
        int dry_run = 0, remove_directories = 0, quiet = 0, ignored = 0;
-       int ignored_only = 0, config_set = 0, errors = 0, gone = 1;
+       int ignored_only = 0, force = 0, errors = 0, gone = 1;
        int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT;
        struct strbuf abs_path = STRBUF_INIT;
        struct dir_struct dir = DIR_INIT;
@@ -946,22 +946,17 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_clean_config, NULL);
-       if (force < 0)
-               force = 0;
-       else
-               config_set = 1;
 
        argc = parse_options(argc, argv, prefix, options, builtin_clean_usage,
                             0);
 
-       if (!interactive && !dry_run && !force) {
-               if (config_set)
-                       die(_("clean.requireForce set to true and neither -i, -n, nor -f given; "
-                                 "refusing to clean"));
-               else
-                       die(_("clean.requireForce defaults to true and neither -i, -n, nor -f given;"
+       /* Dry run won't remove anything, so requiring force makes no sense */
+       if (dry_run)
+               require_force = 0;
+
+       if (require_force != 0 && !force && !interactive)
+               die(_("clean.requireForce is true and neither -f nor -i given:"
                                  " refusing to clean"));
-       }
 
        if (force > 1)
                rm_flags = 0;