This appends an indicator after the file name if it's executable, a directory and so on, like in GNU ls. In fact append_indicator() is a rewrite from get_type_indicator() in coreutils.git commit 7326d1f1a67edf21947ae98194f98c38b6e9e527.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com> --- builtin/list-files.c | 27 +++++++++++++++++++++++++++ t/t7013-list-files.sh | 13 +++++++++++++ 2 files changed, 40 insertions(+) diff --git a/builtin/list-files.c b/builtin/list-files.c index 02a088d..31f1f25 100644 --- a/builtin/list-files.c +++ b/builtin/list-files.c @@ -34,6 +34,7 @@ static unsigned int colopts; static int max_depth; static int show_dirs; static int use_color = -1; +static int show_indicator; static const char * const ls_usage[] = { N_("git list-files [options] [<pathspec>...]"), @@ -51,6 +52,8 @@ struct option ls_options[] = { OPT_SET_INT('R', "recursive", &max_depth, N_("shortcut for --max-depth=-1"), -1), OPT__COLOR(&use_color, N_("show color")), + OPT_BOOL('F', "classify", &show_indicator, + N_("append indicator (one of */=>@|) to entries")), OPT_END() }; @@ -204,6 +207,28 @@ static void cleanup_tags(struct item_list *result) } } +static void append_indicator(struct strbuf *sb, mode_t mode) +{ + char c = 0; + if (S_ISREG(mode)) { + if (mode & (S_IXUSR | S_IXGRP | S_IXOTH)) + c = '*'; + } else if (S_ISDIR(mode)) + c = '/'; + else if (S_ISLNK(mode)) + c = '@'; + else if (S_ISFIFO(mode)) + c = '|'; + else if (S_ISSOCK(mode)) + c = '='; +#ifdef S_ISDOOR + else if (S_ISDOOR(mode)) + c = '>'; +#endif + if (c) + strbuf_addch(sb, c); +} + /* this is similar to quote_path_relative() except it does not clear sb */ static void quote_item(struct strbuf *out, const struct item *item) { @@ -241,6 +266,8 @@ static void display(const struct item_list *result) get_mode(item), 1); strbuf_release(&sb); } + if (show_indicator) + append_indicator("ed, get_mode(item)); if (column_active(colopts)) string_list_append(&s, quoted.buf); else diff --git a/t/t7013-list-files.sh b/t/t7013-list-files.sh index cdbc34a..16d000e 100755 --- a/t/t7013-list-files.sh +++ b/t/t7013-list-files.sh @@ -154,4 +154,17 @@ test_expect_success 'color.ls.*' ' ) ' +test_expect_success '--classify' ' + ( + cd 2 && + git list-files -F >actual && + cat >expected <<-\EOF && + dir/ + file + gitlink + EOF + test_cmp expected actual + ) +' + test_done -- 2.3.0.rc1.137.g477eb31 -- 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