This is a preparation step for the introduction of git-ls. "git ls"
has a different set of command line options, but it will eventually
call ls_files().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 builtin/ls-files.c | 164 +++++++++++++++++++++++++++--------------------------
 1 file changed, 85 insertions(+), 79 deletions(-)

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);
+}
-- 
1.9.1.345.ga1a145c

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to