Re: [PATCH 07/16] mktree: use read_index_info to read stdin lines
From: Junio C Hamano <hidden>
Date: 2024-06-12 18:35:35
Patrick Steinhardt [off-list ref] writes:
It makes perfect sense to not single out git-ls-tree(1) anymore. But I think we should help the reader a bit by continuing to point out which commands can be used as input here. That can be either here in the description, further down in the new "INPUT FORMAT" section, or in both places.
Here is a way to do so, which I alluded to earlier. The original
text is too specific to "update-index" in that it talked about
"stuffing them into the index", which does not apply in the context
of "mktree".
And then it made me realize that "ls-files -s" output has the stage
information, which of course is needed for "update-index" to be able
to recreate the index state from a textual dump, but "mktree" should
reject if given a higher stage entry.
It seems that the code after applying all these 16 patches does not
diagnose it as an error if you feed a non-zero stage. The callback
starts like so.
static int mktree_line(unsigned int mode, struct object_id *oid,
enum object_type obj_type, int stage UNUSED,
const char *path, void *cbdata)
{
I _think_ it should be made an error if the input has non-zero
stage, which would be a sign that it was taken from "ls-files -s"
(or even "ls-files -u"), out of which "git write-tree" will REFUSE
to create a tree object. "mktree" should behave the same way, no?
In any case, here is the documentation split/refactor.
Documentation/git-mktree.txt | 4 +++-
Documentation/git-update-index.txt | 14 +-------------
Documentation/index-info-formats.txt | 13 +++++++++++++
3 files changed, 17 insertions(+), 14 deletions(-)
diff --git c/Documentation/git-mktree.txt w/Documentation/git-mktree.txt
index a660438c67..fefaa83d29 100644
--- c/Documentation/git-mktree.txt
+++ w/Documentation/git-mktree.txt@@ -48,7 +48,9 @@ OPTIONS INPUT FORMAT ------------ Tree entries may be specified in any of the formats compatible with the -`--index-info` option to linkgit:git-update-index[1]. +`--index-info` option to linkgit:git-update-index[1]. That is: + +include::index-info-formats.txt[] Entries may use full pathnames containing directory separators to specify entries nested within one or more directories. These entries are inserted into
diff --git c/Documentation/git-update-index.txt w/Documentation/git-update-index.txt
index 7128aed540..2287a5d4be 100644
--- c/Documentation/git-update-index.txt
+++ w/Documentation/git-update-index.txt@@ -280,19 +280,7 @@ USING --INDEX-INFO multiple entry definitions from the standard input, and designed specifically for scripts. It can take inputs of three formats: - . mode SP type SP sha1 TAB path -+ -This format is to stuff `git ls-tree` output into the index. - - . mode SP sha1 SP stage TAB path -+ -This format is to put higher order stages into the -index file and matches 'git ls-files --stage' output. - - . mode SP sha1 TAB path -+ -This format is no longer produced by any Git command, but is -and will continue to be supported by `update-index --index-info`. +include::index-info-formats.txt[] To place a higher stage entry to the index, the path should first be removed by feeding a mode=0 entry for the path, and
diff --git c/Documentation/index-info-formats.txt w/Documentation/index-info-formats.txt
new file mode 100644
index 0000000000..037ebd2432
--- /dev/null
+++ w/Documentation/index-info-formats.txt@@ -0,0 +1,13 @@ + . mode SP type SP sha1 TAB path ++ +This format is to use `git ls-tree` output. + + . mode SP sha1 SP stage TAB path ++ +This format allows higher order stages to appear and +matches 'git ls-files --stage' output. + + . mode SP sha1 TAB path ++ +This format is no longer produced by any Git command, but is +and will continue to be supported.