Tag "H" (cached) is not shown though because it's usually the majority
and becomes noise. Not showing it makes the other tags stand out. -t
is on by default if more than one file category is selected.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 Documentation/git-list-files.txt |  6 ++++++
 builtin/ls-files.c               | 27 +++++++++++++++++----------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/Documentation/git-list-files.txt b/Documentation/git-list-files.txt
index 725a236..0ef616b 100644
--- a/Documentation/git-list-files.txt
+++ b/Documentation/git-list-files.txt
@@ -45,6 +45,12 @@ OPTIONS
 --unmerged::
        Show unmerged files
 
+-t::
+--[no-]tag::
+       Show a tag to indicate file type. Automatically turned on with
+       multiple file selections. See linkgit::git-ls-files[1] option
+       `-t` for more information.
+
 -R::
 --recursive::
        Equivalent of `--max-depth=-1` (infinite recursion).
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index db0ee6b..14dfd2a 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -596,6 +596,8 @@ int cmd_ls_files(int argc, const char **argv, const char 
*cmd_prefix)
                        N_("show untracked files")),
                OPT_SET_INT('R', "recursive", &max_depth,
                            N_("shortcut for --max-depth=-1"), -1),
+               OPT_BOOL('t', "tag", &show_tag,
+                       N_("identify the file status with tags")),
                OPT_BIT('i', "ignored", &dir.flags,
                        N_("show ignored files"),
                        DIR_SHOW_IGNORED),
@@ -636,6 +638,7 @@ int cmd_ls_files(int argc, const char **argv, const char 
*cmd_prefix)
                setup_standard_excludes(&dir);
                use_color = -1;
                max_depth = 0;
+               show_tag = -1;
                git_config(git_ls_config, NULL);
        } else
                git_config(git_default_config, NULL);
@@ -648,16 +651,6 @@ int cmd_ls_files(int argc, const char **argv, const char 
*cmd_prefix)
        for (i = 0; i < exclude_list.nr; i++) {
                add_exclude(exclude_list.items[i].string, "", 0, el, 
--exclude_args);
        }
-       if (show_tag || show_valid_bit) {
-               tag_cached = "H ";
-               tag_unmerged = "M ";
-               tag_removed = "R ";
-               tag_modified = "C ";
-               tag_other = "? ";
-               tag_killed = "K ";
-               tag_skip_worktree = "S ";
-               tag_resolve_undo = "U ";
-       }
        if (show_modified || show_others || show_deleted || (dir.flags & 
DIR_SHOW_IGNORED) || show_killed)
                require_work_tree = 1;
        if (show_unmerged && !porcelain)
@@ -711,6 +704,20 @@ int cmd_ls_files(int argc, const char **argv, const char 
*cmd_prefix)
              show_killed || show_modified || show_resolve_undo))
                show_cached = 1;
 
+       if (show_tag == -1)
+               show_tag = (show_cached + show_deleted + show_others +
+                           show_unmerged + show_killed + show_modified) > 1;
+       if (show_tag || show_valid_bit) {
+               tag_cached = porcelain ? "  " : "H ";
+               tag_unmerged = "M ";
+               tag_removed = "R ";
+               tag_modified = "C ";
+               tag_other = "? ";
+               tag_killed = "K ";
+               tag_skip_worktree = "S ";
+               tag_resolve_undo = "U ";
+       }
+
        if (max_prefix)
                prune_cache(max_prefix);
        if (with_tree) {
-- 
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