[PATCH 1/2] ls-files: add %(objecttype) atom to format option
- From
ZheNing Hu via GitGitGadget <gitgitgadget@gmail.com>
- Date
- May 13, 2023, 09:11 UTC
- Message-ID
- <3f8884457d3628439aa9e6800c976f5a597cdda3.1683969100.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1533.git.1683969100.gitgitgadget@gmail.com>
From: ZheNing Hu <adlternative@gmail.com>
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@gmail.com> --- 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