Show changes to builtin/ls-files.c +85 −79
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index 8eef423..20ca3f2 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -31,6 +31,8 @@ static int line_terminator = '\n';
static int debug_mode;
static int use_color;
static unsigned int colopts;
+static int max_depth = -1;
+static int show_tag;
static const char *prefix;
static int max_prefix_len;
@@ -42,6 +44,8 @@ static const char *with_tree;
static int exc_given;
static int exclude_args;
static struct string_list output = STRING_LIST_INIT_NODUP;
+static struct dir_struct dir;
+static struct string_list exclude_list = STRING_LIST_INIT_NODUP;
static const char *tag_cached = "";
static const char *tag_unmerged = "";
@@ -500,89 +504,12 @@ static int option_parse_exclude_standard(const struct option *opt,
return 0;
}
-int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
+static int ls_files(const char **argv, const char *prefix)
{
- int require_work_tree = 0, show_tag = 0, i;
- int max_depth = -1;
+ int require_work_tree = 0, i;
const char *max_prefix;
- struct dir_struct dir;
struct exclude_list *el;
- struct string_list exclude_list = STRING_LIST_INIT_NODUP;
- struct option builtin_ls_files_options[] = {
- { OPTION_CALLBACK, 'z', NULL, NULL, NULL,
- N_("paths are separated with NUL character"),
- PARSE_OPT_NOARG, option_parse_z },
- OPT_BOOL('t', NULL, &show_tag,
- N_("identify the file status with tags")),
- OPT_BOOL('v', NULL, &show_valid_bit,
- N_("use lowercase letters for 'assume unchanged' files")),
- OPT_BOOL('c', "cached", &show_cached,
- N_("show cached files in the output (default)")),
- OPT_BOOL('d', "deleted", &show_deleted,
- N_("show deleted files in the output")),
- OPT_BOOL('m', "modified", &show_modified,
- N_("show modified files in the output")),
- OPT_BOOL('o', "others", &show_others,
- N_("show other files in the output")),
- OPT_BIT('i', "ignored", &dir.flags,
- N_("show ignored files in the output"),
- DIR_SHOW_IGNORED),
- OPT_BOOL('s', "stage", &show_stage,
- N_("show staged contents' object name in the output")),
- OPT_BOOL('k', "killed", &show_killed,
- N_("show files on the filesystem that need to be removed")),
- OPT_BIT(0, "directory", &dir.flags,
- N_("show 'other' directories' name only"),
- DIR_SHOW_OTHER_DIRECTORIES),
- OPT_NEGBIT(0, "empty-directory", &dir.flags,
- N_("don't show empty directories"),
- DIR_HIDE_EMPTY_DIRECTORIES),
- OPT_BOOL('u', "unmerged", &show_unmerged,
- N_("show unmerged files in the output")),
- OPT_BOOL(0, "resolve-undo", &show_resolve_undo,
- N_("show resolve-undo information")),
- { OPTION_CALLBACK, 'x', "exclude", &exclude_list, N_("pattern"),
- N_("skip files matching pattern"),
- 0, option_parse_exclude },
- { OPTION_CALLBACK, 'X', "exclude-from", &dir, N_("file"),
- N_("exclude patterns are read from <file>"),
- 0, option_parse_exclude_from },
- OPT_STRING(0, "exclude-per-directory", &dir.exclude_per_dir, N_("file"),
- N_("read additional per-directory exclude patterns in <file>")),
- { OPTION_CALLBACK, 0, "exclude-standard", &dir, NULL,
- N_("add the standard git exclusions"),
- PARSE_OPT_NOARG, option_parse_exclude_standard },
- { OPTION_SET_INT, 0, "full-name", &prefix_len, NULL,
- N_("make the output relative to the project top directory"),
- PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL },
- OPT_BOOL(0, "error-unmatch", &error_unmatch,
- N_("if any <file> is not in the index, treat this as an error")),
- OPT_STRING(0, "with-tree", &with_tree, N_("tree-ish"),
- N_("pretend that paths removed since <tree-ish> are still present")),
- OPT__COLOR(&use_color, N_("show color")),
- OPT_COLUMN(0, "column", &colopts, N_("show files in columns")),
- { OPTION_INTEGER, 0, "max-depth", &max_depth, N_("depth"),
- N_("descend at most <depth> levels"), PARSE_OPT_NONEG,
- NULL, 1 },
- OPT__ABBREV(&abbrev),
- OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")),
- OPT_END()
- };
-
- if (argc == 2 && !strcmp(argv[1], "-h"))
- usage_with_options(ls_files_usage, builtin_ls_files_options);
- memset(&dir, 0, sizeof(dir));
- prefix = cmd_prefix;
- if (prefix)
- prefix_len = strlen(prefix);
- git_config(git_default_config, NULL);
-
- if (read_cache() < 0)
- die("index file corrupt");
-
- argc = parse_options(argc, argv, prefix, builtin_ls_files_options,
- ls_files_usage, 0);
el = add_exclude_list(&dir, EXC_CMDL, "--exclude option");
for (i = 0; i < exclude_list.nr; i++) {
add_exclude(exclude_list.items[i].string, "", 0, el, --exclude_args);
@@ -681,3 +608,82 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
return 0;
}
+
+int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
+{
+ struct option builtin_ls_files_options[] = {
+ { OPTION_CALLBACK, 'z', NULL, NULL, NULL,
+ N_("paths are separated with NUL character"),
+ PARSE_OPT_NOARG, option_parse_z },
+ OPT_BOOL('t', NULL, &show_tag,
+ N_("identify the file status with tags")),
+ OPT_BOOL('v', NULL, &show_valid_bit,
+ N_("use lowercase letters for 'assume unchanged' files")),
+ OPT_BOOL('c', "cached", &show_cached,
+ N_("show cached files in the output (default)")),
+ OPT_BOOL('d', "deleted", &show_deleted,
+ N_("show deleted files in the output")),
+ OPT_BOOL('m', "modified", &show_modified,
+ N_("show modified files in the output")),
+ OPT_BOOL('o', "others", &show_others,
+ N_("show other files in the output")),
+ OPT_BIT('i', "ignored", &dir.flags,
+ N_("show ignored files in the output"),
+ DIR_SHOW_IGNORED),
+ OPT_BOOL('s', "stage", &show_stage,
+ N_("show staged contents' object name in the output")),
+ OPT_BOOL('k', "killed", &show_killed,
+ N_("show files on the filesystem that need to be removed")),
+ OPT_BIT(0, "directory", &dir.flags,
+ N_("show 'other' directories' name only"),
+ DIR_SHOW_OTHER_DIRECTORIES),
+ OPT_NEGBIT(0, "empty-directory", &dir.flags,
+ N_("don't show empty directories"),
+ DIR_HIDE_EMPTY_DIRECTORIES),
+ OPT_BOOL('u', "unmerged", &show_unmerged,
+ N_("show unmerged files in the output")),
+ OPT_BOOL(0, "resolve-undo", &show_resolve_undo,
+ N_("show resolve-undo information")),
+ { OPTION_CALLBACK, 'x', "exclude", &exclude_list, N_("pattern"),
+ N_("skip files matching pattern"),
+ 0, option_parse_exclude },
+ { OPTION_CALLBACK, 'X', "exclude-from", &dir, N_("file"),
+ N_("exclude patterns are read from <file>"),
+ 0, option_parse_exclude_from },
+ OPT_STRING(0, "exclude-per-directory", &dir.exclude_per_dir, N_("file"),
+ N_("read additional per-directory exclude patterns in <file>")),
+ { OPTION_CALLBACK, 0, "exclude-standard", &dir, NULL,
+ N_("add the standard git exclusions"),
+ PARSE_OPT_NOARG, option_parse_exclude_standard },
+ { OPTION_SET_INT, 0, "full-name", &prefix_len, NULL,
+ N_("make the output relative to the project top directory"),
+ PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL },
+ OPT_BOOL(0, "error-unmatch", &error_unmatch,
+ N_("if any <file> is not in the index, treat this as an error")),
+ OPT_STRING(0, "with-tree", &with_tree, N_("tree-ish"),
+ N_("pretend that paths removed since <tree-ish> are still present")),
+ OPT__COLOR(&use_color, N_("show color")),
+ OPT_COLUMN(0, "column", &colopts, N_("show files in columns")),
+ { OPTION_INTEGER, 0, "max-depth", &max_depth, N_("depth"),
+ N_("descend at most <depth> levels"), PARSE_OPT_NONEG,
+ NULL, 1 },
+ OPT__ABBREV(&abbrev),
+ OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")),
+ OPT_END()
+ };
+
+ if (argc == 2 && !strcmp(argv[1], "-h"))
+ usage_with_options(ls_files_usage, builtin_ls_files_options);
+
+ prefix = cmd_prefix;
+ if (prefix)
+ prefix_len = strlen(prefix);
+ git_config(git_default_config, NULL);
+
+ if (read_cache() < 0)
+ die("index file corrupt");
+
+ argc = parse_options(argc, argv, prefix, builtin_ls_files_options,
+ ls_files_usage, 0);
+ return ls_files(argv, prefix);
+}