[PATCH 11/16] Add ls command
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 22:50:32
Subsystem:
kernel build + files below scripts/ (unless maintained elsewhere), the rest · Maintainers:
Nathan Chancellor, Nicolas Schier, Linus Torvalds
The command is supposed to be git variant of UNIX ls. Currently it's just a stripped down version of ls-files with some porcelain touch: - auto refreshing index - setup standard excludes Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- .gitignore | 1 + Makefile | 2 +- builtin.h | 1 + builtin/ls-files.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ command-list.txt | 1 + git.c | 1 + 6 files changed, 57 insertions(+), 1 deletions(-)
diff --git a/.gitignore b/.gitignore
index a1a1202..c090d21 100644
--- a/.gitignore
+++ b/.gitignore@@ -66,6 +66,7 @@ /git-instaweb /git-log /git-lost-found +/git-ls /git-ls-files /git-ls-remote /git-ls-tree
diff --git a/Makefile b/Makefile
index 0e459e4..5efbb1c 100644
--- a/Makefile
+++ b/Makefile@@ -1958,7 +1958,7 @@ builtin/prune.o builtin/reflog.o reachable.o: reachable.h builtin/commit.o builtin/revert.o wt-status.o: wt-status.h builtin/tar-tree.o archive-tar.o: tar.h connect.o transport.o http-backend.o: url.h -branch.o column.o pager.o help.o tag.o: column.h +branch.o builtin/ls-files.o column.o pager.o help.o tag.o: column.h http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
diff --git a/builtin.h b/builtin.h
index 904e067..5aede6e 100644
--- a/builtin.h
+++ b/builtin.h@@ -80,6 +80,7 @@ extern int cmd_index_pack(int argc, const char **argv, const char *prefix); extern int cmd_init_db(int argc, const char **argv, const char *prefix); extern int cmd_log(int argc, const char **argv, const char *prefix); extern int cmd_log_reflog(int argc, const char **argv, const char *prefix); +extern int cmd_ls(int argc, const char **argv, const char *prefix); extern int cmd_ls_files(int argc, const char **argv, const char *prefix); extern int cmd_ls_tree(int argc, const char **argv, const char *prefix); extern int cmd_ls_remote(int argc, const char **argv, const char *prefix);
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index fb2d5f4..cab7a10 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c@@ -619,3 +619,55 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) return 0; } + +int cmd_ls(int argc, const char **argv, const char *cmd_prefix) +{ + struct dir_struct dir; + struct option builtin_ls_files_options[] = { + OPT_BOOLEAN('c', "cached", &show_cached, + "show cached files in the output (default)"), + OPT_BOOLEAN('d', "deleted", &show_deleted, + "show deleted files in the output"), + OPT_BOOLEAN('m', "modified", &show_modified, + "show modified files in the output"), + OPT_BOOLEAN('o', "others", &show_others, + "show other files in the output"), + OPT_BIT('i', "ignored", &dir.flags, + "show ignored files in the output", + DIR_SHOW_IGNORED), + OPT_BOOLEAN('k', "killed", &show_killed, + "show files on the filesystem that need to be removed"), + 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); + + if (dir.flags & DIR_SHOW_IGNORED || show_others) + setup_standard_excludes(&dir); + + pathspec = get_pathspec(prefix, argv); + + if (show_modified) + refresh_index(&the_index, REFRESH_QUIET, pathspec, NULL, NULL); + + /* With no flags, we default to showing the cached files */ + if (!(show_stage | show_deleted | show_others | show_unmerged | + show_killed | show_modified | show_resolve_undo)) + show_cached = 1; + + show_files(&dir); + return 0; +}
diff --git a/command-list.txt b/command-list.txt
index 95bf18c..15e6770 100644
--- a/command-list.txt
+++ b/command-list.txt@@ -59,6 +59,7 @@ git-instaweb ancillaryinterrogators gitk mainporcelain git-log mainporcelain common git-lost-found ancillarymanipulators deprecated +git-ls mainporcelain git-ls-files plumbinginterrogators git-ls-remote plumbinginterrogators git-ls-tree plumbinginterrogators
diff --git a/git.c b/git.c
index 68334f6..f8e20d2 100644
--- a/git.c
+++ b/git.c@@ -357,6 +357,7 @@ static void handle_internal_command(int argc, const char **argv) { "init", cmd_init_db }, { "init-db", cmd_init_db }, { "log", cmd_log, RUN_SETUP }, + { "ls", cmd_ls, RUN_SETUP | NEED_WORK_TREE }, { "ls-files", cmd_ls_files, RUN_SETUP }, { "ls-tree", cmd_ls_tree, RUN_SETUP }, { "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY },
--
1.7.2.2