All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v2 10/17] Add git-ls, a user friendly version of ls-files and more
Date: Wed, 26 Mar 2014 20:48:10 +0700	[thread overview]
Message-ID: <1395841697-11742-11-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1395841697-11742-1-git-send-email-pclouds@gmail.com>

This is more user friendly version of ls-files:

* it's automatically colored and columnized
* it refreshes the index like all porcelain commands
* it defaults to non-recursive behavior like ls
* :(glob) is on by default so '*.c' means a.c but not a/b.c, use
  '**/*.c' for that.
* auto pager

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 .gitignore                     |  1 +
 Documentation/config.txt       | 10 ++++++
 Documentation/git-ls.txt (new) | 82 ++++++++++++++++++++++++++++++++++++++++++
 Makefile                       |  1 +
 builtin.h                      |  1 +
 builtin/ls-files.c             | 70 ++++++++++++++++++++++++++++++++++++
 command-list.txt               |  1 +
 git.c                          |  1 +
 8 files changed, 167 insertions(+)
 create mode 100644 Documentation/git-ls.txt

diff --git a/.gitignore b/.gitignore
index dc600f9..f91af81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,6 +76,7 @@
 /git-init-db
 /git-instaweb
 /git-log
+/git-ls
 /git-ls-files
 /git-ls-remote
 /git-ls-tree
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 6bca55e..87a6dcf 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -909,6 +909,12 @@ color.status.<slot>::
 	to red). The values of these variables may be specified as in
 	color.branch.<slot>.
 
+color.ls::
+	A boolean to enable/disable color in the output of
+	linkgit:git-ls[1]. May be set to `always`, `false` (or
+	`never`) or `auto` (or `true`), in which case colors are used
+	only when the output is to a terminal. Defaults to false.
+
 color.ls.<slot>::
 	Use customized color for file name colorization. If not set
 	and the environment variable LS_COLORS is set, color settings
@@ -981,6 +987,10 @@ column.clean::
 	Specify the layout when list items in `git clean -i`, which always
 	shows files and directories in columns. See `column.ui` for details.
 
+column.ls::
+	Specify whether to output tag listing in `git ls` in columns.
+	See `column.ui` for details.
+
 column.status::
 	Specify whether to output untracked files in `git status` in columns.
 	See `column.ui` for details.
diff --git a/Documentation/git-ls.txt b/Documentation/git-ls.txt
new file mode 100644
index 0000000..67ca522
--- /dev/null
+++ b/Documentation/git-ls.txt
@@ -0,0 +1,82 @@
+git-ls(1)
+===============
+
+NAME
+----
+git-ls - List files
+
+SYNOPSIS
+--------
+[verse]
+'git ls' (--[cached|deleted|others|ignored|unmerged|modified])*
+	(-[c|d|o|i|s|u|m])*
+	[options] [<pathspec>...]
+
+DESCRIPTION
+-----------
+List files (by default in current working directory) that are in the
+index. Depending on the chosen options, maybe only modified files in
+working tree are shown, or untracked files...
+
+OPTIONS
+-------
+-c::
+--cached::
+	Show cached files in the output (default)
+
+-d::
+--deleted::
+	Show deleted files in the output
+
+-m::
+--modified::
+	Show modified files in the output
+
+-o::
+--others::
+	Show other (i.e. untracked) files in the output
+
+-i::
+--ignored::
+	Show only ignored files in the output. When showing files in the
+	index, print only those matched by an exclude pattern. When
+	showing "other" files, show only those matched by an exclude
+	pattern.
+
+-u::
+--unmerged::
+	Show unmerged files in the output (forces --stage)
+
+--color[=<when>]::
+	Color file names. The value must be always (default), never,
+	or auto.
+
+--no-color::
+	Turn off coloring, even when the configuration file gives the
+	default to color output, same as `--color=never`. This is the
+	default.
+
+--column[=<options>]::
+--no-column::
+	Display files in columns. See configuration variable column.ui
+	for option syntax.`--column` and `--no-column` without options
+	are equivalent to 'always' and 'never' respectively.
+
+--max-depth <depth>::
+	For each <pathspec> given on command line, descend at most <depth>
+	levels of directories. A negative value means no limit.
+	This option is ignored if <pathspec> contains active wildcards.
+	In other words if "a*" matches a directory named "a*",
+	"*" is matched literally so --max-depth is still effective.
+
+<pathspec>::
+	Files to show. :(glob) magic is enabled and recursion disabled
+	by default.
+
+SEE ALSO
+--------
+linkgit:git-ls-files[1]
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Makefile b/Makefile
index f6a6e14..b0bc40a 100644
--- a/Makefile
+++ b/Makefile
@@ -584,6 +584,7 @@ BUILT_INS += git-cherry-pick$X
 BUILT_INS += git-format-patch$X
 BUILT_INS += git-fsck-objects$X
 BUILT_INS += git-init$X
+BUILT_INS += git-ls$X
 BUILT_INS += git-merge-subtree$X
 BUILT_INS += git-show$X
 BUILT_INS += git-stage$X
diff --git a/builtin.h b/builtin.h
index c47c110..177aa7d 100644
--- a/builtin.h
+++ b/builtin.h
@@ -75,6 +75,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 20ca3f2..74eb3c2 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -33,6 +33,7 @@ static int use_color;
 static unsigned int colopts;
 static int max_depth = -1;
 static int show_tag;
+static int porcelain;
 
 static const char *prefix;
 static int max_prefix_len;
@@ -588,6 +589,10 @@ static int ls_files(const char **argv, const char *prefix)
 			die("ls-files --with-tree is incompatible with -s or -u");
 		overlay_tree_on_cache(with_tree, max_prefix);
 	}
+	if (porcelain) {
+		refresh_index(&the_index, REFRESH_QUIET, &pathspec, NULL, NULL);
+		setup_pager();
+	}
 	show_files(&dir);
 	if (show_resolve_undo)
 		show_ru_info();
@@ -687,3 +692,68 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
 			ls_files_usage, 0);
 	return ls_files(argv, prefix);
 }
+
+static const char * const ls_usage[] = {
+	N_("git ls [options] [<file>...]"),
+	NULL
+};
+
+static int git_ls_config(const char *var, const char *value, void *cb)
+{
+	if (starts_with(var, "column."))
+		return git_column_config(var, value, "ls", &colopts);
+	if (!strcmp(var, "color.ls")) {
+		use_color = git_config_colorbool(var, value);
+		return 0;
+	}
+	return git_color_default_config(var, value, cb);
+}
+
+int cmd_ls(int argc, const char **argv, const char *cmd_prefix)
+{
+	struct option builtin_ls_options[] = {
+		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('u', "unmerged", &show_unmerged,
+			N_("show unmerged files in the output")),
+		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_END()
+	};
+
+	if (argc == 2 && !strcmp(argv[1], "-h"))
+		usage_with_options(ls_usage, builtin_ls_options);
+
+	prefix = cmd_prefix;
+	if (prefix)
+		prefix_len = strlen(prefix);
+	git_config(git_ls_config, NULL);
+
+	if (read_cache() < 0)
+		die("index file corrupt");
+
+	/* default setup */
+	porcelain = 1;
+	setenv(GIT_GLOB_PATHSPECS_ENVIRONMENT, "1", 1);
+	exc_given = 1;
+	setup_standard_excludes(&dir);
+	use_color = -1;
+	max_depth = 0;
+
+	argc = parse_options(argc, argv, prefix, builtin_ls_options,
+			     ls_usage, 0);
+	return ls_files(argv, prefix);
+}
diff --git a/command-list.txt b/command-list.txt
index cf36c3d..89e5cef 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -64,6 +64,7 @@ git-init                                mainporcelain common
 git-instaweb                            ancillaryinterrogators
 gitk                                    mainporcelain
 git-log                                 mainporcelain common
+git-ls                                  mainporcelain
 git-ls-files                            plumbinginterrogators
 git-ls-remote                           plumbinginterrogators
 git-ls-tree                             plumbinginterrogators
diff --git a/git.c b/git.c
index 9efd1a3..682a81e 100644
--- a/git.c
+++ b/git.c
@@ -381,6 +381,7 @@ static struct cmd_struct commands[] = {
 	{ "init", cmd_init_db },
 	{ "init-db", cmd_init_db },
 	{ "log", cmd_log, RUN_SETUP },
+	{ "ls", cmd_ls, RUN_SETUP },
 	{ "ls-files", cmd_ls_files, RUN_SETUP },
 	{ "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY },
 	{ "ls-tree", cmd_ls_tree, RUN_SETUP },
-- 
1.9.1.345.ga1a145c

  parent reply	other threads:[~2014-03-26 13:48 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-20 10:15 [PATCH/RFC 0/8] git-ls Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 1/8] Import $LS_COLORS parsing code from coreutils Nguyễn Thái Ngọc Duy
2014-03-20 19:09   ` David Tran
2014-03-21 11:54     ` Duy Nguyen
2014-03-21 20:01       ` David Tran
2014-03-20 10:15 ` [PATCH 2/8] ls_colors.c: a bit of document on print_color_indicator input Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 3/8] ls_colors.c: enable coloring on u+x files Nguyễn Thái Ngọc Duy
2014-03-20 11:46   ` Matthieu Moy
2014-03-20 12:14     ` Duy Nguyen
2014-03-20 17:41       ` Junio C Hamano
2014-03-21 11:52         ` Duy Nguyen
2014-03-20 10:15 ` [PATCH 4/8] ls_colors.c: new color descriptors Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 5/8] ls-files: add --color to highlight based on $LS_COLORS Nguyễn Thái Ngọc Duy
2014-03-20 10:15 ` [PATCH 6/8] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-25 11:34   ` Matthieu Moy
2014-03-20 10:15 ` [PATCH 7/8] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-25  8:55   ` Matthieu Moy
2014-03-25 11:15     ` Duy Nguyen
2014-03-27 14:36       ` Duy Nguyen
2014-03-28 13:52       ` Matthieu Moy
2014-03-28 14:15         ` Duy Nguyen
2014-03-28 14:38           ` Duy Nguyen
2014-03-20 10:15 ` [PATCH 8/8] Add git-ls, a user friendly version of ls-files and more Nguyễn Thái Ngọc Duy
2014-03-20 11:56   ` Matthieu Moy
2014-03-26 13:48 ` [PATCH v2 00/17] git-ls Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 01/17] ls_colors.c: add $LS_COLORS parsing code Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 02/17] ls_colors.c: parse color.ls.* from config file Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 03/17] ls_colors.c: add function to color a file name Nguyễn Thái Ngọc Duy
2014-03-26 19:14     ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 04/17] ls_colors.c: highlight submodules like directories Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 05/17] ls-files: buffer full item in strbuf before printing Nguyễn Thái Ngọc Duy
2014-03-26 19:22     ` Eric Sunshine
2014-03-26 23:18       ` Duy Nguyen
2014-03-27  5:22         ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 06/17] ls-files: add --color to highlight file names Nguyễn Thái Ngọc Duy
2014-03-26 19:13     ` Eric Sunshine
2014-03-26 23:15       ` Duy Nguyen
2014-03-28  0:49         ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 07/17] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-26 19:46     ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 08/17] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-26 19:50     ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 09/17] ls-files: split main ls-files logic into ls_files() function Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` Nguyễn Thái Ngọc Duy [this message]
2014-03-26 20:16     ` [PATCH v2 10/17] Add git-ls, a user friendly version of ls-files and more Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 11/17] ls: -u does not imply showing stages Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 12/17] ls: add -R/--recursive short for --max-depth=-1 Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 13/17] ls: add -1 short for --no-column in the spirit of GNU ls Nguyễn Thái Ngọc Duy
2014-03-28  3:52     ` Eric Sunshine
2014-03-26 13:48   ` [PATCH v2 14/17] ls: add -t back Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 15/17] ls: sort output and remove duplicates Nguyễn Thái Ngọc Duy
2014-03-26 13:48   ` [PATCH v2 16/17] ls: do not show duplicate cached entries Nguyễn Thái Ngọc Duy
2014-03-28  4:04     ` Eric Sunshine
2014-03-28 13:18       ` [PATCH] ls-files: do not trust stat info if lstat() fails Nguyễn Thái Ngọc Duy
2014-04-02 18:15         ` Junio C Hamano
2014-04-03 12:40           ` Duy Nguyen
2014-04-03 16:30             ` Junio C Hamano
2014-04-05  8:03               ` Duy Nguyen
2014-04-07 17:13                 ` Junio C Hamano
2014-03-26 13:48   ` [PATCH v2 17/17] ls: show directories as well as files Nguyễn Thái Ngọc Duy
2014-03-30 13:55   ` [PATCH v3 00/18] git-ls Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 01/18] ls_colors.c: add $LS_COLORS parsing code Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 02/18] ls_colors.c: parse color.ls.* from config file Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 03/18] ls_colors.c: add a function to color a file name Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 04/18] ls_colors.c: highlight submodules like directories Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 05/18] ls-files: buffer full item in strbuf before printing Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 06/18] ls-files: add --color to highlight file names Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 07/18] ls-files: add --column Nguyễn Thái Ngọc Duy
2014-03-30 13:55     ` [PATCH v3 08/18] ls-files: support --max-depth Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 09/18] Add git-list-files, a user friendly version of ls-files and more Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 10/18] list-files: -u does not imply showing stages Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 11/18] list-files: add -R/--recursive short for --max-depth=-1 Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 12/18] list-files: add -1 short for --no-column Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 13/18] list-files: add -t back Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 14/18] list-files: sort output and remove duplicates Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 15/18] list-files: do not show duplicate cached entries Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 16/18] list-files: show directories as well as files Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 17/18] list-files: add -F/--classify Nguyễn Thái Ngọc Duy
2014-03-30 13:56     ` [PATCH v3 18/18] list-files -F: show submodules with the new indicator '&' Nguyễn Thái Ngọc Duy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1395841697-11742-11-git-send-email-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.