[PATCH 3/2] Use parse-options in builtin-clean
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:47
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Johannes Schindelin <redacted>
---
On Sun, 4 Nov 2007, Pierre Habouzit wrote:
> On Sun, Nov 04, 2007 at 07:02:21PM +0000, Shawn Bohrer wrote:
>
> > + for (i = 1; i < argc; i++) {
> > + const char *arg = argv[i];
> > [...]
>
> Please, parse-options.c is now in next, please use it.
Something like this?
builtin-clean.c | 71 ++++++++++++++++++++----------------------------------
1 files changed, 26 insertions(+), 45 deletions(-)
diff --git a/builtin-clean.c b/builtin-clean.c
index 4141eb4..d6fc2ad 100644
--- a/builtin-clean.c
+++ b/builtin-clean.c@@ -9,81 +9,62 @@ #include "builtin.h" #include "cache.h" #include "dir.h" +#include "parse-options.h" -static int disabled = 1; +static int force = 0; static int show_only = 0; static int remove_directories = 0; static int quiet = 0; static int ignored = 0; static int ignored_only = 0; -static const char builtin_clean_usage[] = -"git-clean [-d] [-f] [-n] [-q] [-x | -X] [--] <paths>..."; +static const char *const builtin_clean_usage[] = { + "git-clean [-d] [-f] [-n] [-q] [-x | -X] [--] <paths>...", + NULL +}; static int git_clean_config(const char *var, const char *value) { if (!strcmp(var, "clean.requireforce")) { - disabled = git_config_bool(var, value); + force = !git_config_bool(var, value); } return 0; } int cmd_clean(int argc, const char **argv, const char *prefix) { - int i, j; + int j; struct strbuf directory; struct dir_struct dir; const char *path = "."; const char *base = ""; int baselen = 0; static const char **pathspec; + struct option options[] = { + OPT__QUIET(&quiet), + OPT__DRY_RUN(&show_only), + OPT_BOOLEAN('f', NULL, &force, "force"), + OPT_BOOLEAN('d', NULL, &remove_directories, + "remove whole directories"), + OPT_BOOLEAN('x', NULL, &ignored, "remove ignored files, too"), + OPT_BOOLEAN('X', NULL, &ignored_only, + "remove only ignored files"), + OPT_END() + }; - memset(&dir, 0, sizeof(dir)); git_config(git_clean_config); + argc = parse_options(argc, argv, options, builtin_clean_usage, 0); - for (i = 1; i < argc; i++) { - const char *arg = argv[i]; - - if (arg[0] != '-') - break; - if (!strcmp(arg, "--")) { - i++; - break; - } - if (!strcmp(arg, "-n")) { - show_only = 1; - disabled = 0; - continue; - } - if (!strcmp(arg, "-f")) { - disabled = 0; - continue; - } - if (!strcmp(arg, "-d")) { - remove_directories = 1; - continue; - } - if (!strcmp(arg, "-q")) { - quiet = 1; - continue; - } - if (!strcmp(arg, "-x")) { - ignored = 1; - continue; - } - if (!strcmp(arg, "-X")) { - ignored_only = 1; - dir.show_ignored =1; - dir.exclude_per_dir = ".gitignore"; - continue; - } - usage(builtin_clean_usage); + memset(&dir, 0, sizeof(dir)); + if (ignored_only) { + dir.show_ignored =1; + dir.exclude_per_dir = ".gitignore"; } if (ignored && ignored_only) die("-x and -X cannot be used together"); - if (disabled) + if (!show_only && !force) die("clean.requireForce set and -n or -f not given; refusing to clean"); dir.show_other_directories = 1;
@@ -96,7 +77,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix) } } - pathspec = get_pathspec(prefix, argv + i); + pathspec = get_pathspec(prefix, argv); read_cache(); read_directory(&dir, path, base, baselen, pathspec); strbuf_init(&directory, 0);
--
1.5.3.5.1549.g91a3