From: ZheNing Hu <adlternative@xxxxxxxxx> Sometimes users may want to align the feature of `git ls-files --format` with that of `git ls-tree --format`, but the %(objecttype) atom is missing in the format option of git ls-files compared to git ls-tree. Therefore, the %(objecttype) atom is added to the format option of git ls-files, which can be used to obtain the object type of the file which is recorded in the index. Signed-off-by: ZheNing Hu <adlternative@xxxxxxxxx> --- Documentation/git-ls-files.txt | 2 ++ builtin/ls-files.c | 2 ++ t/t3013-ls-files-format.sh | 7 +++++++ 3 files changed, 11 insertions(+) diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 1abdd3c21c5..4356c094cec 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -270,6 +270,8 @@ interpolated. The following "fieldname" are understood: objectmode:: The mode of the file which is recorded in the index. +objecttype:: + The object type of the file which is recorded in the index. objectname:: The name of the file which is recorded in the index. stage:: diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 625f48f0d61..6ff764cda18 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -272,6 +272,8 @@ static size_t expand_show_index(struct strbuf *sb, const char *start, strbuf_addf(sb, "%06o", data->ce->ce_mode); else if (skip_prefix(start, "(objectname)", &p)) strbuf_add_unique_abbrev(sb, &data->ce->oid, abbrev); + else if (skip_prefix(start, "(objecttype)", &p)) + strbuf_addstr(sb, type_name(object_type(data->ce->ce_mode))); else if (skip_prefix(start, "(stage)", &p)) strbuf_addf(sb, "%d", ce_stage(data->ce)); else if (skip_prefix(start, "(eolinfo:index)", &p)) diff --git a/t/t3013-ls-files-format.sh b/t/t3013-ls-files-format.sh index ef6fb53f7f1..3a1da3d6697 100755 --- a/t/t3013-ls-files-format.sh +++ b/t/t3013-ls-files-format.sh @@ -38,6 +38,13 @@ test_expect_success 'git ls-files --format objectname v.s. -s' ' test_cmp expect actual ' +test_expect_success 'git ls-files --format objecttype' ' + git ls-files --format="%(objectname)" o1.txt o4.txt o6.txt >objectname && + git cat-file --batch-check="%(objecttype)" >expect <objectname && + git ls-files --format="%(objecttype)" o1.txt o4.txt o6.txt >actual && + test_cmp expect actual +' + test_expect_success 'git ls-files --format v.s. --eol' ' git ls-files --eol >tmp && sed -e "s/ / /g" -e "s/ */ /g" tmp >expect 2>err && -- gitgitgadget